microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
aacebo/smba-token-verify

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

Libraries/Microsoft.Teams.Apps/Routing/Router.cs

60lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4using Microsoft.Teams.Api.Activities;
5
6namespace Microsoft.Teams.Apps.Routing;
7
8public interface IRouter
9{
10 public int Length { get; }
11
12 public IList<IRoute> Select(IActivity activity);
13 public IRouter Register(IRoute route);
14 public IRouter Register(Func<IContext<IActivity>, Task<object?>> handler);
15 public IRouter Register(string name, Func<IContext<IActivity>, Task<object?>> handler);
16}
17
18public class Router : IRouter
19{
20 public int Length { get => _routes.Count; }
21
22 protected readonly List<IRoute> _routes = [];
23
24 public IList<IRoute> Select(IActivity activity)
25 {
26 return _routes
27 .Where(route => route.Select(activity))
28 .ToList();
29 }
30
31 public IRouter Register(IRoute route)
32 {
33 _routes.Add(route);
34 return this;
35 }
36
37 public IRouter Register(Func<IContext<IActivity>, Task<object?>> handler)
38 {
39 return Register(new Route()
40 {
41 Selector = _ => true,
42 Handler = handler
43 });
44 }
45
46 public IRouter Register(string? name, Func<IContext<IActivity>, Task<object?>> handler)
47 {
48 return Register(new Route()
49 {
50 Name = name,
51 Handler = handler,
52 Selector = (activity) =>
53 {
54 if (name is null || name == "activity") return true;
55 if (activity.Type.Equals(name)) return true;
56 return false;
57 }
58 });
59 }
60}