Completed
Push — master ( 826d2d...3285f7 )
by
unknown
01:54
created

SignalRHubSensor.message_received()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 4
rs 10
1
from st2reactor.sensor.base import Sensor
2
from signalr import Connection
3
4
__all__ = [
5
    'SignalRHubSensor'
6
]
7
8
9
class SignalRHubSensor(Sensor):
10
    def __init__(self, sensor_service, config=None):
11
        super(SignalRHubSensor, self).__init__(sensor_service=sensor_service,
12
                                               config=config)
13
        self._logger = self._sensor_service.get_logger(__name__)
14
        self.url = config['hub_url']
15
        self.hub_name = config['hub_name']
16
        self._trigger_ref = 'signalr.message_received'
17
        self._hub = None
18
        self.connection = None
19
        self.session = None
20
21
    def setup(self):
22
        self.connection = Connection(self.url, self.session)
23
        # start a connection
24
        self.connection.start()
25
        # add a handler to process notifications to the connection
26
        self.connection.handlers += \
27
            lambda data: self._logger.debug(
28
                'Connection: new notification - %s' % data)
29
        # get hub
30
        self._hub = self.connection.hub(self.hub_name)
31
32
    def message_received(self, message):
33
        self._logger.debug('Connection: new notification.' % message)
34
        self._sensor_service.dispatch(trigger=self._trigger_ref,
35
                                      payload={message: message})
36
37
    def run(self):
38
        self._hub.client.on('message_received',
39
                            SignalRHubSensor.message_received)
40
41
    def cleanup(self):
42
        # do not receive new messages
43
        self._hub.client.off('message_received', self.message_received)
44
        self.connection.close()
45