Ejemplo n.º 1
0
        private void LockedConnected()
        {
            ChannelConnected?.Invoke(this);

            CreateTransmitter();
            CreateReceiver();

            InternalEnqueue(new Letter.Letter {
                Type = LetterType.Initialize, Options = LetterOptions.Ack, Parts = new[] { _options.NodeId.ToByteArray() }
            });

            _connectedAt             = DateTime.UtcNow;
            IsConnected              = true;
            _shutdownRequested       = false;
            _remoteShutdownRequested = false;
        }
Ejemplo n.º 2
0
        public BatchChannel(SocketOptions options, IChannel channel, BatchLetterBuilder batchBuilder)
        {
            _channel      = channel;
            _options      = options.Batch;
            _batchBuilder = batchBuilder;

            _channel.ChannelConnected     += abstractChannel => ChannelConnected?.Invoke(this);
            _channel.ChannelDisconnected  += ChannelOnDisconnected;
            _channel.ChannelQueueEmpty    += abstractChannel => {
                /* NOOP */
            };
            _channel.ChannelInitialized   += ChannelOnInitialized;
            _channel.ChannelConnecting    += abstractChannel => ChannelConnecting?.Invoke(this);
            _channel.ChannelDisconnecting += (abstractChannel, reason) => ChannelDisconnecting?.Invoke(this, reason);

            _channel.Received     += ChannelOnReceived;
            _channel.Sent         += ChannelOnSent;
            _channel.FailedToSend += ChannelOnFailedToSend;

            _slidingTimeoutTimer = new Timer(SlidingTimeoutTimerOnElapsed, null, -1, -1);
        }
Ejemplo n.º 3
0
 private void RaiseChannelConnectedEvent()
 {
     if (_isChannelConnectedFirstTime)
     {
         if (ChannelConnected != null)
         {
             object channel = _proxyChannel.Channel;
             foreach (EventHandler <ChannelConnectedEventArgs> function in ChannelConnected.GetInvocationList())
             {
                 try
                 {
                     function.BeginInvoke(this, new ChannelConnectedEventArgs(_contract, channel), OnNotifyChannelConnectedEventCompleted, function);
                 }
                 catch (Exception ex)
                 {
                     ExceptionHandler.Handle(ex);
                 }
             }
         }
         _isChannelConnectedFirstTime = false;
     }
 }
Ejemplo n.º 4
0
        protected void OnNewChannelConnected(Stream stream, string channelName, CancellationToken token)
        {
            var channel = new QpServerChannel(this, stream, channelName, token, options.Clone());

            //将通道加入到全部通道列表里面
            lock (channelList)
            {
                channelList.Add(channel);
                Channels = channelList.ToArray();
            }

            //认证通过后,才将通道添加到已认证通道列表里面
            channel.Auchenticated += (sender, e) =>
            {
                lock (auchenticatedChannelList)
                {
                    auchenticatedChannelList.Add(channel);
                    AuchenticatedChannels = auchenticatedChannelList.ToArray();
                }
            };
            channel.Disconnected += (sender, e) =>
            {
                if (LogUtils.LogConnection)
                {
                    LogUtils.Log("[Connection]{0} Disconnected.", channelName);
                }
                RemoveChannel(channel);
                try { stream.Dispose(); }
                catch { }
                ChannelDisconnected?.Invoke(this, channel);
            };
            Task.Run(() =>
            {
                ChannelConnected?.Invoke(this, channel);
            });
        }
Ejemplo n.º 5
0
 private void Worker()
 {
     m_Listener = new TcpListener(m_LocalAddress, m_Port);
     m_Listener.Start();
     try
     {
         while (!m_Disposed)
         {
             var socket        = m_Listener.AcceptSocket();
             var channelStream = new ChannelStream(new NetworkStream(socket));
             m_ActiveConnections.Add(channelStream);
             channelStream.Disconnected += () => m_ActiveConnections.Remove(channelStream);
             ChannelConnected.Invoke(new ChannelConnectedEventArgs(
                                         Guid.NewGuid().ToString(),
                                         channelStream));
         }
     }
     catch (ObjectDisposedException)
     {
     }
     catch (SocketException)
     {
     }
 }
Ejemplo n.º 6
0
 private void channel_Connected(object sender, IChannel device)
 {
     ChannelConnected?.Invoke(this, device);
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Triggers a <see cref="ChannelConnected"/> event.
 /// </summary>
 /// <param name="e">Event arguments.</param>
 protected virtual void OnChannelConnected(ChannelConnectedEventArgs e)
 {
     ChannelConnected?.Invoke(this, e);
 }