예제 #1
0
 public BaseTeleportProcessor(TeleportUdpTransport transport)
 {
     _socketStarted             = false;
     _transport                 = transport;
     _incomingMessageProcessors = new Dictionary <byte, Action <EndPoint, TeleportReader> >();
     _unityHelper               = null;
 }
예제 #2
0
        private IEnumerator Start()
        {
            float testDuration    = 30;
            var   port            = 6000;
            var   serverTransport = new TeleportUdpTransport(() => new TeleportPacketBuffer(), () => new SequencedTeleportChannel(new SimpleTeleportChannel()));
            var   clientTransport = new TeleportUdpTransport(() => new TeleportPacketBuffer(), () => new SequencedTeleportChannel(new SimpleTeleportChannel()));
            var   server          = new TeleportServerProcessor(serverTransport);
            var   client          = new TeleportClientProcessor(clientTransport);

            server.RegisterMessage <TestMessage>();
            client.RegisterMessage <TestMessage>();
            server.RegisterMessage <TimedMessageTest>();
            client.RegisterMessage <TimedMessageTest>();
            Debug.Log("Test will start in 3 seconds");
            yield return(new WaitForSeconds(3));

            server.Listen(port);
            client.Connect("localhost", port);
            Debug.Log("Waiting for client to authenticate...");
            while (client.State != TeleportClientProcessor.StateType.Connected)
            {
                yield return(null);
            }
            Debug.Log("Client authenticated with server!");
            Debug.Log("Starting transfer, please wait for results (" + testDuration + " seconds)");
            while (testDuration > 0)
            {
                for (int i = 0; i < 5; i++)
                {
                    server.SendToAll(new TimedMessageTest());
                    server.SendToAll(new TestMessage());
                }

                for (int i = 0; i < 5; i++)
                {
                    client.SendToServer(new TestMessage());
                }
                testDuration -= Time.deltaTime;
                yield return(null);
            }
            Debug.Log("Stopping client and server...");
            yield return(new WaitForSeconds(5));

            server.StopListening();
            client.Disconnect();
            Debug.Log("Test complete! Checking results..");

            if (TestStats.ClientMissingSeqs.Count > 0)
            {
                Debug.LogError("Client missing " + TestStats.ClientMissingSeqs.Count + " messages");
            }
            else if (TestStats.ClientMissingTimedSeqs.Count > 0)
            {
                Debug.LogError("Client missing " + TestStats.ClientMissingTimedSeqs.Count + " timed messages");
            }
            else if (TestStats.ServerMissingSeqs.Count > 0)
            {
                Debug.LogError("Client missing " + TestStats.ServerMissingSeqs.Count + " timed messages");
            }
            else
            {
                Debug.Log("All passed! Client msgs: " + TestStats.ClientSeq + " Client timed msgs: " + TestStats.ClientTimedSeq + " Server msgs: " + TestStats.ServerSeq);
            }
        }
예제 #3
0
 public TeleportServerProcessor(TeleportUdpTransport transport) : base(transport)
 {
     _nextClientId         = 0;
     _clientDataByEndpoint = new Dictionary <EndPoint, TeleportClientData>();
     _clientDataById       = new Dictionary <uint, TeleportClientData>();
 }
예제 #4
0
 public TeleportClientProcessor(TeleportUdpTransport transport, float timedMessagePlaybackDelay = 0.08f) : base(transport)
 {
     State = StateType.Disconnected;
     _timedMessageQueue         = new TimedMessageQueue();
     _timedMessagePlaybackDelay = timedMessagePlaybackDelay;
 }
예제 #5
0
        private IEnumerator Start()
        {
            var   port         = 5006;
            float testDuration = 30;

            _clientDataSeq     = 0;
            _serverDataSeq     = 0;
            _clientMissingSeqs = new List <int>();
            _serverMissingSeqs = new List <int>();
            Debug.Log("Starting test in 3 seconds...");
            yield return(new WaitForSeconds(3));

            var server = new TeleportUdpTransport(() => new TeleportPacketBuffer(), () => new SequencedTeleportChannel(new SimpleTeleportChannel()));
            var client = new TeleportUdpTransport(() => new TeleportPacketBuffer(), () => new SequencedTeleportChannel(new SimpleTeleportChannel()));

            server.StartListener(port);
            client.StartClient("127.0.0.1", port);
            Debug.Log("Waiting for client and server to start...");
            while (!client.ThreadStarted || !server.ThreadStarted)
            {
                yield return(null);
            }
            yield return(new WaitForSeconds(3));

            client.Send(new byte[] { 0, 0, 0, 0 }); // Say hello so server will recognize us
            bool didServerGetHello = false;

            while (!didServerGetHello)
            {
                server.ProcessIncoming((e, r) => { didServerGetHello = true; });
                yield return(null);
            }
            Debug.Log("Server got hello from client");
            yield return(new WaitForSeconds(1));

            while (testDuration > 0)
            {
                for (int i = 0; i < 20; i++)
                {
                    client.Send(SerializeClient);
                }
                for (int i = 0; i < 20; i++)
                {
                    server.Send(SerializeServer);
                }
                server.ProcessIncoming(DeserializeServer);
                client.ProcessIncoming(DeserializeClient);
                testDuration -= Time.deltaTime;
                yield return(null);
            }
            yield return(new WaitForSeconds(10));

            server.StopListener();
            client.StopClient();

            for (int i = 0; i < _serverMissingSeqs.Count; i++)
            {
                Debug.LogError("Missing sequence never got to server: " + i);
            }

            for (int i = 0; i < _clientMissingSeqs.Count; i++)
            {
                Debug.LogError("Missing sequence never got to client: " + i);
            }

            if (_clientMissingSeqs.Count == 0 && _serverMissingSeqs.Count == 0)
            {
                Debug.Log("All passed!");
            }
        }