def __init__(self, args, comm=None, rank=0, size=0, backend="MPI"): self.args = args self.size = size self.rank = rank self.backend = backend if backend == "MPI": from mpi4py import MPI self.com_manager = MpiCommunicationManager(comm, rank, size, node_type="server") elif backend == "MQTT": HOST = "81.71.1.31" # HOST = "broker.emqx.io" PORT = 1883 self.com_manager = MqttCommManager(HOST, PORT, client_id=rank, client_num=size - 1) else: self.com_manager = MpiCommunicationManager(comm, rank, size, node_type="server") self.com_manager.add_observer(self) self.message_handler_dict = dict()
class ServerManager(Observer): def __init__(self, args, comm=None, rank=0, size=0, backend="MPI"): self.args = args self.size = size self.rank = rank if backend == "MPI": self.com_manager = MpiCommunicationManager(comm, rank, size, node_type="server") elif backend == "MQTT": HOST = "81.71.1.31" # HOST = "broker.emqx.io" PORT = 1883 self.com_manager = MqttCommManager(HOST, PORT, client_id=rank, client_num=size - 1) else: self.com_manager = MpiCommunicationManager(comm, rank, size, node_type="server") self.com_manager.add_observer(self) self.message_handler_dict = dict() def run(self): self.register_message_receive_handlers() self.com_manager.handle_receive_message() def get_sender_id(self): return self.rank def receive_message(self, msg_type, msg_params) -> None: # logging.info("receive_message. rank_id = %d, msg_type = %s. msg_params = %s" % ( # self.rank, str(msg_type), str(msg_params.get_content()))) handler_callback_func = self.message_handler_dict[msg_type] handler_callback_func(msg_params) def send_message(self, message): self.com_manager.send_message(message) @abstractmethod def register_message_receive_handlers(self) -> None: pass def register_message_receive_handler(self, msg_type, handler_callback_func): self.message_handler_dict[msg_type] = handler_callback_func def finish(self): logging.info("__finish server") self.com_manager.stop_receive_message() logging.info("sys.exit(0)") MPI.Finalize() MPI.COMM_WORLD.Abort() sys.exit()
class ClientManager(Observer): def __init__(self, args, comm=None, rank=0, size=0, backend="MPI"): self.args = args self.size = size self.rank = rank if backend == "MPI": self.com_manager = MpiCommunicationManager(comm, rank, size, node_type="client") elif backend == "MQTT": HOST = "81.71.1.31" # HOST = "broker.emqx.io" PORT = 1883 self.com_manager = MqttCommManager(HOST, PORT, client_id=rank, client_num=size-1) else: self.com_manager = MpiCommunicationManager(comm, rank, size, node_type="client") self.com_manager.add_observer(self) self.message_handler_dict = dict() def run(self): self.register_message_receive_handlers() self.com_manager.handle_receive_message() def get_sender_id(self): return self.rank def receive_message(self, msg_type, msg_params) -> None: # logging.info("receive_message. rank_id = %d, msg_type = %s. msg_params = %s" % ( # self.rank, str(msg_type), str(msg_params.get_content()))) handler_callback_func = self.message_handler_dict[msg_type] handler_callback_func(msg_params) def send_message(self, message): msg = Message() msg.add(Message.MSG_ARG_KEY_TYPE, message.get_type()) msg.add(Message.MSG_ARG_KEY_SENDER, message.get_sender_id()) msg.add(Message.MSG_ARG_KEY_RECEIVER, message.get_receiver_id()) for key, value in message.get_params().items(): # logging.info("%s == %s" % (key, value)) msg.add(key, value) self.com_manager.send_message(msg) @abstractmethod def register_message_receive_handlers(self) -> None: pass def register_message_receive_handler(self, msg_type, handler_callback_func): self.message_handler_dict[msg_type] = handler_callback_func def finish(self): logging.info("#######finished###########") self.com_manager.stop_receive_message() logging.info("sys.exit(0)") sys.exit()