Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        private void OnConnected(object sender, SocketAsyncEventArgs e)
        {
            TCPSession session = e.UserToken as TCPSession;

            if (e.ConnectSocket != null && e.ConnectSocket.Connected)
            {
                session.Token.DoRecive();
                session.Token.TrySend();
            }
            else
            {
                session.DisConnect();
            }
            OnConnectResult(session, e.SocketError);
        }
Beispiel #3
0
 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);
     }
 }