public void Connect(string ip, int port, TCPSession session) { IPAddress serverIP; if (!IPAddress.TryParse(ip, out serverIP)) { serverIP = Dns.GetHostEntry(ip).AddressList[0]; } IPEndPoint endPoint = new IPEndPoint(serverIP, port); SocketAsyncEventArgs connectEvent; connectEvent = new SocketAsyncEventArgs(); connectEvent.Completed += new EventHandler <SocketAsyncEventArgs>(OnConnected); connectEvent.RemoteEndPoint = endPoint; Socket socket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); var token = _TokenPool.Pop(); token.SetSocket(socket); session.SetToken(token); lock (Tokens) { Tokens.Add(token); } connectEvent.UserToken = session; if (!socket.ConnectAsync(connectEvent)) { OnConnected(socket, connectEvent); } }
public void CloseToken(TCPSocketToken token) { lock (CloseLockObj) { if (OnCloseToken != null) { OnCloseToken(this, token); } TCPSession session = token.Session; if (session != null) { session.SetToken(null); session.OnDisconnect(); } _TokenPool.Push(token); } }