private BaseMessage CreateReport() { // Get the parameters of the processor int round = OperationResults.Value[OperationResultKeys.RoundNum].Value; int id = ElementAttributes.Value[NetworkElement.ElementAttributeKeys.Id].Value; int snapshot = OperationResults.Value[OperationResultKeys.Snapshot].Value; double weight = OperationResults.Value[OperationResultKeys.Weight].Value; // Collect the messages from the channels AttributeList messages = new AttributeList(); foreach (ChandyLamportChannel channel in InChannels()) { messages = messages.Concat(channel.ReportChannelMessages()).ToList().ToAttributeList(); } // Build the message BaseMessage message = new BaseMessage(ChandyLamportMessage.MessageTypes.Report, 0, 0, 0, 0, round, 0); message.AddField(ChandyLamportMessage.FieldKeys.Id, new Attribute { Value = id }); message.AddField(ChandyLamportMessage.FieldKeys.Snapshots, new Attribute { Value = snapshot }); message.AddField(ChandyLamportMessage.FieldKeys.Weight, new Attribute { Value = weight }); message.AddField(ChandyLamportMessage.FieldKeys.MessageSnapshot, new Attribute { Value = messages, IncludedInShortDescription = false }); return(message); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// \fn protected virtual void BeforeSendOperation(BaseMessage message) /// /// \brief Before send operation. /// /// \par Description. /// This method is used for algorithm specific actions before a send of a message /// /// \par Algorithm. /// /// \par Usage Notes. /// /// \author Ilanh /// \date 05/04/2017 /// /// \param message (BaseMessage) - The message. //////////////////////////////////////////////////////////////////////////////////////////////////// protected override void BeforeSendOperation(BaseMessage message) { LaiYoung_OneRoundChannel channel = (LaiYoung_OneRoundChannel)ChannelTo(message); channel.or[c.ork.Sent]++; switch (message.GetHeaderField(bm.pak.MessageType)) { case m.MessageTypes.BaseMessage: message.AddField(m.baseMessage.Flag, or[p.ork.Recordered]); break; case m.MessageTypes.Presnp: message.AddField(m.presnp.NumMsg, channel.or[c.ork.Sent]); break; } }
private BaseMessage CreateFirstMarker(int round) { BaseMessage message = new BaseMessage(ChandyLamportMessage.MessageTypes.Marker, 0, 0, 0, 0, round, 0); message.AddField(ChandyLamportMessage.FieldKeys.Weight, new Attribute { Value = 1 }); return(message); }