Add callbacks
This commit is contained in:
parent
4314fa60f3
commit
d7e16e173f
3 changed files with 65 additions and 36 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
from .callbacks import Callbacks
|
||||||
from .connection import Connection
|
from .connection import Connection
|
||||||
from .session import Session
|
from .session import Session
|
||||||
from .message import Message
|
from .message import Message
|
||||||
|
|
|
||||||
53
yaboli/callbacks.py
Normal file
53
yaboli/callbacks.py
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
class Callbacks():
|
||||||
|
"""
|
||||||
|
Manage callbacks
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self._callbacks = {}
|
||||||
|
|
||||||
|
def add_callback(self, event, callback, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
add_callback(event, callback, *args, **kwargs) -> None
|
||||||
|
|
||||||
|
Add a function to be called on event.
|
||||||
|
The function will be called witand *+kwargs.
|
||||||
|
Certain arguments might be added, depending on the event.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not event in self.callbacks:
|
||||||
|
self._callbacks[event] = []
|
||||||
|
|
||||||
|
callback_info = {
|
||||||
|
"callback": callback,
|
||||||
|
"args": args,
|
||||||
|
"kwargs": kwargs
|
||||||
|
}
|
||||||
|
|
||||||
|
self._callbacks[event].append(callback_info)
|
||||||
|
|
||||||
|
def del_callbacks(self, event):
|
||||||
|
"""
|
||||||
|
del_callbacks(event) -> None
|
||||||
|
|
||||||
|
Delete all callbacks attached to that event.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if event in self._callbacks:
|
||||||
|
del self._callbacks[event]
|
||||||
|
|
||||||
|
def call_callback(self, event, *args):
|
||||||
|
"""
|
||||||
|
call_callback(event) -> None
|
||||||
|
|
||||||
|
Call all callbacks subscribed to the event with *args and the arguments
|
||||||
|
specified when the callback was added.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if event in self._callbacks:
|
||||||
|
for c_info in self._callbacks[event]:
|
||||||
|
c = c_info["callback"]
|
||||||
|
args = c_info["args"] + args
|
||||||
|
kwargs = c_info["kwargs"]
|
||||||
|
|
||||||
|
c(*args, **kwargs)
|
||||||
|
|
@ -4,6 +4,8 @@ import threading
|
||||||
import websocket
|
import websocket
|
||||||
from websocket import WebSocketException as WSException
|
from websocket import WebSocketException as WSException
|
||||||
|
|
||||||
|
from . import callbacks
|
||||||
|
|
||||||
|
|
||||||
ROOM_FORMAT = "wss://euphoria.io/room/{}/ws"
|
ROOM_FORMAT = "wss://euphoria.io/room/{}/ws"
|
||||||
|
|
||||||
|
|
@ -33,8 +35,8 @@ class Connection():
|
||||||
|
|
||||||
self.ws = None
|
self.ws = None
|
||||||
self.send_id = 0
|
self.send_id = 0
|
||||||
self.callbacks = {}
|
self.callbacks = callbacks.Callbacks()
|
||||||
self.id_callbacks = {}
|
self.id_callbacks = callbacks.Callbacks()
|
||||||
|
|
||||||
def connect(self, tries=-1, delay=10):
|
def connect(self, tries=-1, delay=10):
|
||||||
"""
|
"""
|
||||||
|
|
@ -132,39 +134,21 @@ class Connection():
|
||||||
|
|
||||||
def add_callback(self, ptype, callback, *args, **kwargs):
|
def add_callback(self, ptype, callback, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
add_callback(ptype, callback) -> None
|
add_callback(ptype, callback, *args, **kwargs) -> None
|
||||||
|
|
||||||
Add a function to be called when a packet of type ptype is received.
|
Add a function to be called when a packet of type ptype is received.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not ptype in self.callbacks:
|
self.callbacks.add_callback(ptype, callback, *args, **kwargs)
|
||||||
self.callbacks[ptype] = []
|
|
||||||
|
|
||||||
callback_info = {
|
|
||||||
"callback": callback,
|
|
||||||
"args": args,
|
|
||||||
"kwargs": kwargs
|
|
||||||
}
|
|
||||||
|
|
||||||
self.callbacks[ptype].append(callback_info)
|
|
||||||
|
|
||||||
def add_id_callback(self, pid, callback, *args, **kwargs):
|
def add_id_callback(self, pid, callback, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
add_id_callback(pid, callback) -> None
|
add_id_callback(pid, callback, *args, **kwargs) -> None
|
||||||
|
|
||||||
Add a function to be called when a packet with id pid is received.
|
Add a function to be called when a packet with id pid is received.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not pid in self.id_callbacks:
|
self.id_callbacks.add_callback(pid, callback, *args, **kwargs)
|
||||||
self.id_callbacks[pid] = []
|
|
||||||
|
|
||||||
callback_info = {
|
|
||||||
"callback": callback,
|
|
||||||
"args": args,
|
|
||||||
"kwargs": kwargs
|
|
||||||
}
|
|
||||||
|
|
||||||
self.id_callbacks[pid].append(callback_info)
|
|
||||||
|
|
||||||
def call_callback(self, event, *args):
|
def call_callback(self, event, *args):
|
||||||
"""
|
"""
|
||||||
|
|
@ -173,12 +157,7 @@ class Connection():
|
||||||
Call all callbacks subscribed to the event with *args.
|
Call all callbacks subscribed to the event with *args.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if event in self.callbacks:
|
self.callbacks.call_callback(event, *args)
|
||||||
for c_info in self.callbacks[event]:
|
|
||||||
c = c_info["callback"]
|
|
||||||
args = c_info["args"] + args
|
|
||||||
kwargs = c_info["kwargs"]
|
|
||||||
c(*args, **kwargs)
|
|
||||||
|
|
||||||
def call_id_callback(self, pid, *args):
|
def call_id_callback(self, pid, *args):
|
||||||
"""
|
"""
|
||||||
|
|
@ -187,12 +166,8 @@ class Connection():
|
||||||
Call all callbacks subscribed to the pid with *args.
|
Call all callbacks subscribed to the pid with *args.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if pid in self.id_callbacks:
|
self.id_callbacks.call_callback(pid, *args)
|
||||||
for c_info in self.id_callbacks.pop(pid):
|
self.id_callbacks.del_callbacks(pid)
|
||||||
c = c_info["callback"]
|
|
||||||
args = c_info["args"] + args
|
|
||||||
kwargs = c_info["kwargs"]
|
|
||||||
c(*args, **kwargs)
|
|
||||||
|
|
||||||
def handle_json(self, data):
|
def handle_json(self, data):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue