mirror of
https://github.com/bringout/oca-ocb-hw.git
synced 2026-04-19 10:02:00 +02:00
Initial commit: Hw packages
This commit is contained in:
commit
a9d00500da
161 changed files with 10506 additions and 0 deletions
56
odoo-bringout-oca-ocb-hw_drivers/hw_drivers/event_manager.py
Normal file
56
odoo-bringout-oca-ocb-hw_drivers/hw_drivers/event_manager.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
import json
|
||||
from threading import Event
|
||||
import time
|
||||
|
||||
from odoo.http import request
|
||||
|
||||
class EventManager(object):
|
||||
def __init__(self):
|
||||
self.events = []
|
||||
self.sessions = {}
|
||||
|
||||
def _delete_expired_sessions(self, max_time=70):
|
||||
'''
|
||||
Clears sessions that are no longer called.
|
||||
|
||||
:param max_time: time a session can stay unused before being deleted
|
||||
'''
|
||||
now = time.time()
|
||||
expired_sessions = [
|
||||
session
|
||||
for session in self.sessions
|
||||
if now - self.sessions[session]['time_request'] > max_time
|
||||
]
|
||||
for session in expired_sessions:
|
||||
del self.sessions[session]
|
||||
|
||||
def add_request(self, listener):
|
||||
self.session = {
|
||||
'session_id': listener['session_id'],
|
||||
'devices': listener['devices'],
|
||||
'event': Event(),
|
||||
'result': {},
|
||||
'time_request': time.time(),
|
||||
}
|
||||
self._delete_expired_sessions()
|
||||
self.sessions[listener['session_id']] = self.session
|
||||
return self.sessions[listener['session_id']]
|
||||
|
||||
def device_changed(self, device):
|
||||
event = {
|
||||
**device.data,
|
||||
'device_identifier': device.device_identifier,
|
||||
'time': time.time(),
|
||||
'request_data': json.loads(request.params['data']) if request and 'data' in request.params else None,
|
||||
}
|
||||
self.events.append(event)
|
||||
for session in self.sessions:
|
||||
if device.device_identifier in self.sessions[session]['devices'] and not self.sessions[session]['event'].is_set():
|
||||
self.sessions[session]['result'] = event
|
||||
self.sessions[session]['event'].set()
|
||||
|
||||
|
||||
event_manager = EventManager()
|
||||
Loading…
Add table
Add a link
Reference in a new issue