Example #1
0
 public void DisConnect()
 {
     lock (this)
     {
         mConnected = false;
         try
         {
             OnDisconnected();
             Token = null;
             if (mSocket != null)
             {
                 TcpClient.CloseSocket(mSocket);
                 mSocket = null;
             }
             mReceiveEventArgs.Dispose();
             mReceiveEventArgs = null;
             mSendEventArgs.Dispose();
             mSendEventArgs = null;
             mProperties.Clear();
             if (mBaseNetworkStream != null)
             {
                 mBaseNetworkStream.Dispose();
                 mBaseNetworkStream = null;
             }
             if (mSslStream != null)
             {
                 mSslStream.Dispose();
                 mSslStream = null;
             }
             object item = DequeueSendMessage();
             while (item != null)
             {
                 if (item is IBuffer)
                 {
                     Buffers.Buffer.Free(((IBuffer)item));
                 }
                 else if (item is IBuffer[])
                 {
                     foreach (IBuffer b in (IBuffer[])item)
                     {
                         Buffers.Buffer.Free(b);
                     }
                 }
                 item = DequeueSendMessage();
             }
         }
         catch
         {
         }
     }
     if (awaitPipeStream.Pending)
     {
         awaitPipeStream.Error(new SocketException((int)SocketError.ConnectionAborted));
     }
     if (mReadMessageAwait.Pending)
     {
         mReadMessageAwait.Error(new SocketException((int)SocketError.ConnectionAborted));
     }
 }
Example #2
0
        private static void IO_Completed(object sender, SocketAsyncEventArgs e)
        {
            Buffers.SocketAsyncEventArgsX ex = (Buffers.SocketAsyncEventArgsX)e;
            AsyncTcpClient tcpclient         = (AsyncTcpClient)e.UserToken;

            if (ex.IsReceive)
            {
                ReceiveCompleted(e);
            }
            else
            {
                SendCompleted(e);
            }
        }
Example #3
0
 public bool Connect()
 {
     if (IsConnected)
     {
         return(true);
     }
     try
     {
         lock (this)
         {
             if (!IsConnected)
             {
                 mLastError = null;
                 if (mBaseNetworkStream != null)
                 {
                     mBaseNetworkStream.Dispose();
                     mBaseNetworkStream = null;
                 }
                 if (mSslStream != null)
                 {
                     mSslStream.Dispose();
                     mSslStream = null;
                 }
                 mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                 if (LocalEndPoint != null)
                 {
                     mSocket.Bind(LocalEndPoint);
                 }
                 mSocket.Connect(mIPAddress, mPort);
                 if (LocalEndPoint == null)
                 {
                     LocalEndPoint = mSocket.LocalEndPoint;
                 }
                 mSocket.ReceiveTimeout            = TimeOut;
                 mSocket.SendTimeout               = TimeOut;
                 mConnected                        = true;
                 mLastError                        = null;
                 mBaseNetworkStream                = new PipeStream(SendBufferPool, this.LittleEndian, this.Encoding);
                 mBaseNetworkStream.Socket         = mSocket;
                 mBaseNetworkStream.Encoding       = this.Encoding;
                 mBaseNetworkStream.LittleEndian   = this.LittleEndian;
                 mBaseNetworkStream.FlashCompleted = OnWriterFlash;
                 mSendStatus                       = 0;
                 mReceiveArgs                      = new ClientReceiveArgs();
                 if (mReceiveEventArgs != null)
                 {
                     mReceiveEventArgs.Dispose();
                 }
                 mReceiveEventArgs            = new SocketAsyncEventArgsX();
                 mReceiveEventArgs.Completed += IO_Completed;
                 if (mSendEventArgs != null)
                 {
                     mSendEventArgs.Dispose();
                 }
                 mSendEventArgs            = new SocketAsyncEventArgsX();
                 mSendEventArgs.Completed += IO_Completed;
                 if (this.Packet != null)
                 {
                     this.Packet           = this.Packet.Clone();
                     this.Packet.Completed = this.OnPacketCompleted;
                 }
                 if (SSL)
                 {
                     mBaseNetworkStream.SSL = true;
                     mSslStream             = new SslStreamX(ReceiveBufferPool, this.Encoding, this.LittleEndian, mBaseNetworkStream, new RemoteCertificateValidationCallback(ValidateServerCertificate));
                     var task = mSslStream.AuthenticateAsClientAsync(SslServiceName);
                     task.Wait();
                     mBaseNetworkStream.SSLConfirmed = true;
                     mSslStream.SyncData();
                 }
                 BeginReceive();
                 if (IsConnected)
                 {
                     OnConnected();
                 }
             }
         }
     }
     catch (Exception e_)
     {
         mConnected = false;
         ProcessError(e_, "client connect to server error!");
     }
     return(mConnected);
 }