/// 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); } }
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(); } }
// 아무 패킷이나 받으면 호출 되는 콜벡 함수 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()); } }