/// Disconnects a specific client.
        /// If the client wasn't connected already it will return false.
        /// </summary>
        /// <param name="clientIndex"></param>
        ///<param name="withDisconnectPacket"> True = Disconnect packet received from the client. \n False = protocol violation or error has occured</param>
        /// <returns>True if the client has been successfully disconnected , or was disconnected already</returns>
        public void DisconnectClient(uint clientIndex, bool withDisconnectPacket, bool isWebSocketClient)
        {
            MqttClient c = GetClientByIndex(clientIndex, isWebSocketClient);

            if (!c.IsWebSocketClient)
            {
                tcpServer.DisconnectClient(clientIndex, withDisconnectPacket);
            }
            else
            {
                wsServer.DisconnectClient(clientIndex, withDisconnectPacket);
            }
        }
Esempio n. 2
0
        private void Server_ClientConnected(object sender, TCPServer.ClientConnectionArgs e)
        {
            Log("Client connection { Host: " + e.Client.Ip.ToString() + " Port: " + e.Client.Port.ToString() + " }", Color.Orange);
            var tmout = e.Client.ClientSocket.ReceiveTimeout;

            e.Client.ClientSocket.ReceiveTimeout = 5000;
            var connectCode = "NULL";

            try { connectCode = e.Client.ReceiveString(); } catch { }
            e.Client.ClientSocket.ReceiveTimeout = tmout;
            if (connectCode != "RemoteBrowser#CODE#")
            {
                SendPackage(e.Client, "Code rejected");
                server.DisconnectClient(e.Client);
                Log($"Client Code rejected; {{ Host: {e.Client.Ip} Port: {e.Client.Port}}}");
            }
            else
            {
                Log($"Client Code accepted; {{ Host: {e.Client.Ip} Port: {e.Client.Port}}}");
                monitorThreads.Add(new Thread(new ParameterizedThreadStart(MonitorPackages))); monitorThreads.Last().Start(e.Client);
            }
        }
 public static void Shutdown(this TCPServer server, bool reuseSocket)
 {
     if (reuseSocket)
     {
         foreach (var client in server.ConnectedClients)
         {
             server.DisconnectClient(client, "Server shutdown.");
         }
     }
     else
     {
         server.Shutdown();
     }
 }
Esempio n. 4
0
    // 아무 패킷이나 받으면 호출 되는 콜벡 함수
    public void PacketReceived(IAsyncResult ar)
    {
        try
        {
            // 패킷 수신 함수 호출
            int received = mySocket.EndReceive(ar);

            // Debug.Log("EndReceive() called");

            // 연결 끊김
            if (received == 0)
            {
                myTCPServer.atomicQueue.Enqueue("[Disconnected] " + mySocket.RemoteEndPoint.ToString() + "\n");

                mySocket.Close();

                myTCPServer.DisconnectClient(this);

                return;
            }

            // 패킷 처리 함수 호출
            ProccessRecv();
        }
        catch (Exception ex)
        {
            Debug.Log("EndReceive() " + ex.ToString());
        }

        try
        {
            // 다시 비동기 수신 대기
            mySocket.BeginReceive(recvBuffer, 0, Define.recvBufferSize, 0, PacketReceived, this);
        }
        catch (Exception ex)
        {
            Debug.Log("BeginReceive() " + ex.ToString());
        }
    }