Skip to content
Snippets Groups Projects
Commit 857a6c5f authored by jkerdreu's avatar jkerdreu
Browse files

Reworks of rx/tx handling to drop the Engine subclassing

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/trunk@1396 b32b6428-25c9-4566-ad07-03861ab6144f
parent 87e4be58
Branches
No related tags found
No related merge requests found
......@@ -53,9 +53,9 @@ class Engine(object):
self.__attributesChange = [] # list of XAALAttributes instances
self.__txFifo = deque() # tx msg fifo
self.__alives = [] # list of alive devices
self.__tasks = []
self.__periodic_callbacks = []
self.__callbacks = []
self.__rx_handler = None
#####################################################
# Attributes
......@@ -77,42 +77,27 @@ class Engine(object):
if dev not in self.__devices:
self.__devices.append(dev)
dev.set_engine(self)
# Add tuple (dev,next_alive) to alives list
next_alive = time.time() + dev.get_alive_period()
self.__alives.append((dev, next_alive))
self.register_alive(dev)
def unregister_device(self, dev):
dev.set_engine(None)
# Remove dev from devices list
self.__devices.remove(dev)
# Remove dev from alives list
self.del_alive(dev)
self.unregister_alive(dev)
# Fifo for msg to send
def queue_tx(self, msg):
self.__txFifo.append(msg)
#####################################################
# xAAL messages Rx/Tx handling
# xAAL messages Tx handling
#####################################################
def receive_msg(self):
result = None
data = self.__nc.get_data()
if data:
try:
msg = self.__mf.decode_msg(data)
except MessageFactoryParserError as e:
logger.error(e.message)
msg = None
result = msg
return result
def process_rx_msg(self):
msg = self.receive_msg()
if msg:
self.main_handler(msg)
# Fifo for msg to send
def queue_tx(self, msg):
self.__txFifo.append(msg)
def process_tx_msg(self):
""" Process (send) message in tx queue
called from the loop()
"""
if self.__txFifo:
while self.__txFifo:
self.send_msg(self.__txFifo.popleft())
......@@ -131,7 +116,12 @@ class Engine(object):
#####################################################
# Alive messages
#####################################################
def del_alive(self, dev):
def register_alive(self,dev):
# Add tuple (dev,next_alive) to alives list
next_alive = time.time() + dev.get_alive_period()
self.__alives.append((dev, next_alive))
def unregister_alive(self, dev):
"""remove dev from the alives list of tuples (dev,alives)
:param dev: instance of xAAL device
:type dev: Device
......@@ -141,7 +131,7 @@ class Engine(object):
del self.__alives[i]
break
def up_alive(self, dev):
def update_alive(self, dev):
"""update alive for device dev from the alives
list of tuples (dev,alive_timeout)
:param dev: instance of xAAL device
......@@ -176,7 +166,7 @@ class Engine(object):
self.__alives[i] = (dev, next_alive)
#####################################################
# Attributes changes
# xAAL attributes changes
#####################################################
def add_attributesChange(self, attr):
self.__attributesChange.append(attr)
......@@ -206,9 +196,32 @@ class Engine(object):
#####################################################
# xAAL messages handlers
#####################################################
def main_handler(self, msg):
# default
self.handle_request(msg)
def receive_msg(self):
result = None
data = self.__nc.get_data()
if data:
try:
msg = self.__mf.decode_msg(data)
except MessageFactoryParserError as e:
logger.error(e.message)
msg = None
result = msg
return result
def process_rx_msg(self):
msg = self.receive_msg()
if msg:
self.handle_rx_msg(msg)
def set_rx_msg_handler(self,func):
""" overide the default handler for incomming messages"""
self.__rx_handler = func
def handle_rx_msg(self, msg):
if self.__rx_handler:
self.__rx_handler(msg)
else:
self.handle_request(msg)
def handle_request(self, msg):
"""Filter msg for devices according default xAAL API then process the
......@@ -333,7 +346,7 @@ class Engine(object):
def start(self):
for dev in self.get_devices():
self.send_alive(dev)
self.up_alive(dev)
self.update_alive(dev)
def stop(self):
self.__run = False
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment