コード例 #1
0
        /// <summary>
        /// Terminates all connetions made by this client
        /// </summary>
        public void Terminate()
        {
            IsDisconnecting = true;
            bool wasConnectedToGameServer = false;
            bool wasConnectedToAnyServer  = false;

            // If we're connected to a game then we will want to let the server know we're disconnecting
            // so our character is disconnected from the server itself. Otherwise we will just 'drop due to timeout'
            // and probably fill the server's error logs up with garbage.
            if (gameServerThread != null && gameServerThread.IsAlive && gameServer != null)
            {
                if (gameServer.IsInGame)
                {
                    gameServer.LeaveGame();

                    // Give the client some time to send the leave game packet to the server before
                    // disconnecting. After server get the message it should close our connection so
                    // it shouldn't take a full 2500ms
                    gameServerThread.Join(2500);
                }

                gameServer.Disconnect();

                if (!gameServerThread.Join(2500))
                {
                    Log("!! Failed to join client thread after 2500ms, killing it!");
                    gameServerThread.Abort();
                }

                wasConnectedToGameServer = true;
                wasConnectedToAnyServer  = true;
            }
            if (realmServerThread != null && realmServerThread.IsAlive && realmServer != null)
            {
                realmServer.Disconnect();
                if (!realmServerThread.Join(1000))
                {
                    realmServerThread.Abort();
                }

                wasConnectedToAnyServer = true;
            }
            if (chatServerThread != null && chatServerThread.IsAlive && chatServer != null)
            {
                chatServer.Disconnect();
                if (!chatServerThread.Join(1000))
                {
                    chatServerThread.Abort();
                }

                wasConnectedToAnyServer = true;
            }

            if (wasConnectedToAnyServer && !wasConnectedToGameServer)
            {
                FireOnClientDisconnectEvent();
            }
        }
コード例 #2
0
 private void DisconnectClient()
 {
     isDisconnecting = true;
     tcpClient.Close();
     ChatServer.Disconnect(this);
     Debug.Log("Client disconnected");
 }
コード例 #3
0
        public void Should_Disconnect_From_Chat_Server()
        {
            //arrange
            var user   = new User(string.Empty);
            var server = new ChatServer();

            server.Users.Add(user);
            server.Connect(user);

            //act
            server.Disconnect(user);

            //assert
            user.IsConnected.ShouldBeEquivalentTo(false);
        }
コード例 #4
0
        public void Should_Throw_Check_If_User_Is_Connected_After_Disconnect_Connect()
        {
            //arrange
            var server = new ChatServer();
            var user   = new User(String.Empty);

            server.Users.Add(user);

            //act
            server.Connect(user);
            server.Disconnect(user);
            server.Connect(user);
            var result = server.IsConnected(user);

            //assert
            result.ShouldBeEquivalentTo(true);
        }