Exemplo n.º 1
0
        public void First_client_throws_exception_when_second_connected()
        {
            byte[] message = new byte[] { 1, 2, 3 };
            var server = new PercistentTCPServer(14000);
            server.ClientConnected += ClientConnected;
            var exceptionHandled = false;
            Exception exception = null;
            Exception secondClientException = null;
            var serverThread = new Thread(() => server.StartThread());
            var clientThread = new Thread(() =>
                {
                    try
                    {
                        var client = new TcpClient();
                        client.Connect("127.0.0.1", 14000);
                        Thread.Sleep(30); //ждем, пока другой клиент подсоединится.
                        client.Client.Send(message); //где-то тут сервер должен разорвать соединение.
                        client.Client.Receive(message);
                    }
                    catch (Exception e)
                    {
                        exceptionHandled = true;
                        exception = e;
                    }
                });
            clientThread.IsBackground = true;
            serverThread.IsBackground = true;
            serverThread.Start();
            Thread.Sleep(10);

            clientThread.Start();
            Thread.Sleep(10);

            if (exceptionHandled)
                throw exception; //на этот момент не должно быть эксепшна, первый должен к этому моменту успешно подключиться и ждать в слипе.

            clientThread = new Thread(() =>
                {
                    try
                    {
                        new TcpClient().Connect("127.0.0.1", 14000);
                    }
                    catch (Exception e)
                    {
                        secondClientException = e;
                    }
                });
            clientThread.IsBackground = true;
            clientThread.Start();

            Thread.Sleep(50);

            if (secondClientException != null)
                throw secondClientException; //второй не должен кидать эксепшн, а должен успешно подключиться.

            if (!exceptionHandled) // первый должен кинуть эксепшн после подключения второго
                Assert.Fail();
        }
Exemplo n.º 2
0
    //Этот метод нужно вызвать ровно один раз навсегда! для этого завести флаг.
    public static void Start()
    {
        Debugger.DisableByDefault = true;
        Debugger.EnabledTypes.Add(DebuggerMessageType.Unity);
        Debugger.EnabledTypes.Add(DebuggerMessageType.UnityTest);
        Debugger.EnabledTypes.Add(RMDebugMessage.WorldCreation);
        Debugger.EnabledTypes.Add(RMDebugMessage.Logic);
        Debugger.EnabledTypes.Add(RMDebugMessage.Workflow);
        Debugger.EnabledTypes.Add(DebuggerMessageType.Workflow);
        // Debugger.EnabledTypes.Add(DebuggerMessageType.Initialization);
        Debugger.Logger = s => Debug.Log(s);
        //создание и заполнение loader-а сюда
        loader = new Loader();
        loader.AddLevel("Demo", "Test", () => new DemoCompetitions.Level1());
        loader.AddLevel("RoboMovies", "Test", () => new RMCompetitions.Level1());

        RenewWaitingNetworkServer();
        //создает PercistentServer и подписываемся на его событие
        server = new PercistentTCPServer(14000);
        server.ClientConnected += ClientConnected;
        server.Printer = str => Debugger.Log(DebuggerMessageType.Unity,"FROM SERVER: " + str);
        //new Thread(server.StartThread) { IsBackground = true }.Start();
        RunThread(server.StartThread, "Server");
    }
Exemplo n.º 3
0
        public void Second_can_connect_when_first_correct_close()
        {
            byte[] message = new byte[] { 1, 2, 3 };
            var exceptionHandled = false;
            Exception exception = null;
            var server = new PercistentTCPServer(14000);
            server.ClientConnected += ClientConnected;

            var serverThread = new Thread(() => server.StartThread());
            serverThread.IsBackground = true;
            serverThread.Start();

            var clientThread = new Thread(() =>
            {
                try
                {
                    var client = new TcpClient();
                    client.Connect("127.0.0.1", 14000);
                    client.Client.Close();
                }
                catch (Exception e)
                {
                    exceptionHandled = true;
                    exception = e;
                }
            });
            clientThread.Start();
            clientThread.Join();

            if (exceptionHandled)
                throw exception;

            clientThread = new Thread(() =>
            {
                try
                {
                    var client = new TcpClient();
                    client.Connect("127.0.0.1", 14000);
                    //client.Client.Send(message); //с этими строчками работает по отдельности, но не работает когда жмешь Ран Олл
                    //client.Client.Receive(message);
                }
                catch (Exception e)
                {
                    exceptionHandled = true;
                    exception = e;
                }
            });
            clientThread.Start();
            clientThread.Join();

            if (exceptionHandled)
                throw exception;
        }