Last active
November 12, 2018 23:00
-
-
Save pirate/2f0c410629b01bd0ec67b4ea8a4fe564 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
NoneType = type(None) | |
JsonValue = Union[str, int, float, bool, NoneType] | |
SocketMessage = Dict[str, JsonValue] | |
socket_routes = { | |
'/table/<table_id>/': [PresenceManager, TimeSync, PokerTable], | |
'/tournament/<table_id>/': [PresenceManager, Tournament, PokerTable], | |
'/speedtest/': [SpeedTest], | |
} | |
class Socket(models.Model): | |
session | |
channel_name | |
path | |
active | |
created | |
last_ping | |
user_ip | |
def send(self, message): | |
self.log_to_file(self.socket_log, message, type='SEND') | |
send_socket_msg(self.channel_name, message) | |
def recv(self, message): | |
self.log_to_file(self.socket_log, message, type='RECV') | |
self.dispatch(message) | |
def on_connect(self): | |
message = {'type': CONNECT} | |
self.log_to_file(self.socket_log, message, type='INFO') | |
self.dispatch(message) | |
def on_disconnect(self): | |
message = {'type': DISCONNECT} | |
self.log_to_file(self.socket_log, message, type='INFO') | |
self.dispatch(message) | |
def dispatch(self, message): | |
SocketHandlers = get_handlers_for_path(socket_routes, self.path) | |
for Handler in SocketHandlers: | |
handler = Handler() | |
handler.dispatch(message) | |
class SocketHandler: | |
sendable_messages = [] | |
receivable_messages = [] | |
def dispatch(): | |
on new message: | |
pick and call handler function | |
### Handlers | |
class PresenceManager(SocketHandler): | |
sendable_messages = [PING] | |
receivalbe_messages = [PONG] | |
def on_ping(self, message): | |
self.send(PONG) | |
class TimeSync(SocketHandler): | |
sendable_messages = [TIME_SYNC] | |
def on_connect(self, message): | |
sleep(10) | |
self.send(TIME_SYNC) | |
class PokerTable(SocketHandler): | |
sendable_messages = [UPDATE_GAMESTATE] | |
receivable_messages = [BET, RAISE, FOLD, CALL, ...] | |
@property | |
def table(self): | |
def on_connect(self, message): | |
self.send(UPDATE_GAMESTATE, ) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment