from xmlrpc.server import SimpleXMLRPCServer from loggerModule import Logger import multiprocessing import logging logger = Logger(log_file="server_manager.log", logger_name="ServerManager") class ServerManagerRPC: def __init__(self): self.manager = ServerManager() def start_server(self, port): """서버 시작 요청""" return self.manager.start_server(port) def stop_server(self, port): """서버 종료 요청""" return self.manager.stop_server(port) def list_servers(self): """현재 실행 중인 서버 목록 반환""" return self.manager.list_servers() class ServerManager: def __init__(self): self.servers = {} # {포트 번호: 프로세스 객체} def start_server(self, port): if port in self.servers: logger.log(f"포트 {port}에서 이미 서버가 실행 중입니다.", level=logging.WARNING) return f"Server on port {port} already running." process = multiprocessing.Process(target=self._run_server, args=(port,), daemon=True) process.start() self.servers[port] = process logger.log(f"포트 {port}에서 서버가 시작되었습니다.") return f"Server started on port {port}." def stop_server(self, port): if port not in self.servers: logger.log(f"포트 {port}에서 실행 중인 서버가 없습니다.", level=logging.WARNING) return f"No server running on port {port}." process = self.servers.pop(port) process.terminate() process.join() logger.log(f"포트 {port}에서 서버가 종료되었습니다.") return f"Server stopped on port {port}." def _run_server(self, port): from rpc_server import start_rpc_server start_rpc_server(port) def list_servers(self): active_ports = list(self.servers.keys()) logger.log(f"실행 중인 서버 포트: {active_ports}") return active_ports def main(): # Server Manager RPC 시작 server = SimpleXMLRPCServer(("localhost", 8000), allow_none=True) server.register_instance(ServerManagerRPC()) logger.log("서버 매니저 RPC가 실행 중입니다. 포트: 8000") try: server.serve_forever() except KeyboardInterrupt: logger.log("Server Manager 종료 요청 수신.") if __name__ == "__main__": main()