You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pyGeoride/georideapilib/socket.py

116 lines
3.9 KiB

""" GeoRide socket-io implementation """
import logging
import socketio
from georideapilib.api import GEORIDE_SOCKET_HOST
_LOGGER = logging.getLogger(__name__)
sio = socketio.Client(reconnection=True, reconnection_attempts=5, reconnection_delay=1000, reconnection_delay_max=5000, randomization_factor=0.5) # pylint: disable=C0103
@sio.on('connect')
def on_connect():
""" event: connected """
_LOGGER.debug('GeoRide socket connected')
@sio.on('disconnect')
def on_disconnect():
""" event: disconnected """
_LOGGER.debug('GeoRide socket disconnected')
class GeoRideSocket():
"""docstring for GeoRideSocket"""
def __init__(self):
self._on_message_callback = None
self._on_device_callback = None
self._on_position_callback = None
self._on_alarm_callback = None
self._on_refresh_tracker_callback = None
self._on_locked_callback = None
self._initialised = False
def subscribe_on_message(self, callback_function):
"""event: tells you authentication informations."""
self._on_message_callback = callback_function
def subscribe_device(self, callback_function):
"""event: tells you when a device is added to the account."""
self._on_device_callback = callback_function
def subscribe_position(self, callback_function):
"""event: tells you when a device sent a position."""
self._on_position_callback = callback_function
def subscribe_alarm(self, callback_function):
"""event: tells you when a device trigger an alarm."""
self._on_alarm_callback = callback_function
def subscribe_refresh_tracker(self, callback_function):
"""event: tells you when you need to refresh your list of trackers"""
self._on_refresh_tracker_callback = callback_function
def subscribe_locked(self, callback_function):
"""event: tells you when a device has been locked or unlocked."""
self._on_locked_callback = callback_function
def init(self):
"""init the context"""
@sio.on('message')
def on_message(data):
""" on_message """
_LOGGER.debug('Message received: %s', data)
if self._on_message_callback is not None:
self._on_message_callback(data)
@sio.on('device')
def on_device(data):
""" on_device """
_LOGGER.debug('Device received: %s', data)
if self._on_device_callback is not None:
self._on_device_callback(data)
@sio.on('position')
def on_position(data):
""" on_position """
_LOGGER.debug('Position received:%s', data)
if self._on_position_callback is not None:
self._on_position_callback(data)
@sio.on('alarm')
def on_alarm(data):
""" on_alarm """
_LOGGER.debug('Alarm received: %s', data)
if self._on_alarm_callback is not None:
self._on_alarm_callback(data)
@sio.on('refreshTrackersInstruction')
def on_refresh_tracker():
""" on_refresh_tracker """
_LOGGER.debug('Refresh tracker received')
if self._on_refresh_tracker_callback is not None:
self._on_refresh_tracker_callback()
@sio.on('lockedPosition')
def on_locked(data):
""" on_locked """
_LOGGER.debug('Locked received: %s', data)
if self._on_locked_callback is not None:
self._on_locked_callback(data)
self._initialised = True
def connect(self, auth_token):
""" connect to the georide socket"""
if self._initialised is not False:
sio.connect(GEORIDE_SOCKET_HOST, headers={'token': auth_token})
sio.wait()
else:
_LOGGER.error("Please call init() before")
def disconnect(self):
"""disconnect from the georide socket"""
sio.disconnect()