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);
        }
示例#2
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// \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);
        }