/// <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); } }
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); } }