Skip to content

Instantly share code, notes, and snippets.

@pirate
Last active November 12, 2018 23:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pirate/2f0c410629b01bd0ec67b4ea8a4fe564 to your computer and use it in GitHub Desktop.
Save pirate/2f0c410629b01bd0ec67b4ea8a4fe564 to your computer and use it in GitHub Desktop.
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