Пример #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
Пример #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