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
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
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))
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))