Esempio n. 1
0
    def __init__(self,
                 address,
                 port,
                 active,
                 session_id,
                 name,
                 event_handler=None,
                 custom_connection_handler=None):
        EventProducer.__init__(self, event_handler)

        self.logger = logging.getLogger(self.__module__ + "." +
                                        self.__class__.__name__)
        self.communicationLogger = logging.getLogger("hsms_communication")

        self.address = address
        self.port = port
        self.active = active
        self.sessionID = session_id
        self.name = name

        self.connected = False

        # system id counter
        self.systemCounter = random.randint(0, (2**32) - 1)

        # repeating linktest variables
        self.linktestTimer = None
        self.linktestTimeout = 30

        # response queues
        self._systemQueues = {}

        # hsms connection state fsm
        self.connectionState = Fysom({
            'initial':
            'NOT_CONNECTED',
            'events': [
                {
                    'name': 'connect',
                    'src': 'NOT_CONNECTED',
                    'dst': 'CONNECTED'
                },
                {
                    'name': 'disconnect',
                    'src': ['CONNECTED', 'NOT_SELECTED', 'SELECTED'],
                    'dst': 'NOT_CONNECTED'
                },
                {
                    'name': 'select',
                    'src': ['CONNECTED', 'NOT_SELECTED'],
                    'dst': 'SELECTED'
                },
                {
                    'name': 'deselect',
                    'src': 'SELECTED',
                    'dst': 'NOT_SELECTED'
                },
                {
                    'name': 'timeoutT7',
                    'src': ['CONNECTED', 'NOT_SELECTED'],
                    'dst': 'NOT_CONNECTED'
                },
            ],
            'callbacks': {
                'onNOT_SELECTED': self._on_state_connect,
                'onNOT_CONNECTED': self._on_state_disconnect,
                'onSELECTED': self._on_state_select,
            },
            'autoforward': [{
                'src': 'CONNECTED',
                'dst': 'NOT_SELECTED'
            }]
        })

        # setup connection
        if self.active:
            if custom_connection_handler is None:
                self.connection = HsmsActiveConnection(self.address, self.port,
                                                       self.sessionID, self)
            else:
                self.connection = custom_connection_handler.create_connection(
                    self.address, self.port, self.sessionID, self)
        else:
            if custom_connection_handler is None:
                self.connection = HsmsPassiveConnection(
                    self.address, self.port, self.sessionID, self)
            else:
                self.connection = custom_connection_handler.create_connection(
                    self.address, self.port, self.sessionID, self)