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))); }
private void RunOutboundSocketAction(OutboundSocketAction socketAction, MemoryStream outputBuffer) { if (socketAction.IsDisconnect) { DisconnectPeers(socketAction.PeerIds); } else { SerializeAndSendTransportMessage(outputBuffer, socketAction.Message, socketAction.Peers); } }
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); } }
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)); } }
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)); } }
public void Send(TransportMessage message, IEnumerable <Peer> peers, SendContext context) { _outboundSocketActions.Add(OutboundSocketAction.Send(message, peers, context)); }
public void Send(TransportMessage message, IEnumerable <Peer> peerIds) { message.Environment = _environment; _outboundSocketActions.Add(OutboundSocketAction.Send(message, peerIds.ToList())); }