Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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());
            }
        }