def on_connection_closed(self, connection): """Connection was closed""" self.logger.info("Connection was closed") # call parent handlers SecsHandler.on_connection_closed(self, connection) # update communication state self.communicationState.communicationfail()
def __init__(self, address, port, active, session_id, name, event_handler=None, custom_connection_handler=None): SecsHandler.__init__(self, address, port, active, session_id, name, event_handler, custom_connection_handler) self.logger = logging.getLogger(self.__module__ + "." + self.__class__.__name__) # not going to HOST_INITIATED_CONNECT because fysom doesn't support two states. but there is a transistion to get out of EQUIPMENT_INITIATED_CONNECT when the HOST_INITIATED_CONNECT happens self.communicationState = Fysom({ 'initial': 'DISABLED', # 1 'events': [ {'name': 'enable', 'src': 'DISABLED', 'dst': 'ENABLED'}, # 2 {'name': 'disable', 'src': ['ENABLED', 'NOT_COMMUNICATING', 'COMMUNICATING', 'EQUIPMENT_INITIATED_CONNECT', 'WAIT_DELAY', 'WAIT_CRA', "HOST_INITIATED_CONNECT", "WAIT_CR_FROM_HOST"], 'dst': 'DISABLED'}, # 3 {'name': 'select', 'src': 'NOT_COMMUNICATING', 'dst': 'EQUIPMENT_INITIATED_CONNECT'}, # 5 {'name': 'communicationreqfail', 'src': 'WAIT_CRA', 'dst': 'WAIT_DELAY'}, # 6 {'name': 'delayexpired', 'src': 'WAIT_DELAY', 'dst': 'WAIT_CRA'}, # 7 {'name': 'messagereceived', 'src': 'WAIT_DELAY', 'dst': 'WAIT_CRA'}, # 8 {'name': 's1f14received', 'src': 'WAIT_CRA', 'dst': 'COMMUNICATING'}, # 9 {'name': 'communicationfail', 'src': 'COMMUNICATING', 'dst': 'NOT_COMMUNICATING'}, # 14 {'name': 's1f13received', 'src': ['WAIT_CR_FROM_HOST', 'WAIT_DELAY', 'WAIT_CRA'], 'dst': 'COMMUNICATING'}, # 15 (WAIT_CR_FROM_HOST is running in background - AND state - so if s1f13 is received we go all communicating) ], 'callbacks': { 'onWAIT_CRA': self._on_state_wait_cra, 'onWAIT_DELAY': self._on_state_wait_delay, 'onleaveWAIT_CRA': self._on_state_leave_wait_cra, 'onleaveWAIT_DELAY': self._on_state_leave_wait_delay, 'onCOMMUNICATING': self._on_state_communicating, # 'onselect': self.onStateSelect, }, 'autoforward': [ {'src': 'ENABLED', 'dst': 'NOT_COMMUNICATING'}, # 4 {'src': 'EQUIPMENT_INITIATED_CONNECT', 'dst': 'WAIT_CRA'}, # 5 {'src': 'HOST_INITIATED_CONNECT', 'dst': 'WAIT_CR_FROM_HOST'}, # 10 ] }) self.waitCRATimer = None self.commDelayTimer = None self.commDelayTimeout = 10 self.reportIDCounter = 1000 self.reportSubscriptions = {} self.waitEventList = [] self.register_callback(1, 1, self.s01f01_handler) self.register_callback(1, 13, self.s01f13_handler) self.register_callback(6, 11, self.s06f11_handler) self.register_callback(10, 1, self.s10f01_handler)
def _serialize_data(self): """Returns data for serialization :returns: data to serialize for this object :rtype: dict """ data = SecsHandler._serialize_data(self) data.update({'communicationState': self.communicationState.current, 'commDelayTimeout': self.commDelayTimeout, 'reportIDCounter': self.reportIDCounter}) return data