Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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