Add a `Context` type for task/protocol RPC state
This is loosely based off the nanomsg concept found here: https://nanomsg.github.io/nng/man/v1.1.0/nng_ctx.5contexts
parent
a9932e6c01
commit
87a6165430
|
@ -11,7 +11,7 @@ import trio # type: ignore
|
|||
from trio import MultiError
|
||||
|
||||
from .log import get_console_log, get_logger, get_loglevel
|
||||
from ._ipc import _connect_chan, Channel
|
||||
from ._ipc import _connect_chan, Channel, Context
|
||||
from ._actor import (
|
||||
Actor, _start_actor, Arbiter, get_arbiter, find_actor, wait_for_actor
|
||||
)
|
||||
|
|
|
@ -205,6 +205,28 @@ class Channel:
|
|||
return self.squeue.connected() if self.squeue else False
|
||||
|
||||
|
||||
class Context:
|
||||
"""An IAC (inter-actor communication) context.
|
||||
|
||||
Allows maintaining task or protocol specific state between communicating
|
||||
actors. A unique context is created on the receiving end for every request
|
||||
to a remote actor.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
channel: Channel,
|
||||
command_id: str,
|
||||
):
|
||||
self.chan: Channel = channel
|
||||
self.cid: str = command_id
|
||||
|
||||
async def send_yield(self, data):
|
||||
await self.chan.send({'yield': data, 'cid': self.cid})
|
||||
|
||||
async def send_stop(self):
|
||||
await self.chan.send({'stop': True, 'cid': self.cid})
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def _connect_chan(
|
||||
host: str, port: int
|
||||
|
|
Loading…
Reference in New Issue