Пример #1
0
        public void SendToAllTest()
        {
            // listen
            NetworkServer.Listen(1);
            Assert.That(NetworkServer.connections.Count, Is.EqualTo(0));

            // add connection
            LocalConnectionToClient connection = new LocalConnectionToClient();

            connection.connectionToServer = new LocalConnectionToServer();
            // set a client handler
            int called = 0;

            connection.connectionToServer.SetHandlers(new Dictionary <ushort, NetworkMessageDelegate>()
            {
                { MessagePacking.GetId <TestMessage1>(), ((conn, reader, channelId) => ++ called) }
            });
            NetworkServer.AddConnection(connection);

            // create a message
            TestMessage1 message = new TestMessage1 {
                IntValue = 1, DoubleValue = 2, StringValue = "3"
            };

            // send it to all
            NetworkServer.SendToAll(message);

            // update local connection once so that the incoming queue is processed
            connection.connectionToServer.Update();

            // was it send to and handled by the connection?
            Assert.That(called, Is.EqualTo(1));
        }
Пример #2
0
        public void SendToClientOfPlayer()
        {
            // message handlers
            NetworkServer.RegisterHandler <ConnectMessage>((conn, msg) => { }, false);
            NetworkServer.RegisterHandler <DisconnectMessage>((conn, msg) => { }, false);
            NetworkServer.RegisterHandler <ErrorMessage>((conn, msg) => { }, false);

            // listen
            NetworkServer.Listen(1);
            Assert.That(NetworkServer.connections.Count, Is.EqualTo(0));

            // add connection
            ULocalConnectionToClient connection = new ULocalConnectionToClient();

            connection.connectionToServer = new ULocalConnectionToServer();
            // set a client handler
            int called = 0;

            connection.connectionToServer.SetHandlers(new Dictionary <int, NetworkMessageDelegate>()
            {
                { MessagePacker.GetId <TestMessage1>(), ((conn, reader, channelId) => ++ called) }
            });
            NetworkServer.AddConnection(connection);

            // create a message
            TestMessage1 message = new TestMessage1 {
                IntValue = 1, DoubleValue = 2, StringValue = "3"
            };

            // create a gameobject and networkidentity
            NetworkIdentity identity = new GameObject().AddComponent <NetworkIdentity>();

            identity.connectionToClient = connection;

            // send it to that player
            NetworkServer.SendToClientOfPlayer(identity, message);

            // update local connection once so that the incoming queue is processed
            connection.connectionToServer.Update();

            // was it send to and handled by the connection?
            Assert.That(called, Is.EqualTo(1));

            // clean up
            NetworkServer.Shutdown();
            // destroy GO after shutdown, otherwise isServer is true in OnDestroy and it tries to call
            // GameObject.Destroy (but we need DestroyImmediate in Editor)
            GameObject.DestroyImmediate(identity.gameObject);
        }
Пример #3
0
        public void OnDataReceivedTest()
        {
            // message handlers
            NetworkServer.RegisterHandler <ConnectMessage>((conn, msg) => { }, false);
            NetworkServer.RegisterHandler <DisconnectMessage>((conn, msg) => { }, false);
            NetworkServer.RegisterHandler <ErrorMessage>((conn, msg) => { }, false);

            // add one custom message handler
            bool wasReceived = false;
            NetworkConnection connectionReceived = null;
            TestMessage1      messageReceived    = new TestMessage1();

            NetworkServer.RegisterHandler <TestMessage1>((conn, msg) =>
            {
                wasReceived        = true;
                connectionReceived = conn;
                messageReceived    = msg;
            }, false);

            // listen
            NetworkServer.Listen(1);
            Assert.That(NetworkServer.connections.Count, Is.EqualTo(0));

            // add a connection
            NetworkConnectionToClient connection = new NetworkConnectionToClient(42);

            NetworkServer.AddConnection(connection);
            Assert.That(NetworkServer.connections.Count, Is.EqualTo(1));

            // serialize a test message into an arraysegment
            TestMessage1 testMessage = new TestMessage1 {
                IntValue = 13, DoubleValue = 14, StringValue = "15"
            };
            NetworkWriter writer = new NetworkWriter();

            MessagePacker.Pack(testMessage, writer);
            ArraySegment <byte> segment = writer.ToArraySegment();

            // call transport.OnDataReceived
            // -> should call NetworkServer.OnDataReceived
            //    -> conn.TransportReceive
            //       -> Handler(CommandMessage)
            Transport.activeTransport.OnServerDataReceived.Invoke(42, segment, 0);

            // was our message handler called now?
            Assert.That(wasReceived, Is.True);
            Assert.That(connectionReceived, Is.EqualTo(connection));
            Assert.That(messageReceived, Is.EqualTo(testMessage));
        }
