WingMan
/trunk/WingMan/Lobby/LobbyMessage.cs |
@@ -0,0 +1,17 @@ |
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Text; |
using System.Threading.Tasks; |
using System.Xml.Serialization; |
|
namespace WingMan |
{ |
public class LobbyMessage |
{ |
public string Message { get; set; } |
public string Nick { get; set; } |
|
[XmlIgnore] public static XmlSerializer XmlSerializer = new XmlSerializer(typeof(LobbyMessage)); |
} |
} |
/trunk/WingMan/Lobby/LobbyMessageReceivedEventArgs.cs |
@@ -0,0 +1,21 @@ |
using System; |
using System.Collections.Generic; |
using System.Linq; |
using System.Text; |
using System.Threading.Tasks; |
|
namespace WingMan |
{ |
public class LobbyMessageReceivedEventArgs : EventArgs |
{ |
public string Nick { get; set; } |
|
public string Message { get; set; } |
|
public LobbyMessageReceivedEventArgs(string nick, string message) |
{ |
Nick = nick; |
Message = message; |
} |
} |
} |
/trunk/WingMan/Lobby/LobbyMessageSynchronizer.cs |
@@ -0,0 +1,59 @@ |
using System; |
using System.Collections.Generic; |
using System.IO; |
using System.Linq; |
using System.Text; |
using System.Threading.Tasks; |
using MQTTnet; |
using WingMan.Communication; |
|
namespace WingMan |
{ |
public class LobbyMessageSynchronizer : IDisposable |
{ |
public delegate void LobbyMessageReceived(object sender, LobbyMessageReceivedEventArgs e); |
|
public event LobbyMessageReceived OnLobbyMessageReceived; |
private MQTTCommunication MQTTCommunication { get; set; } |
public LobbyMessageSynchronizer(MQTTCommunication MQTTCommunication) |
{ |
this.MQTTCommunication = MQTTCommunication; |
|
MQTTCommunication.OnMessageReceived += MqttCommunicationOnOnMessageReceived; |
} |
|
private void MqttCommunicationOnOnMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e) |
{ |
if(e.ApplicationMessage.Topic != "lobby") |
return; |
|
using (var memoryStream = new MemoryStream(e.ApplicationMessage.Payload)) |
{ |
var lobbyMessage = (LobbyMessage)LobbyMessage.XmlSerializer.Deserialize(memoryStream); |
|
OnLobbyMessageReceived?.Invoke(sender, new LobbyMessageReceivedEventArgs(lobbyMessage.Nick, lobbyMessage.Message)); |
} |
} |
|
public async Task Broadcast(string message) |
{ |
using (var memoryStream = new MemoryStream()) |
{ |
LobbyMessage.XmlSerializer.Serialize(memoryStream, new LobbyMessage |
{ |
Nick = MQTTCommunication.Nick, |
Message = message |
}); |
|
memoryStream.Position = 0L; |
|
await MQTTCommunication.Broadcast("lobby", memoryStream.ToArray()).ConfigureAwait(false); |
} |
} |
|
public void Dispose() |
{ |
MQTTCommunication.OnMessageReceived -= MqttCommunicationOnOnMessageReceived; |
} |
} |
} |