def run(self): if self.running: return remove = set() self.socket.listen(4) self.running = True self.start_time = False while self.running: start = time.time() r, w, x = select(self.descriptors(), [], [], 0) for descriptor in r: if descriptor == self.socket: descriptor, address = self.socket.accept() if len(self.sockets) > 3: descriptor.send(messages.pack_server_full()) descriptor.close() continue if self.start_time is False: self.start_time = time.time() + 10 print "New game starts in 10 seconds" cid = self.generate_id() print "%s: connected" % cid position = self.start_points[cid] player = Player(cid, position) self.sockets[descriptor] = player try: descriptor.send(messages.pack_cid(cid, position[0], position[1])) except socket.error, err: remove.add(descriptor) elif descriptor in self.sockets: player = self.sockets[descriptor] mid, data = None, None try: mid = descriptor.recv(1) if mid: length, unpacker = messages.get_unpacker(mid) if length and self.start_time == True: data = descriptor.recv(length) if not data: remove.add(descriptor) if ord(mid) == 5: player.alive = False elif ord(mid) == 6: #key up player.velocity = 0 elif ord(mid) == 7: #key down key = unpacker(data) player.direction = key player.velocity = 1 else: remove.add(descriptor) except socket.error, err: remove.add(descriptor)
def read(self): r, _, _ = select.select([self.socket], [], [], 0) if r: mid = self.socket.recv(1) if not mid: return None, None length, unpacker = messages.get_unpacker(mid) if length: data = self.socket.recv(length) unpacked = unpacker(data) return ord(mid), unpacked return None, None