public void LocalNetworkConnection_OneMessage() { LocalNetworkConnection localNetworkConnectionA = new LocalNetworkConnection(1300); LocalNetworkConnection localNetworkConnectionB = localNetworkConnectionA.GetPairedNetworkConnection(); { OutgoingMessage outgoingMessage = localNetworkConnectionA.GetOutgoingMessageToSend(); Assert.AreEqual(1300, outgoingMessage.MessageData.Length); outgoingMessage.Write(true); outgoingMessage.Write(123); outgoingMessage.Write("yes"); Assert.AreEqual(9, outgoingMessage.Length); localNetworkConnectionA.SendMessage(outgoingMessage); } { IncomingMessage incomingMessage = localNetworkConnectionB.GetNextIncomingMessage(); Assert.IsNotNull(incomingMessage); Assert.AreEqual(1300, incomingMessage.MessageData.Length); Assert.AreEqual(9, incomingMessage.Length); Assert.AreEqual(0, incomingMessage.Position); Assert.AreEqual(true, incomingMessage.ReadBoolean()); Assert.AreEqual(1, incomingMessage.Position); Assert.AreEqual(8, incomingMessage.BytesLeft); Assert.AreEqual(123, incomingMessage.ReadInt32()); Assert.AreEqual(5, incomingMessage.Position); Assert.AreEqual(4, incomingMessage.BytesLeft); Assert.AreEqual("yes", incomingMessage.ReadString()); Assert.AreEqual(9, incomingMessage.Position); Assert.AreEqual(0, incomingMessage.BytesLeft); Assert.IsNull(localNetworkConnectionB.GetNextIncomingMessage()); } }
public async Task TestSimpleSendRecieve() { // Connect B to A: LocalNetworkConnection connectionOnA = null; factoryA.OnClientConnected += (sender, connectoin) => { connectionOnA = connectoin; }; LocalNetworkConnection connectionOnB = await factoryB.ConnectToAsync(0); await Task.Delay(100); // Send message from B to A: INetworkMessage recievedOnA = null; connectionOnA.OnRecieve += (sender, message) => { recievedOnA = message; }; INetworkMessage sendFromB = new DirectNetworkMessage( DhtUtils.GeneratePlayerId(), DhtUtils.GeneratePlayerId(), DhtUtils.GeneratePlayerId(), new byte[] { 42 }); connectionOnB.Send(sendFromB); await Task.Delay(100); // Assert: Assert.IsNotNull(recievedOnA); Assert.AreEqual(42, ((DirectNetworkMessage)recievedOnA).Data[0]); }
public void LocalNetworkConnection_ManyMessages_Queued() { LocalNetworkConnection localNetworkConnectionA = new LocalNetworkConnection(1300); LocalNetworkConnection localNetworkConnectionB = localNetworkConnectionA.GetPairedNetworkConnection(); for (int i = 0; i < 20; i++) { OutgoingMessage outgoingMessage = localNetworkConnectionA.GetOutgoingMessageToSend(); outgoingMessage.Write(((i % 2) == 0)); outgoingMessage.Write(i); outgoingMessage.Write(i / 2.0f); outgoingMessage.Write(i.ToString()); localNetworkConnectionA.SendMessage(outgoingMessage); } for (int i = 0; i < 20; i++) { IncomingMessage incomingMessage = localNetworkConnectionB.GetNextIncomingMessage(); Assert.IsNotNull(incomingMessage); Assert.AreEqual(0, incomingMessage.Position); Assert.AreEqual(((i % 2) == 0), incomingMessage.ReadBoolean()); Assert.AreEqual(i, incomingMessage.ReadInt32()); Assert.AreEqual(i / 2.0f, incomingMessage.ReadSingle()); Assert.AreEqual(i.ToString(), incomingMessage.ReadString()); } Assert.IsNull(localNetworkConnectionB.GetNextIncomingMessage()); }
public Server_Advertisement_Message() { IPAddress localIP = LocalNetworkConnection.GetLocalIp(); string ip = localIP.ToString(); _header = SERVER_ADV; _payload = ip + "\r\n"; }
public async Task TestConnect() { // Connect B to A: LocalNetworkConnection connectionOnA = null; factoryA.OnClientConnected += (sender, connection) => { connectionOnA = connection; }; await factoryB.ConnectToAsync(0); await Task.Delay(100); // Assert: Assert.IsNotNull(connectionOnA); Assert.AreEqual(1, connectionOnA.Address); }
public void LocalNetworkConnection_TwoMessages() { LocalNetworkConnection localNetworkConnectionA = new LocalNetworkConnection(1300); LocalNetworkConnection localNetworkConnectionB = localNetworkConnectionA.GetPairedNetworkConnection(); { OutgoingMessage outgoingMessage = localNetworkConnectionA.GetOutgoingMessageToSend(); Assert.AreEqual(1300, outgoingMessage.MessageData.Length); outgoingMessage.Write(true); outgoingMessage.Write(100.1f); outgoingMessage.Write("yes"); localNetworkConnectionA.SendMessage(outgoingMessage); } { OutgoingMessage outgoingMessage = localNetworkConnectionA.GetOutgoingMessageToSend(); Assert.AreEqual(1300, outgoingMessage.MessageData.Length); outgoingMessage.Write(false); outgoingMessage.Write(200.2f); outgoingMessage.Write("no"); outgoingMessage.Write(123); localNetworkConnectionA.SendMessage(outgoingMessage); } { IncomingMessage incomingMessage = localNetworkConnectionB.GetNextIncomingMessage(); Assert.IsNotNull(incomingMessage); Assert.AreEqual(1300, incomingMessage.MessageData.Length); Assert.AreEqual(true, incomingMessage.ReadBoolean()); Assert.AreEqual(100.1f, incomingMessage.ReadSingle()); Assert.AreEqual("yes", incomingMessage.ReadString()); } { IncomingMessage incomingMessage = localNetworkConnectionB.GetNextIncomingMessage(); Assert.IsNotNull(incomingMessage); Assert.AreEqual(1300, incomingMessage.MessageData.Length); Assert.AreEqual(false, incomingMessage.ReadBoolean()); Assert.AreEqual(200.2f, incomingMessage.ReadSingle()); Assert.AreEqual("no", incomingMessage.ReadString()); Assert.AreEqual(123, incomingMessage.ReadInt32()); Assert.IsNull(localNetworkConnectionB.GetNextIncomingMessage()); } }
public async Task TestConnectionDropped() { // Connect B to A: LocalNetworkConnection connectionOnA = null; factoryA.OnClientConnected += (sender, connectoin) => { connectionOnA = connectoin; }; LocalNetworkConnection connectionOnB = await factoryB.ConnectToAsync(0); await Task.Delay(100); bool called = false; connectionOnA.OnConnectionDropped = (sender, args) => { called = true; }; // Kill B: connectionOnB.Dispose(); await Task.Delay(100); // Assert: Assert.IsTrue(called); }
public static void Broadcast(Server_Message message, CancellationToken token) { IPEndPoint rEndPoint = new IPEndPoint(LocalNetworkConnection.GetBroadcastAddress(), ESP_PORT); IPEndPoint lEndPoint = new IPEndPoint(LocalNetworkConnection.GetLocalIp(), ESP_PORT); try { while (token.IsCancellationRequested is false) { client = new UdpClient(lEndPoint); client.EnableBroadcast = true; client.Connect(rEndPoint); Send(message.ToBytes()); client.Close(); Thread.Sleep(6000); } } catch { MessageBox err = new MessageBox("Error creating the socket;\n" + ESP_PORT + " port is already in use.", "Socket exception", icon: System.Windows.MessageBoxImage.Error); err.Show(); return; } }