/// <summary> /// Recieved the client disconnected packet. /// </summary> /// <param name="conPkt">The con PKT.</param> /// <returns>use as needed</returns> protected virtual bool ReceivedPacket_ClientDisconnected(KeyValuePair <ClientConnection, object> conPkt) { PacketDesc_ClientDisconnected packet = (PacketDesc_ClientDisconnected)conPkt.Value; Console.WriteLine("Recieved ClientDisconnected Packet! Client ID: " + conPkt.Key.ThisID + ", Data: disconnected client ID " + packet.OtherClientID); if (OnClientDisconnectedReceived != null) { OnClientDisconnectedReceived(conPkt); } return(true); }
/// <summary> /// Disconnects the specified unique identifier. /// </summary> /// <param name="uniqueID">The unique identifier.</param> public void Disconnect(int uniqueID = -1) { if (Clients.ContainsKey(uniqueID)) { ClientListMutex.WaitOne(); EConnectionType et = Clients[uniqueID].ConnectionType; PacketDesc_ClientDisconnected dcPkt = new PacketDesc_ClientDisconnected(); dcPkt.OtherClientID = uniqueID; dcPkt.PacketTarget = et; dcPkt.PacketOriginClientID = UniqueID; SendPacketToAllClients(dcPkt, uniqueID); ConsoleLogger.WriteToLog("Disconnected Client ID:" + uniqueID, true); if (Clients[uniqueID].ThisClient != null) { if (Clients[uniqueID].ThisClient.Connected) { Clients[uniqueID].ThisClient.GetStream().Close(); if (Clients[uniqueID].ThisClient != null) { Clients[uniqueID].ThisClient.Close(); } } Clients[uniqueID].ThisClient = null; Clients.Remove(uniqueID); NumClientThreads--; } ClientListMutex.ReleaseMutex(); if (OnClientDisconnected != null) { OnClientDisconnected(uniqueID); } } }