@@ -166,6 +166,59 @@ def __stop_user_interfaces(self):
166166 Logger .info (f"User interface process { ui_name } stopped successfully." )
167167
168168
169+ def __start_server (self , server_name : str ):
170+ """
171+ Starts the specified server.
172+ :param server_name: Name of the server to start
173+ """
174+ Logger .info (f"Initializing server { server_name } ..." )
175+ try :
176+ server_type = self ._srv_config .get (f"{ server_name } .type" )
177+ server_path = self ._srv_config .get (f"{ server_name } .path" )
178+
179+ Server = McServersModules [server_type ]
180+ bus_data = self .__bus_dispatcher .get_bus_data (server_name )
181+ ram = self ._srv_config .get (f"{ server_name } .ram" , default = 1024 , set_if_not_found = True )
182+ mc_version = Version .from_string (self ._srv_config .get (f"{ server_name } .mc_version" ))
183+ def __start_mc_server ():
184+ srv = Server (server_name , server_path , ram , mc_version , bus_data )
185+ srv .start ()
186+ p = mp .Process (
187+ target = __start_mc_server ,
188+ name = f"Server_{ server_name } " ,
189+ daemon = True
190+ )
191+ Logger .info (f"Starting Minecraft server { server_name } of type { server_type } at { server_path } with RAM { ram } MB..." )
192+ p .start () # Start the process
193+ self .__mc_servers [server_name ] = p # Store the process
194+ except Exception as e :
195+ Logger .error (f"Failed to init server { server_name } : { e } " )
196+ Logger .debug (traceback .format_exc ())
197+
198+ def __stop_server (self , server_name : str ):
199+ srv_process = self .__mc_servers [server_name ]
200+ if srv_process .is_alive ():
201+ Logger .info (f"Stopping Minecraft server { server_name } with PID { srv_process .pid } ..." )
202+ self .__bus .trigger (
203+ Events ['SERVER.STOP' ],
204+ server_name = server_name ,
205+ timeout = 30 # Wait for 30 seconds for the server to stop
206+ )
207+ srv_process .join (timeout = 30 )
208+ if srv_process .is_alive ():
209+ Logger .warning (f"Minecraft server { server_name } did not stop gracefully. Terminating..." )
210+ srv_process .terminate ()
211+ srv_process .join ()
212+ Logger .info (f"Minecraft server { server_name } stopped successfully." )
213+
214+ def __restart_server (self , server_name : str ):
215+ """
216+ Restarts the specified server.
217+ :param server_name: Name of the server to restart
218+ """
219+ Logger .info (f"Restarting server { server_name } ..." )
220+ self .__stop_server (server_name )
221+ self .__start_server (server_name )
169222
170223 def __start_mc_servers (self ):
171224 """
@@ -175,29 +228,7 @@ def __start_mc_servers(self):
175228 Logger .info ("Initializing Minecraft servers..." )
176229 for server_name , srv_info in self ._srv_config .items ():
177230 if srv_info .get ("autostart" , False ):
178- Logger .info (f"Initializing server { server_name } ..." )
179- try :
180- server_type = self ._srv_config .get (f"{ server_name } .type" )
181- server_path = self ._srv_config .get (f"{ server_name } .path" )
182-
183- Server = McServersModules [server_type ]
184- bus_data = self .__bus_dispatcher .get_bus_data (server_name )
185- ram = self ._srv_config .get (f"{ server_name } .ram" , default = 1024 , set_if_not_found = True )
186- mc_version = Version .from_string (self ._srv_config .get (f"{ server_name } .mc_version" ))
187- def __start_mc_server ():
188- srv = Server (server_name , server_path , ram , mc_version , bus_data )
189- srv .start ()
190- p = mp .Process (
191- target = __start_mc_server ,
192- name = f"Server_{ server_name } " ,
193- daemon = True
194- )
195- Logger .info (f"Starting Minecraft server { server_name } of type { server_type } at { server_path } with RAM { ram } MB..." )
196- p .start () # Start the process
197- self .__mc_servers [server_name ] = p # Store the process
198- except Exception as e :
199- Logger .error (f"Failed to init server { server_name } : { e } " )
200- Logger .debug (traceback .format_exc ())
231+ self .__start_server (server_name )
201232 else :
202233 Logger .info (f"Server { server_name } is not set to autostart. Skipping." )
203234
@@ -207,15 +238,8 @@ def __stop_mc_servers(self):
207238 This method is called when the core is stopped.
208239 """
209240 Logger .info ("Stopping Minecraft servers..." )
210- for srv_name , srv_process in self .__mc_servers .items ():
211- if srv_process .is_alive ():
212- Logger .info (f"Stopping Minecraft server { srv_name } with PID { srv_process .pid } ..." )
213- srv_process .join (timeout = 30 )
214- if srv_process .is_alive ():
215- Logger .warning (f"Minecraft server { srv_name } did not stop gracefully. Terminating..." )
216- srv_process .terminate ()
217- srv_process .join ()
218- Logger .info (f"Minecraft server { srv_name } stopped successfully." )
241+ for srv_name in self .__mc_servers .keys ():
242+ self .__stop_server (srv_name )
219243
220244
221245
@@ -317,24 +341,7 @@ def on_server_restart(self, timestamp : datetime, server_name: str):
317341 Logger .warning (f"Server { server_name } is not running. Cannot restart." )
318342 return
319343 Logger .info (f"Restarting server { server_name } ..." )
320- self .__bus .trigger ( # Will wait for the server to stop
321- Events ['SERVER.STOP' ],
322- server_name = server_name
323- )
324- if self .__get_server_status (server_name ):
325- Logger .error (f"Server { server_name } did not stop properly. Cannot restart." )
326- return
327- Logger .info (f"Server { server_name } stopped successfully. Starting it again..." )
328- srv_info = self ._srv_config [server_name ]
329- server_type = srv_info ['type' ]
330- server_path = srv_info ['path' ]
331- if not self .__is_server_path_valid (server_path ):
332- Logger .error (f"Server path { server_path } is not valid. Cannot restart server { server_name } ." )
333- return
334- if server_type not in McServersModules :
335- Logger .error (f"Server type { server_type } is not recognized. Cannot restart server { server_name } ." )
336- return
337- self .__start_server (server_name , server_type , server_path )
344+ self .__restart_server (server_name )
338345
339346 def on_server_create (self ,
340347 timestamp : datetime ,
@@ -395,6 +402,7 @@ def on_server_create(self,
395402 )
396403 except Exception as e :
397404 Logger .error (f"Failed to install server { server_name } of type { server_type } : { e } " )
405+ Logger .debug (traceback .format_exc ())
398406 return
399407 else :
400408 self ._srv_config .set (server_name , {
0 commit comments