コード例 #1
0
ファイル: Simulator.py プロジェクト: seok00/pydevs
 def process(self, message):
     assert issubclass(message, Message)
     result = None
     if type(message) is Message.X:
         # arrival of external event, global time
         # 1. Update time variables
         # 2. execute external transition function
         # 3. repond with a done message
         self.lastEventTime = self.nextEventTime
         self.nextEventTime = self.model.timeAdvance()
         self.model.externalTransition(message)
         return Message.Done(self.model, self.nextEventTime)
     elif type(message) is Message.Star:
         # Time to execute internal transition
         # 1. Get output of current phase's internal transition
         # 2. Comput internal transition function
         # 2. Send y message with the output
         # 3. Send done message to indicate state transition has been carried out and proved next event time
         
         self.lastEventTime = self.nextEventTime
         self.nextEventTime = self.model.timeAdvance()
         # the output variable below is the y message
         output = self.model.output()
         self.model.internalTransition()
         return output, Message.Done(self.model, self.nextEventTime)
     else:
         raise(ValueError("Wrong message type received. Simulators can only receive type X and Star messages"))
コード例 #2
0
    def process(self, message):
        """[processes message]
        
        Arguments:
            message {[Message]} -- [The message of ]
        
        Returns:
            [type] -- [description]
        """
        assert issubclass(message, Message)

        if type(message) is Message.X:
            """
            Arrival of external event
            1. Time advance and set new sigma variable. This means set next internal transition time
            2. External transition
            
            Returns:
                [Message.Done] -- [Telling that it has finished its external input transition and its next event time]
            """
            self.lastEventTime = self.nextEventTime
            self.nextEventTime = self.model.timeAdvance()
            self.model.externalTransition(message.content)
            return Message.Done(self, message.time, value=self.nextEventTime)
        elif type(message) is Message.Star:
            # Time to execute internal transition
            # 1. Get output of current phase's internal transition
            # 2. Comput internal transition function
            # 2. Send y message with the output
            # 3. Send done message to indicate state transition has been carried out and proved next event time

            self.lastEventTime = self.nextEventTime
            self.nextEventTime = self.model.timeAdvance()
            # the output variable below is the y message
            output = self.model.output()
            self.model.internalTransition()
            return output, Message.Done(self,
                                        message.time,
                                        value=self.nextEventTime)
        else:
            raise (ValueError(
                "Wrong message type received. Simulators can only receive type X and Star messages"
            ))