class Server(Endpoint, Greenlet): ''' Used at client side, to represent server ''' def __init__(self, sock, addr): Endpoint.__init__(self, sock, addr) Greenlet.__init__(self) self.ctlcmds = Channel() self.userid = 0 self.gamedata = Gamedata(recording=True) def _run(self): while True: cmd, data = self.read() if cmd == 'gamedata': self.gamedata.feed(data) else: self.ctlcmds.put([cmd, data]) def gexpect(self, tag, blocking=True): return self.gamedata.gexpect(tag, blocking) def gbreak(self): return self.gamedata.gbreak() def gclear(self): self.gamedata = Gamedata(recording=True) def gwrite(self, tag, data): log.debug('GAME_WRITE: %s', repr([tag, data])) encoded = self.encode(['gamedata', [tag, data]]) self.raw_write(encoded) def wait_till_live(self): self.gamedata.wait_empty() def gamedata_piled(self): return len(self.gamedata.gdqueue) > 60 def shutdown(self): self.kill() self.join() self.ctlcmds.put(['shutdown', None]) self.close()