Esempio n. 1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// \fn public override void ReceiveHandling(BaseMessage message)
        ///
        /// \brief Receive handling.
        ///
        /// \par Description.
        /// -#  This method is activated when a new message arrived to the process
        /// -#  The method processing is done according to their arrival order
        /// -#  If you want to change the order of processing use the ArrangeMessageQ
        ///
        /// \par Algorithm.
        ///
        /// \par Usage Notes.
        /// Usually the algorithm of this method is:
        /// -#  if message type is ... perform ...
        /// -#  if message type is ... perform ...
        ///
        /// \author Ilan Hindy
        /// \date 26/01/2017
        ///
        /// \param message The message.
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        public override void ReceiveHandling(BaseMessage message)
        {
            ChandyLamport_OneRoundChannel sourceChannel = (ChandyLamport_OneRoundChannel)ChannelFrom(message);

            switch (message[bm.pak.MessageType])
            {
            case m.MessageTypes.BaseMessage:
                if (or[p.ork.Recordered] && !sourceChannel.or[c.ork.Marked])
                {
                    sourceChannel.or[c.ork.State].Add(message[bm.ork.Name]);
                }
                break;

            case m.MessageTypes.Marker:
                TakeSnapshot();
                sourceChannel.or[c.ork.Marked] = true;
                if (Finished())
                {
                    PrintResults();
                    pp[bp.ppk.FrameColor]     = KnownColor.Blue;
                    pp[bp.ppk.FrameLineWidth] = 6;
                    ((ChandyLamport_OneRoundNetwork)network).TerminateIfFinished();
                }
                break;
            }
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// \fn public ChandyLamport_OneRoundMessage(ChandyLamport_OneRoundNetwork network, object messageType, ChandyLamport_OneRoundChannel channel, string messageName, int round = 0, int logicalClock = 0): base(network, messageType, channel, messageName, round, logicalClock)
        ///
        /// \brief Constructor.
        ///
        /// \par Description.
        ///      Construct a message from header parameters.
        ///
        /// \par Algorithm.
        ///
        /// \par Usage Notes.
        ///
        /// \author Ilanh
        /// \date 14/03/2017
        ///
        /// \param network       (ChandyLamport_OneRoundNetwork) - The network.
        /// \param messageType  (dynamic) - Type of the message.
        /// \param channel      (ChandyLamport_OneRoundChannel) - The channel.
        /// \param messageName   (string) - Name of the message.
        /// \param round        (Optional)  (int) - The round.
        /// \param logicalClock (Optional)  (int) - The logical clock.
        ///
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        public ChandyLamport_OneRoundMessage(ChandyLamport_OneRoundNetwork network, object messageType, ChandyLamport_OneRoundChannel channel, string messageName, int round = 0, int logicalClock = 0) :
            base(network, messageType, channel, messageName, round, logicalClock)
        {
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// \fn public ChandyLamport_OneRoundMessage(ChandyLamport_OneRoundMessage sourceMessage, ChandyLamport_OneRoundChannel sendingChannel): base(sourceMessage, sendingChannel)
        ///
        /// \brief Constructor.
        ///
        /// \par Description.
        ///      A message that is duplicated to the source except for the channel parameters.
        ///
        /// \par Algorithm.
        ///
        /// \par Usage Notes.
        ///      This constructor is useful when you want to forward a message to other channels
        ///
        /// \author Ilanh
        /// \date 14/03/2017
        ///
        /// \param sourceMessage  (ChandyLamport_OneRoundMessage) - Message describing the source.
        /// \param sendingChannel (ChandyLamport_OneRoundChannel) - The sending channel.
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        public ChandyLamport_OneRoundMessage(ChandyLamport_OneRoundNetwork network, ChandyLamport_OneRoundMessage sourceMessage, ChandyLamport_OneRoundChannel sendingChannel) :
            base(network, sourceMessage, sendingChannel)
        {
        }