WingMan – Blame information for rev 5

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