Exemplo n.º 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
Exemplo n.º 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
Exemplo n.º 3
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
                        locked_counter = 0

                # draw_command(vis, last_cmd_sent)
            # print "targets: ", len(targets)

            dt = clock() - t
            # WARNING: DO NOT RE ENABLE
            # with the_lock:
            #     if dt*1000 > 30:
            #         print "long frame!"
            #         print "time: ", dt*1000 
            draw_str(vis, (20, 20), 'time: %.1f ms' % (dt*1000))
Exemplo n.º 4
0
                    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
                        locked_counter = 0

                # draw_command(vis, last_cmd_sent)
            # print "targets: ", len(targets)

            dt = clock() - t
            # WARNING: DO NOT RE ENABLE
            # with the_lock:
            #     if dt*1000 > 30:
            #         print "long frame!"
            #         print "time: ", dt*1000
            draw_str(vis, (20, 20), 'time: %.1f ms' % (dt * 1000))