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.
01/software/source/server/queues.py

44 lines
1.0 KiB

import asyncio
import queue
'''
Queues are created on demand and should
be accessed inside the currect event loop
from a asyncio.run(co()) call.
'''
class _ReadOnly(type):
@property
def from_computer(cls):
if not cls._from_computer:
# Sync queue because interpreter.run is synchronous.
cls._from_computer = queue.Queue()
return cls._from_computer
@property
def from_user(cls):
if not cls._from_user:
cls._from_user = asyncio.Queue()
return cls._from_user
@property
def to_device(cls):
if not cls._to_device:
cls._to_device = asyncio.Queue()
return cls._to_device
class Queues(metaclass=_ReadOnly):
# Queues used in server and app
# Just for computer messages from the device.
_from_computer = None
# Just for user messages from the device.
_from_user = None
# For messages we send.
_to_device = None
def get():
return Queues.from_computer, Queues.from_user, Queues.to_device