public void Close() { if (listener != null) { try { listener.Shutdown(SocketShutdown.Both); } catch (Exception) { } finally { listener.Close(); listener = null; } } SocketList.Clear(); Packets.Clear(); ToPeer.Clear(); SocketToEndPoint.Clear(); SocketToKey.Clear(); GetMessage = null; RSAkey = new EncryptAndCompress.RSAKeyPair(); }
public void ConnectSuccessful(Func <object, INetServer, PeerBase> AddPeerFunc, Packet packet) { SocketToKey.Add(packet.peer, (string)packet.state); PeerBase peer = AddPeerFunc(packet.peer, this); SocketList.Add(peer); SocketToEndPoint.Add(((Socket)packet.peer), ((Socket)packet.peer).RemoteEndPoint); ToPeer.Add(((Socket)packet.peer).RemoteEndPoint, peer); using (Packet newpacket = new Packet(packet.peer)) { packet.BeginWrite(PacketType.CONNECT_SUCCESSFUL); packet.WriteSendData(new SendData(0, "On Connect"), (string)packet.state, EncryptAndCompress.LockType.AES); Send(packet, packet.peer); } }
public void Disconnect(object socket, int timeout) { if (socket != null) { if (SocketToEndPoint.ContainsKey((Socket)socket)) { if (ToPeer.ContainsKey(SocketToEndPoint[(Socket)socket])) { if (SocketList.Contains(ToPeer[SocketToEndPoint[(Socket)socket]])) { SocketList.Remove(ToPeer[SocketToEndPoint[(Socket)socket]]); } } if (SocketToKey.ContainsKey(socket)) { SocketToKey.Remove(socket); } if (ToPeer.ContainsKey(SocketToEndPoint[(Socket)socket])) { ToPeer.Remove(SocketToEndPoint[(Socket)socket]); } } try { ((Socket)socket).Shutdown(SocketShutdown.Both); } catch (Exception e) { GetMessage(e.Message); } finally { if (timeout == -1) { ((Socket)socket).Close(); } else { ((Socket)socket).Close(timeout); } socket = null; } } }