Ejemplo n.º 1
0
        private void SendEndOfStreamAck(TransportMessage transportMessage)
        {
            _logger.InfoFormat("Sending EndOfStreamAck to {0}", transportMessage.Originator.SenderEndPoint);

            var endOfStreamAck = new TransportMessage(MessageTypeId.EndOfStreamAck, new MemoryStream(), PeerId, InboundEndPoint);
            var closingPeer    = new Peer(transportMessage.Originator.SenderId, transportMessage.Originator.SenderEndPoint);

            SafeAdd(_outboundSocketActions, OutboundSocketAction.Send(endOfStreamAck, new[] { closingPeer }, new SendContext()));
            SafeAdd(_pendingDisconnects, new PendingDisconnect(closingPeer.Id, SystemDateTime.UtcNow.Add(_configuration.WaitForEndOfStreamAckTimeout)));
        }
Ejemplo n.º 2
0
 private void RunOutboundSocketAction(OutboundSocketAction socketAction, MemoryStream outputBuffer)
 {
     if (socketAction.IsDisconnect)
     {
         DisconnectPeers(socketAction.PeerIds);
     }
     else
     {
         SerializeAndSendTransportMessage(outputBuffer, socketAction.Message, socketAction.Peers);
     }
 }
Ejemplo n.º 3
0
 private void RunOutboundSocketAction(OutboundSocketAction socketAction, MemoryStream outputBuffer)
 {
     if (socketAction.IsDisconnect)
     {
         DisconnectPeers(socketAction.PeerIds);
     }
     else
     {
         SerializeAndSendTransportMessage(outputBuffer, socketAction.Message, socketAction.GetPersistentPeer().ToList(), true);
         SerializeAndSendTransportMessage(outputBuffer, socketAction.Message, socketAction.GetTransientPeers().ToList(), false);
     }
 }
Ejemplo n.º 4
0
        private void Disconnect(PeerId peerId, bool delayed = true)
        {
            if (_outboundSockets.ContainsKey(peerId))
            {
                _logger.InfoFormat("Queueing disconnect, PeerId: {0}, Delayed: {1}", peerId, delayed);
            }

            if (delayed)
            {
                SafeAdd(_pendingDisconnects, new PendingDisconnect(peerId, SystemDateTime.UtcNow.Add(_configuration.WaitForEndOfStreamAckTimeout)));
            }
            else
            {
                SafeAdd(_outboundSocketActions, OutboundSocketAction.Disconnect(peerId));
            }
        }
Ejemplo n.º 5
0
        private void DisconnectProc()
        {
            Thread.CurrentThread.Name = "ZmqTransport.DisconnectProc";

            foreach (var pendingDisconnect in _pendingDisconnects.GetConsumingEnumerable())
            {
                while (pendingDisconnect.DisconnectTimeUtc > SystemDateTime.UtcNow)
                {
                    if (_pendingDisconnects.IsAddingCompleted)
                    {
                        return;
                    }

                    Thread.Sleep(500);
                }

                SafeAdd(_outboundSocketActions, OutboundSocketAction.Disconnect(pendingDisconnect.PeerId));
            }
        }
Ejemplo n.º 6
0
 public void Send(TransportMessage message, IEnumerable <Peer> peers, SendContext context)
 {
     _outboundSocketActions.Add(OutboundSocketAction.Send(message, peers, context));
 }
Ejemplo n.º 7
0
        public void Send(TransportMessage message, IEnumerable <Peer> peerIds)
        {
            message.Environment = _environment;

            _outboundSocketActions.Add(OutboundSocketAction.Send(message, peerIds.ToList()));
        }