Messages center¶
-
class
bachata.
BaseMessagesCenter
(loop=None, proto=None, queue=None)[source]¶ Messages center provides top-level messages routing.
Parameters: - loop – asyncio event loop
- queue – Messages queue instance
- proto – Messages protocol instance or
BaseProtocol
instance will be used by default
Attributes:
- .proto:
BaseProtocol
or subclass instance - .loop: asyncio event loop
- .queue:
BaseQueue
subclass instance - .routes: routes objects list
-
add_route
(route)[source]¶ Add messages route to routing chain, see
BaseRoute
Message routes are processed in the same order as they added.
Parameters: route – Route instance
-
add_socket
(channel, websocket)[source]¶ Register WebSocket for receiving messages from channel.
Parameters: - channel – String channel identifier, based on user id or some hash string
- websocket – Tornado WebSocket handler instance
-
del_socket
(channel, websocket)[source]¶ Unregister WebSocket from receiving messages from channel.
Parameters: - channel – String channel identifier, based on user id or some hash string
- websocket – Tornado WebSocket handler instance
-
process
(raw_or_message, websocket=None)[source]¶ Process message to routing chain and send to WebSockets.
Message is passed to registered routes, they return receivers channels and then message is sent to that channels.
Parameters: - raw_or_message – Raw message string or message dict
- websocket – WebSocket connection handler received new message, this is optional parameter, because message could also be created at server internally
Routing¶
-
class
bachata.
BaseRoute
[source]¶ Base messages route class.
Routes are registered in messages center, every route is responsible for delivering single messages type, i.e. direct users messages, group chat messages, system notifications, etc.
-
post_process
(message, to_channel=None, queue=None)[source]¶ Post process message after putting it on delivery queue.
Scenarios examples:
- Test if message was delivered after certain timeout and notify via another channel (email, APNS, SMS) if not.
- Send extra service message right after main message.
- etc.
-
process
(message, websocket=None, proto=None)[source]¶ Process message and return receiver channel for the message.
Scenarios:
- If method returns
None
, message is simply passed to next router in chain. - If method returns non-empty channel string, then message will be sent to that channel.
- If method returns
True
, then routing chain should be stopped for this message.
Parameters: - message – Arbitrary message object.
- proto – Messages protocol instance
Returns: String channel identifier or
True
orNone
- If method returns
-
Queue¶
-
class
bachata.
BaseQueue
[source]¶ Base messages queue class.
-
add_socket
(channel, websocket, proto=None)[source]¶ Register WebSocket for receiving messages from channel.
Method implementation has to write ‘ready’ transport message on success or close WebSocket connection.
Parameters: - channel – String channel identifier, based on user id or some hash string
- websocket – Tornado WebSocket handler instance
-
check_delivered
(channel, message_id)[source]¶ Check if message is delivered.
Default implementation always returns True, assuming no messages tracking is implemented initially.
-
del_socket
(channel, websocket, proto=None)[source]¶ Unregister WebSocket from receiving messages from channel.
Parameters: - channel – String channel identifier, based on user id or some hash string
- websocket – Tornado WebSocket handler instance
- proto – Messages protocol instance
-