microsoft/teams.net

Public

mirrored fromhttps://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/Events/EventEmitter.cs

82lines · modecode

1using Microsoft.Teams.Apps.Plugins;
2
3namespace Microsoft.Teams.Apps.Events;
4
5internal class EventEmitter
6{
7 protected Dictionary<string, Topic> Topics { get; set; } = [];
8
9 public EventEmitter On(string name, Action<IPlugin, Event> handler)
10 {
11 if (!Topics.ContainsKey(name))
12 {
13 Topics[name] = [];
14 }
15
16 Topics[name].Add((plugin, @event, cancellationToken) =>
17 {
18 handler(plugin, @event);
19 return Task.FromResult<object?>(null);
20 });
21
22 return this;
23 }
24
25 public EventEmitter On<TResult>(string name, Func<IPlugin, Event, TResult> handler)
26 {
27 if (!Topics.ContainsKey(name))
28 {
29 Topics[name] = [];
30 }
31
32 Topics[name].Add((plugin, @event, cancellationToken) =>
33 {
34 var res = handler(plugin, @event);
35 return Task.FromResult<object?>(res);
36 });
37
38 return this;
39 }
40
41 public EventEmitter On(string name, Func<IPlugin, Event, CancellationToken, Task> handler)
42 {
43 if (!Topics.ContainsKey(name))
44 {
45 Topics[name] = [];
46 }
47
48 Topics[name].Add(async (plugin, @event, cancellationToken) =>
49 {
50 await handler(plugin, @event, cancellationToken);
51 return null;
52 });
53
54 return this;
55 }
56
57 public EventEmitter On<TResult>(string name, Func<IPlugin, Event, CancellationToken, Task<TResult>> handler)
58 {
59 if (!Topics.ContainsKey(name))
60 {
61 Topics[name] = [];
62 }
63
64 Topics[name].Add(async (plugin, @event, cancellationToken) =>
65 {
66 var res = await handler(plugin, @event, cancellationToken);
67 return res;
68 });
69
70 return this;
71 }
72
73 public async Task<object?> Emit(IPlugin plugin, string name, Event? @event = null, CancellationToken cancellationToken = default)
74 {
75 if (!Topics.ContainsKey(name))
76 {
77 Topics[name] = [];
78 }
79
80 return await Topics[name].Emit(plugin, @event, cancellationToken);
81 }
82}