/// <summary>
 ///     初始化消息接收器
 /// </summary>
 protected void InitializeReceiver()
 {
     if (_receiver != null)
     {
         return;
     }
     _receiver = new TcpAsynDataRecevier(_socket);
     _receiver.ReceivedData += RecvData;
     _receiver.Disconnected += ReceiverDisconnected;
     _receiver.Start();
 }
 void ReceiverDisconnected(object sender, RecevierDisconnectedEventArgs e)
 {
     try
     {
         if (_receiver != null)
         {
             _receiver.ReceivedData -= RecvData;
             _receiver.Disconnected -= ReceiverDisconnected;
             _receiver = null;
         }
     }
     catch (System.Exception ex) { _tracing.Error(ex, null); }
     finally
     {
         _connected          = false;
         _communicationState = CommunicationStates.Closed;
         DisconnectedHandler(null);
     }
 }
示例#3
0
        void Completed(object sender, SocketAsyncEventArgs e)
        {
            IFixedCacheStub <SocketBuffStub> stub;

            switch (e.LastOperation)
            {
            //send complated event.
            case SocketAsyncOperation.Send:
                #region Send Completed.

                stub = (IFixedCacheStub <SocketBuffStub>)e.UserToken;
                TcpTransportChannel channel = (TcpTransportChannel)stub.Tag;
                if (e.SocketError != SocketError.Success && channel.IsConnected)
                {
                    _tracing.Warn(
                        string.Format(
                            "The target channel SendAsync status has incorrectly, so the framework decided to disconnect it.\r\nL: {0}\r\nR: {1}\r\nSocket-Error: {2}\r\nBytesTransferred: {3}\r\n",
                            channel.LocalEndPoint,
                            channel.RemoteEndPoint,
                            e.SocketError,
                            e.BytesTransferred));
                    //giveback it at first.
                    ChannelConst.BuffAsyncStubPool.Giveback(stub);
                    channel.Disconnect();
                }

                #endregion
                break;

            //send complated event.
            case SocketAsyncOperation.Receive:
                #region Recv Completed.

                stub = (IFixedCacheStub <SocketBuffStub>)e.UserToken;
                TcpAsynDataRecevier recevier = (TcpAsynDataRecevier)stub.Tag;
                try { recevier.ProcessReceive(stub); }
                catch (System.Exception ex) { _tracing.Error(ex, null); }

                #endregion
                break;
            }
        }
 /// <summary>
 ///     断开
 /// </summary>
 public override void Disconnect()
 {
     try
     {
         _communicationState = CommunicationStates.Closing;
         if (_receiver != null)
         {
             _receiver.ReceivedData -= RecvData;
             _receiver.Disconnected -= ReceiverDisconnected;
             _receiver.Stop();
         }
     }
     catch (System.Exception ex)
     {
         _tracing.Error(ex, null);
     }
     finally
     {
         _receiver           = null;
         _connected          = false;
         _communicationState = CommunicationStates.Closed;
         DisconnectedHandler(null);
     }
 }