42 lines
No EOL
822 B
Python
42 lines
No EOL
822 B
Python
# mailroom.py
|
|
|
|
import queue
|
|
import asyncio
|
|
|
|
import typs
|
|
|
|
# Subcribers (Crimata IDs)
|
|
subs = []
|
|
|
|
# Mailroom (all mailboxes)
|
|
que = queue.Queue()
|
|
ref = {}
|
|
|
|
# Mailroom functions
|
|
# ------------------
|
|
|
|
# Create mailbox and add to mailroom.
|
|
def create_mailbox(crimata_id):
|
|
mailbox = typs.MailBox(name=crimata_id)
|
|
que.put(mailbox)
|
|
ref.update({crimata_id: mailbox})
|
|
subs.append(crimata_id)
|
|
|
|
# Get mailbox by Crimata ID.
|
|
def get_mailbox(crimata_id):
|
|
if not crimata_id in subs:
|
|
create_mailbox(crimata_id)
|
|
mailbox = ref.get(crimata_id)
|
|
return mailbox
|
|
|
|
# Inbox -> receiving mail.
|
|
async def get_mail(crimata_id):
|
|
mailbox = get_mailbox(crimata_id)
|
|
mail = await mailbox.inbox.get()
|
|
return mail
|
|
|
|
# Outbox -> sending mail.
|
|
def put_mail(crimata_id, mail: typs.Mail):
|
|
mailbox = get_mailbox(crimata_id)
|
|
mailbox.outbox.put(mail)
|
|
|