Esempio n. 1
0
        /// <summary>
        /// TBD
        /// </summary>
        /// <param name="localAddress">TBD</param>
        /// <param name="recipient">TBD</param>
        /// <param name="serializedMessage">TBD</param>
        /// <param name="senderOption">TBD</param>
        /// <param name="seqOption">TBD</param>
        /// <param name="ackOption">TBD</param>
        /// <returns>TBD</returns>
        public override ByteString ConstructMessage(Address localAddress, IActorRef recipient, SerializedMessage serializedMessage,
                                                    IActorRef senderOption = null, SeqNo seqOption = null, Ack ackOption = null)
        {
            var ackAndEnvelope = new AckAndEnvelopeContainer();
            var envelope       = new RemoteEnvelope()
            {
                Recipient = SerializeActorRef(recipient.Path.Address, recipient)
            };

            if (senderOption != null && senderOption.Path != null)
            {
                envelope.Sender = SerializeActorRef(localAddress, senderOption);
            }
            if (seqOption != null)
            {
                envelope.Seq = (ulong)seqOption.RawValue;
            }
            else
            {
                envelope.Seq = SeqUndefined;
            }
            if (ackOption != null)
            {
                ackAndEnvelope.Ack = AckBuilder(ackOption);
            }
            envelope.Message        = serializedMessage;
            ackAndEnvelope.Envelope = envelope;

            return(ackAndEnvelope.ToByteString());
        }
Esempio n. 2
0
        public override AckAndMessage DecodeMessage(ByteString raw, RemoteActorRefProvider provider, Address localAddress)
        {
            var ackAndEnvelope = AckAndEnvelopeContainer.ParseFrom(raw);

            Ack ackOption = null;

            if (ackAndEnvelope.HasAck)
            {
                ackOption = new Ack(new SeqNo((long)ackAndEnvelope.Ack.CumulativeAck), ackAndEnvelope.Ack.NacksList.Select(x => new SeqNo((long)x)));
            }

            Message messageOption = null;

            if (ackAndEnvelope.HasEnvelope)
            {
                var envelopeContainer = ackAndEnvelope.Envelope;
                if (envelopeContainer != null)
                {
                    var      recipient         = provider.ResolveActorRefWithLocalAddress(envelopeContainer.Recipient.Path, localAddress);
                    var      recipientAddress  = ActorPath.Parse(envelopeContainer.Recipient.Path).Address;
                    var      serializedMessage = envelopeContainer.Message;
                    ActorRef senderOption      = null;
                    if (envelopeContainer.HasSender)
                    {
                        senderOption = provider.ResolveActorRefWithLocalAddress(envelopeContainer.Sender.Path, localAddress);
                    }
                    messageOption = new Message(recipient, recipientAddress, serializedMessage, senderOption);
                }
            }


            return(new AckAndMessage(ackOption, messageOption));
        }
Esempio n. 3
0
        public override ByteString ConstructMessage(Address localAddress, IActorRef recipient, SerializedMessage serializedMessage,
                                                    IActorRef senderOption = null, SeqNo seqOption = null, Ack ackOption = null)
        {
            var ackAndEnvelopeBuilder = AckAndEnvelopeContainer.CreateBuilder();
            var envelopeBuilder       = RemoteEnvelope.CreateBuilder().SetRecipient(SerializeActorRef(recipient.Path.Address, recipient));

            if (senderOption != null && senderOption.Path != null)
            {
                envelopeBuilder = envelopeBuilder.SetSender(SerializeActorRef(localAddress, senderOption));
            }
            if (seqOption != null)
            {
                envelopeBuilder = envelopeBuilder.SetSeq((ulong)seqOption.RawValue);
            }
            if (ackOption != null)
            {
                ackAndEnvelopeBuilder = ackAndEnvelopeBuilder.SetAck(AckBuilder(ackOption));
            }
            envelopeBuilder       = envelopeBuilder.SetMessage(serializedMessage);
            ackAndEnvelopeBuilder = ackAndEnvelopeBuilder.SetEnvelope(envelopeBuilder);

            return(ackAndEnvelopeBuilder.Build().ToByteString());
        }
Esempio n. 4
0
 public override ByteString ConstructPureAck(Ack ack)
 {
     return(AckAndEnvelopeContainer.CreateBuilder().SetAck(AckBuilder(ack)).Build().ToByteString());
 }