Example #1
0
#!/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):
Example #2
0
#!/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))