WingMan – Blame information for rev 32

Subversion Repositories:
Rev:
Rev Author Line No. Line
5 office 1 using System;
2 using System.IO;
7 office 3 using System.Threading;
5 office 4 using System.Threading.Tasks;
5 using MQTTnet;
6 using WingMan.Communication;
7  
7 office 8 namespace WingMan.Lobby
5 office 9 {
10 public class LobbyMessageSynchronizer : IDisposable
11 {
12 public delegate void LobbyMessageReceived(object sender, LobbyMessageReceivedEventArgs e);
13  
9 office 14 public LobbyMessageSynchronizer(MqttCommunication mqttCommunication, TaskScheduler taskScheduler,
7 office 15 CancellationToken cancellationToken)
5 office 16 {
9 office 17 MqttCommunication = mqttCommunication;
7 office 18 CancellationToken = cancellationToken;
19 TaskScheduler = taskScheduler;
5 office 20  
9 office 21 mqttCommunication.OnMessageReceived += MqttCommunicationOnOnMessageReceived;
5 office 22 }
23  
9 office 24 private MqttCommunication MqttCommunication { get; }
7 office 25  
26 private CancellationToken CancellationToken { get; }
27 private TaskScheduler TaskScheduler { get; }
28  
29 public void Dispose()
5 office 30 {
9 office 31 MqttCommunication.OnMessageReceived -= MqttCommunicationOnOnMessageReceived;
7 office 32 }
33  
34 public event LobbyMessageReceived OnLobbyMessageReceived;
35  
36 private async void MqttCommunicationOnOnMessageReceived(object sender,
37 MqttApplicationMessageReceivedEventArgs e)
38 {
39 if (e.ApplicationMessage.Topic != "lobby")
5 office 40 return;
41  
42 using (var memoryStream = new MemoryStream(e.ApplicationMessage.Payload))
43 {
7 office 44 var lobbyMessage = (LobbyMessage) LobbyMessage.XmlSerializer.Deserialize(memoryStream);
5 office 45  
7 office 46 await Task.Delay(0)
47 .ContinueWith(
48 _ => OnLobbyMessageReceived?.Invoke(sender,
49 new LobbyMessageReceivedEventArgs(lobbyMessage.Nick, lobbyMessage.Message)),
50 CancellationToken, TaskContinuationOptions.None, TaskScheduler);
5 office 51 }
52 }
53  
54 public async Task Broadcast(string message)
55 {
56 using (var memoryStream = new MemoryStream())
57 {
58 LobbyMessage.XmlSerializer.Serialize(memoryStream, new LobbyMessage
59 {
9 office 60 Nick = MqttCommunication.Nick,
5 office 61 Message = message
62 });
63  
64 memoryStream.Position = 0L;
65  
10 office 66 await MqttCommunication.Broadcast("lobby", memoryStream.ToArray());
5 office 67 }
68 }
69 }
32 office 70 }