Beispiel #1
0
class LauncherServer(object):
    address_family = socket.AF_INET
    socket_type = socket.SOCK_DGRAM
    max_packet_size = 1024

    def __init__(self, address=("localhost", 9999)):
        self.address = address
        self.shutdown_event = threading.Event()
        self.should_shutdown = False

        self.socket = socket.socket(self.address_family, self.socket_type)
        print "bound to: ", address
        self.socket.bind(self.address)
        self.address = self.socket.getsockname()
        self.launcher = USBMissileLauncher()
        self.last_status_time = 0

    def fileno(self):
        return self.socket.fileno()

    def serve(self, sleep=0.01):
        self.shutdown_event.clear()

        try:
            while not self.should_shutdown:
                t = time.time()
                if t - self.last_status_time > STATUS_INTERVAL:
                    # heartbeat
                    self.launcher.status()

                r, w, e = select.select([self], [], [], sleep)
                if self in r:
                    self.handle_request()

                # sleep
                time.sleep(max(0.001, POLL_RATE - (time.time() - t)))
        finally:
            self.socket.close()
            self.should_shutdown = False
            self.shutdown_event.set()

    def handle_request(self):
        try:
            data, address = self.socket.recvfrom(self.max_packet_size)
            print "processing: ", data
            if data == LAUNCHER_EXIT:
                self.should_shutdown = True
            elif int(data) == FIRE:
                # don't respond to requests
                self.launcher.fire()
            elif int(data) == PRIME:
                # don't respond to requests
                self.launcher.prime()
            else:
                self.launcher.send_command(int(data))

        except socket.error:
            return
Beispiel #2
0
class LauncherServer(object):
    address_family = socket.AF_INET
    socket_type = socket.SOCK_DGRAM
    max_packet_size = 1024

    def __init__(self, address=("localhost", 9999)):
        self.address = address
        self.shutdown_event = threading.Event()
        self.should_shutdown = False

        self.socket = socket.socket(self.address_family, self.socket_type)
        print "bound to: ", address
        self.socket.bind(self.address)
        self.address = self.socket.getsockname()
        self.launcher = USBMissileLauncher()
        self.last_status_time = 0

    def fileno(self):
        return self.socket.fileno()

    def serve(self, sleep=0.01):
        self.shutdown_event.clear()

        try:
            while not self.should_shutdown:
                t = time.time()
                if t - self.last_status_time > STATUS_INTERVAL:
                    # heartbeat
                    self.launcher.status()

                r, w, e = select.select([self], [], [], sleep)
                if self in r:
                    self.handle_request()

                # sleep
                time.sleep(max(0.001, POLL_RATE - (time.time() - t)))
        finally:
            self.socket.close()
            self.should_shutdown = False
            self.shutdown_event.set()

    def handle_request(self):
        try:
            data, address = self.socket.recvfrom(self.max_packet_size)
            print "processing: ", data
            if data == LAUNCHER_EXIT:
                self.should_shutdown = True
            elif int(data) == FIRE:
                # don't respond to requests
                self.launcher.fire()
            elif int(data) == PRIME:
                # don't respond to requests
                self.launcher.prime()
            else:
                self.launcher.send_command(int(data))

        except socket.error:
            return
Beispiel #3
0
                        next_targets.append((
                            fixed_rect,
                            0,
                            VELOCITY_DECAY*velocity+(1-VELOCITY_DECAY)*np.array(diff(c_last, c)),
                            karlness
                        ))
                else:
                    # draw_rects(vis, [rect], (0,0,255))
                    if misses < MAX_MISSES:
                        next_targets.append((rect, misses+1, np.zeros(2), 0))

            targets = next_targets
            if is_auto:
                if firing and not primed:
                    launcher.prime()
                    primed = True
                    locked_counter = 0
                else: # either not firing, or already primed
                    victims = [tgt for tgt in targets if tgt[3] >= KARLNESS_THRESHOLD]
                    last_cmd_sent = targeter.update_targets(victims)
                    if last_cmd_sent == STOP and victims:
                        locked_counter += 1
                    if locked_counter > 4 and firing and primed:
                        print "firing"
                        lolz = threading.Thread(target=lolz_thread, args=("pics/%d" % int(time.time()), cam))
                        lolz.start()
                        launcher.fire()
                        lolz.join()

                        primed = False
                        s_last, c_last = size_and_center(fixed_rect)

                        next_targets.append(
                            (fixed_rect, 0, VELOCITY_DECAY * velocity +
                             (1 - VELOCITY_DECAY) * np.array(diff(c_last, c)),
                             karlness))
                else:
                    # draw_rects(vis, [rect], (0,0,255))
                    if misses < MAX_MISSES:
                        next_targets.append((rect, misses + 1, np.zeros(2), 0))

            targets = next_targets
            if is_auto:
                if firing and not primed:
                    launcher.prime()
                    primed = True
                    locked_counter = 0
                else:  # either not firing, or already primed
                    victims = [
                        tgt for tgt in targets if tgt[3] >= KARLNESS_THRESHOLD
                    ]
                    last_cmd_sent = targeter.update_targets(victims)
                    if last_cmd_sent == STOP and victims:
                        locked_counter += 1
                    if locked_counter > 4 and firing and primed:
                        print "firing"
                        lolz = threading.Thread(target=lolz_thread,
                                                args=("pics/%d" %
                                                      int(time.time()), cam))
                        lolz.start()