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.
44 lines
1.0 KiB
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
|