/// <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()); }
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)); }
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()); }
public override ByteString ConstructPureAck(Ack ack) { return(AckAndEnvelopeContainer.CreateBuilder().SetAck(AckBuilder(ack)).Build().ToByteString()); }