Пример #4
0
        public void SendToClientOfPlayer()
        {
            // listen
            NetworkServer.Listen(1);
            Assert.That(NetworkServer.connections.Count, Is.EqualTo(0));

            // setup connections
            LocalConnectionToClient connectionToClient = new LocalConnectionToClient();
            LocalConnectionToServer connectionToServer = new LocalConnectionToServer();

            connectionToClient.connectionToServer = new LocalConnectionToServer();

            // setup NetworkServer/Client connections so messages are handled
            NetworkClient.connection = connectionToServer;
            NetworkServer.connections[connectionToClient.connectionId] = connectionToClient;

            // set a client handler
            int called = 0;

            void Handler(TestMessage1 _) => ++ called;

            NetworkClient.RegisterHandler <TestMessage1>(Handler, false);
            NetworkServer.AddConnection(connectionToClient);

            // create a message
            TestMessage1 message = new TestMessage1 {
                IntValue = 1, DoubleValue = 2, StringValue = "3"
            };

            // create a gameobject and networkidentity
            CreateNetworked(out GameObject _, out NetworkIdentity identity);
            identity.connectionToClient = connectionToClient;

            // send it to that player
            identity.connectionToClient.Send(message);

            // update local connection once so that the incoming queue is processed
            connectionToClient.connectionToServer.Update();

            // was it send to and handled by the connection?
            Assert.That(called, Is.EqualTo(1));

            // clean up
            NetworkServer.Shutdown();
        }
Пример #5
0
        public void OnDataReceivedInvalidConnectionIdTest()
        {
            // message handlers
            NetworkServer.RegisterHandler <ConnectMessage>((conn, msg) => { }, false);
            NetworkServer.RegisterHandler <DisconnectMessage>((conn, msg) => { }, false);
            NetworkServer.RegisterHandler <ErrorMessage>((conn, msg) => { }, false);

            // add one custom message handler
            bool wasReceived = false;
            NetworkConnection connectionReceived = null;
            TestMessage1      messageReceived    = new TestMessage1();

            NetworkServer.RegisterHandler <TestMessage1>((conn, msg) =>
            {
                wasReceived        = true;
                connectionReceived = conn;
                messageReceived    = msg;
            }, false);

            // listen
            NetworkServer.Listen(1);
            Assert.That(NetworkServer.connections.Count, Is.EqualTo(0));

            // serialize a test message into an arraysegment
            TestMessage1 testMessage = new TestMessage1 {
                IntValue = 13, DoubleValue = 14, StringValue = "15"
            };
            NetworkWriter writer = new NetworkWriter();

            MessagePacker.Pack(testMessage, writer);
            ArraySegment <byte> segment = writer.ToArraySegment();

            // call transport.OnDataReceived with an invalid connectionId
            // an error log is expected.
            LogAssert.ignoreFailingMessages = true;
            Transport.activeTransport.OnServerDataReceived.Invoke(42, segment, 0);
            LogAssert.ignoreFailingMessages = false;

            // message handler should never be called
            Assert.That(wasReceived, Is.False);
            Assert.That(connectionReceived, Is.Null);
        }