WingMan – Diff between revs 35 and 36

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