#!/usr/bin/env python3 from chatlogging import get from message import serialize, deserialize import argparse import re import socket import threading logger = get('client') class ResponseHandler: def __init__(self, sock): self.sock = sock self.stop = False self.drop = None self.jammed = False def serve_forever(self): while not self.stop: name, team, dest, data = deserialize(self.sock.recv(1024)) if data == '/drop' and self.drop != None: sock.sendall(self.drop) self.drop = None if self.jammed: logger.info('jammed -> {}: {}'.format(dest, data)) else: logger.info('{} ({}) -> {}: {}'.format(name, team, dest, data)) def game_server_socket(address):
#!/usr/bin/env python3 from chatlogging import get from message import serialize, deserialize import re import socket import socketserver import threading logger = get('server') class ClientConnection(socketserver.StreamRequestHandler): def setup(self): socketserver.StreamRequestHandler.setup(self) # Wait for the /open message. name, team, dest, data = deserialize(self.rfile.readline()) if data != '/open': raise ValueError('First message ({}) to game server was not a /open'.format(data)) # Add the client to the appropriate groups. self.server.connections[self.client_address] = self.wfile self.server.names[name] = self.client_address self.server.names[self.client_address] = name if team == 'russians': self.server.russians.add(self.client_address) elif team == 'americans': self.server.americans.add(self.client_address) else: raise ValueError('Invalid team: {}'.format(team))