microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.0-preview.5

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

57lines · modecode

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