//////////////////////////////////////////////////////////////////////////////////////////////////// /// \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) { }