Пример #1
0
 //raw channel disconnected.
 void RawChannelDisconnected(object sender, System.EventArgs e)
 {
     lock (_disconnectLockObj)
     {
         if (_rawChannel != null)
         {
             _rawChannel.Buffer               = null;
             _rawChannel.ReceivedData        -= RawReceivedData;
             _rawChannel.Opened              -= Opened;
             _rawChannel.Opening             -= Opening;
             _rawChannel.Closed              -= Closed;
             _rawChannel.Closing             -= Closing;
             _rawChannel.Faulted             -= Faulted;
             _rawChannel.Disconnected        -= Disconnected;
             _rawChannel.Connected           -= Connected;
             _rawChannel.ReceivedDataSegment -= ReceivedDataSegment;
             _rawChannel = null;
         }
         if (_multiPacketManager != null)
         {
             _multiPacketManager.Dispose();
             _multiPacketManager = null;
         }
         if (_parser != null)
         {
             _parser.ParseSucceed -= SegmentParseSucceed;
             _parser.Dispose();
             _parser = null;
         }
     }
     DisconnectedHandler(null);
 }
Пример #2
0
 /// <summary>
 ///     消息传输信道
 /// </summary>
 /// <param name="rawChannel">数据流信道</param>
 /// <param name="protocolStack">协议栈</param>
 /// <param name="parser">解析器</param>
 /// <exception cref="ArgumentNullException">参数错误</exception>
 public MessageTransportChannel(IRawTransportChannel rawChannel, IProtocolStack protocolStack, ISegmentDataParser <T> parser)
 {
     if (rawChannel == null)
     {
         throw new ArgumentNullException("rawChannel");
     }
     if (protocolStack == null)
     {
         throw new ArgumentNullException("protocolStack");
     }
     if (rawChannel.SupportSegment && parser == null)
     {
         throw new ArgumentNullException("parser");
     }
     _rawChannel  = rawChannel;
     _channelType = _rawChannel.ChannelType;
     //initialize segment data parser, if current channel support segment data recv.
     if (_rawChannel.SupportSegment)
     {
         _parser = parser;
         _parser.ParseSucceed            += SegmentParseSucceed;
         _rawChannel.ReceivedDataSegment += ReceivedDataSegment;
     }
     else
     {
         _rawChannel.ReceivedData += RawReceivedData;
         if (_rawChannel.Buffer == null)
         {
             _rawChannel.Buffer = new ReceiveBuffer(ChannelConst.RecvBufferSize);
         }
     }
     _protocolStack            = protocolStack;
     _rawChannel.Opened       += Opened;
     _rawChannel.Opening      += Opening;
     _rawChannel.Closed       += Closed;
     _rawChannel.Closing      += Closing;
     _rawChannel.Faulted      += Faulted;
     _rawChannel.Disconnected += RawChannelDisconnected;
     _rawChannel.Connected    += Connected;
     _key       = _rawChannel.Key;
     _localIep  = _rawChannel.LocalEndPoint;
     _remoteIep = _rawChannel.RemoteEndPoint;
     //open this channel at last.
     _rawChannel.Open();
 }