コード例 #1
0
class UDPServerThread(threading.Thread):
    server = None

    def run(self):
        addr = ("", PORT)
        print("UDP server listening on", addr)
        self.server = UDPServer(addr, Handler)
        self.server.serve_forever()

    def shutdown(self):
        self.server.shutdown()
コード例 #2
0
class PipelineStatusListener(object):
    """Creates a server to listen for progress updates sent out by the pipeline
    callbacks. Note that this should be used as a context manager to start the
    server in a background thread and close it automatically::

        with PipelineStatusListener(callback):
            # do stuff here
            pass

    Parameters
    ----------
    callback : callable
        Callback to execute upon receiving a message. This should take a single
        dict argument.
    pipeline_id : str or None
        Pipeline ID to filter on or None to listen to all.
    port : int
        Port number to listen on

    Notes
    -----
    Start the server in a separate thread and stop it with the ``shutdown``
    method.

    """
    def __init__(self, callback, pipeline_id=None, port=50001):
        class Handler(DatagramRequestHandler):
            def handle(self):
                data = self.request[0]
                record = logging.makeLogRecord(pickle.loads(data[4:]))

                if pipeline_id is not None:
                    if record.name != pipeline_id:
                        return

                msg = json.loads(record.msg)
                callback(msg)

        self._handler_class = Handler
        self.host = '127.0.0.1'
        self.port = port
        self.server = None
        self._server_thread = None  # type: Thread

    def __enter__(self):
        self.server = UDPServer(('127.0.0.1', self.port), self._handler_class)
        self._server_thread = Thread(target=self.server.serve_forever)
        self._server_thread.start()

    def __exit__(self, type, value, traceback):
        self.server.shutdown()
コード例 #3
0
ファイル: manager.py プロジェクト: wi13b071/osd_repo
class UDPManager(object):
    """This class starts and stops the sending and receiving threads.
    """

    def __init__(self, host_ip):
        """Initializes the attributes

        :param host_ip: The ip of the network interface where this service is running.
        :return: None
        """

        # initializes the Sender Thread
        self._sending_thread = UDPSenderThread()

        # initializes the udpserver with our ThreadedUDPMulticastRequestHandler

        # as arguments for the constructor of the RequestHandler we have to pass
        # the update method of the Observable Implementation and the ip-address of the network interface
        # where this service is running.
        self.udp_server = UDPServer(MULTICAST_GROUP, lambda *args, **keys: ThreadedUDPMulticastRequestHandler(
            UDPObservableSingleton.instance.observable.update_received_list,
            host_ip, self._sending_thread.expand_timeout, *args, **keys))

        self._receiver_thread = Thread(target=self.udp_server.serve_forever, daemon=True)

        self._logger = Log.get_logger(self.__class__.__name__)

    def start(self):
        if not self._sending_thread.is_alive():
            self._logger.info("Started SenderThread.")
            self._sending_thread.start()

        if not self._receiver_thread.is_alive():
            self._logger.info("Started UDPServer.")
            self._receiver_thread.start()

    def stop(self):
        if self._sending_thread.is_alive():
            self._logger.info("Stopping SenderThread...")
            self._sending_thread.stop()

        if self._receiver_thread.is_alive():
            self._logger.info("Stopping UDPServer...")
            self.udp_server.shutdown()
            self.udp_server.server_close()
コード例 #4
0
ファイル: main.py プロジェクト: AmineAfia/battleship
def main():
    logging.basicConfig(
        format="%(asctime)s - SERVER - %(levelname)s - %(message)s",
        level=logging.DEBUG)

    # parse host and port args
    parser = argparse.ArgumentParser(
        description="battleship++ dedicated server")
    parser.add_argument('host')
    parser.add_argument('port', type=int)
    args = parser.parse_args()

    # start UPD discovery service
    udpdiscovery_server = UDPServer(("", 12345), UDPDiscoveryHandler)
    udpdiscovery_server_thread = threading.Thread(
        target=udpdiscovery_server.serve_forever)
    udpdiscovery_server_thread.daemon = True
    udpdiscovery_server_thread.start()
    logging.debug("UDP discovery server running in thread: " +
                  udpdiscovery_server_thread.name)

    server = TCPServer((args.host, args.port), RequestHandler)
    logging.info("Listening on {}:{}".format(args.host, args.port))

    server_thread = threading.Thread(target=server.serve_forever)
    server_thread.daemon = True
    server_thread.start()
    logging.debug("Server loop running in thread: " + server_thread.name)

    # block until keyboard interrupt or system exit
    try:
        server_thread.join()
        udpdiscovery_server_thread.join()
    except (KeyboardInterrupt, SystemExit) as e:
        logging.debug(repr(e))

    # gracefully kill the server
    logging.info("Server shutting down...")
    server.shutdown()
    server.server_close()
    udpdiscovery_server.shutdown()
    udpdiscovery_server.server_close()
    logging.info("Bye!")
コード例 #5
0
ファイル: main.py プロジェクト: ne0h/battleship
def main():
    logging.basicConfig(format="%(asctime)s - SERVER - %(levelname)s - %(message)s", level=logging.DEBUG)

    # parse host and port args
    parser = argparse.ArgumentParser(description="battleship++ dedicated server")
    parser.add_argument('host')
    parser.add_argument('port', type=int)
    args = parser.parse_args()

    # start UPD discovery service
    udpdiscovery_server = UDPServer(("", 12345), UDPDiscoveryHandler)
    udpdiscovery_server_thread = threading.Thread(target=udpdiscovery_server.serve_forever)
    udpdiscovery_server_thread.daemon = True
    udpdiscovery_server_thread.start()
    logging.debug("UDP discovery server running in thread: " + udpdiscovery_server_thread.name)

    server = TCPServer((args.host, args.port), RequestHandler)
    logging.info("Listening on {}:{}".format(args.host, args.port))

    server_thread = threading.Thread(target=server.serve_forever)
    server_thread.daemon = True
    server_thread.start()
    logging.debug("Server loop running in thread: " + server_thread.name)

    # block until keyboard interrupt or system exit
    try:
        server_thread.join()
        udpdiscovery_server_thread.join()
    except (KeyboardInterrupt, SystemExit) as e:
        logging.debug(repr(e))

    # gracefully kill the server
    logging.info("Server shutting down...")
    server.shutdown()
    server.server_close()
    udpdiscovery_server.shutdown()
    udpdiscovery_server.server_close()
    logging.info("Bye!")
コード例 #6
0
class IPComms(Comms):
    def __init__(
        self,
        *,
        queue: Queue,
        server_host: str = HOSTNAME,
        server_port: int = PORT,
        client_host: str = HOSTNAME,
        client_port: int = PORT,
        await_response=False,
    ):
        super().__init__(queue=queue)
        UDPHandler.queue = self.queue
        self.server_address = (server_host, server_port)
        self.server = UDPServer(self.server_address, UDPHandler)
        self.client_address = (client_host, client_port)
        self.await_response = await_response

    def read_telemetry_forever(self):
        self.server.serve_forever()

    def stop(self):
        self.server.shutdown()
        self.server.server_close()

    # XXX
    def send_packet(self, packet: bytes):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            sock.sendto(packet, self.client_address)
            print(f"Sent packet: {packet}")
            if self.await_response:
                received_data = str(sock.recv(1024), "utf-8")
                print(f"Received: {received_data}")
        finally:
            sock.close()