def client_dispatcher_factory(client_context):
def perform_push_client_msg(intent):
client_context.queued_pushed_events.put_nowait(intent.payload)
@do
def perform_client_subscribe_event(intent):
yield Effect(ERegisterEvent(EClientEvent, intent.event, intent.sender))
# key = (intent.event, intent.sender)
# def on_event(sender):
# payload = ejson_dumps({'event': intent.event, 'sender': sender})
# client_context.queued_pushed_events.put_nowait(payload)
# # Attach the callbacks to the client context to make them have the same
# # lifetime given event registration expires when callback is destroyed
# # TODO: allow a subset of the possible events
# client_context.subscribed_events[key] = on_event
# signal(intent.event).connect(on_event, sender=intent.sender)
@do
def perform_client_unsubscribe_event(intent):
yield Effect(EUnregisterEvent(EClientEvent, intent.event, intent.sender))
# key = (intent.event, intent.sender)
# try:
# del client_context.subscribed_events[key]
# except KeyError:
# pass
def perform_client_event(intent):
payload = ejson_dumps({'event': intent.event, 'sender': intent.sender})
client_context.queued_pushed_events.put_nowait(payload)
return TypeDispatcher({
EPushClientMsg: perform_push_client_msg,
EClientSubscribeEvent: perform_client_subscribe_event,
EClientUnsubscribeEvent: perform_client_unsubscribe_event,
EClientEvent: perform_client_event
})
评论列表
文章目录