コード例 #1
0
 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());
     }
 }
コード例 #2
0
        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]);
        }
コード例 #3
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());
        }
コード例 #4
0
        public Server_Advertisement_Message()
        {
            IPAddress localIP = LocalNetworkConnection.GetLocalIp();
            string    ip      = localIP.ToString();

            _header  = SERVER_ADV;
            _payload = ip + "\r\n";
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 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());
     }
 }
コード例 #7
0
        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);
        }
コード例 #8
0
        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;
            }
        }