public virtual void SendV1 <T>(IEnvelopeV1 <T> envelope) { if (!envelope.HasNextHop()) { if (this.Guid == envelope.HopsToDestination.First()) { this.ReceiveV1(envelope); } else { throw new InvalidOperationException("malformed envelope"); } } IDipNode nextHop; if (!m_peersByGuid.TryGetValue(envelope.GetNextHopGuid(), out nextHop)) { throw new InvalidOperationException("attempted to send envelope to non-connected peer"); } var nextEnvelope = envelope.GetEnvelopeForNextHop(); nextHop.Receive(nextEnvelope); }
protected void RouteEnvelope <T>(IEnvelopeV1 <T> envelope) { IDipNode nextHop; if (envelope.RecipientId.Guid == this.Identifier.Guid) { m_messageQueue.Add(envelope.Message); } else if (!envelope.HasNextHop() || !m_peersByGuid.TryGetValue(envelope.GetNextHopGuid(), out nextHop)) { RerouteEnvelope(envelope); } else { nextHop.Receive(envelope.GetEnvelopeForNextHop()); } }