Преглед изворни кода

Rust Changes and Remote Lib Changes for Agent

own3mall пре 9 година
родитељ
комит
6a792beb83

+ 5 - 5
includes/lib_remote.php

@@ -523,10 +523,10 @@ class OGPRemoteLibrary
 	/// \return -2 In other errors.
 	/// \todo Other return values?
 	public function universal_start($home_id, $game_home, $game_binary, $run_dir, $startup_cmd,
-		$server_port, $server_ip, $cpu, $nice)
+		$server_port, $server_ip, $cpu, $nice, $preStart = "", $envVars = "")
 	{
 		$params_array = $this->encrypt_params($home_id, $game_home, $game_binary,
-			$run_dir, $startup_cmd, $server_port, $server_ip, $cpu, $nice);
+			$run_dir, $startup_cmd, $server_port, $server_ip, $cpu, $nice, $preStart, $envVars);
 		$this->add_enc_chk($params_array);
 		$request = xmlrpc_encode_request("universal_start", $params_array);
 		$response = $this->sendRequest($request);
@@ -655,11 +655,11 @@ class OGPRemoteLibrary
 
 	public function remote_restart_server($home_id,$server_ip,$server_port, 
 			$control_protocol,$control_password,$control_type,
-			$home_path,$server_exe,$run_dir,$cmd,$cpu,$nice)
+			$home_path,$server_exe,$run_dir,$cmd,$cpu,$nice,$preStart = "", $envVars = "")
 	{
 		$params_array = $this->encrypt_params($home_id,$server_ip,$server_port,
 			$control_protocol,$control_password,$control_type,
-			$home_path,$server_exe,$run_dir,$cmd,$cpu,$nice);
+			$home_path,$server_exe,$run_dir,$cmd,$cpu,$nice,$preStart,$envVars);
 		$this->add_enc_chk($params_array);
 		$request = xmlrpc_encode_request("restart_server", $params_array);
 
@@ -1037,4 +1037,4 @@ class OGPRemoteLibrary
 		return base64_decode($response);
 	}
 }
-?>
+?>

+ 2 - 0
modules/config_games/schema_server_config.xml

@@ -278,6 +278,8 @@
       <xs:element name="player_commands" type="player_commands_type" minOccurs="0" />
       <xs:element name="pre_install" type="nonEmptyString" minOccurs="0" />
       <xs:element name="post_install" type="nonEmptyString" minOccurs="0" />
+      <xs:element name="pre_start" type="nonEmptyString" minOccurs="0" />
+      <xs:element name="environment_variables" type="nonEmptyString" minOccurs="0" />
     </xs:sequence>
   </xs:complexType>
 </xs:schema>

+ 4 - 7
modules/config_games/server_configs/rust_linux64.xml

@@ -4,7 +4,7 @@
   <gameq_query_name>rust</gameq_query_name>
   <installer>steamcmd</installer>
   <game_name>Rust</game_name>
-  <server_exec_name>RustDedicatedOGP.sh</server_exec_name>
+  <server_exec_name>RustDedicated</server_exec_name>
   <query_port type="add">1</query_port>
   <cli_template>-batchmode %IP% %PORT% %PLAYERS% %HOSTNAME% %IDENTITY% %WORLD_SIZE% %SEED% %SALT% %TICKRATE% %SAVEINTERNAL% %SECURE% %RCONWEB% +rcon.ip "0.0.0.0" %QUERY_PORT% %CONTROL_PASSWORD% -logfile RustDedicated_Data/output_log.txt</cli_template>
   <cli_params>
@@ -78,10 +78,7 @@
       <desc>If set to enabled, use websocket rcon. If set to disabled, use legacy source engine rcon.</desc>
     </param>
   </server_params>
-  <post_install>
-echo &apos;#!/bin/bash
-export LD_LIBRARY_PATH="./RustDedicated_Data/Plugins/x86_64"
-./RustDedicated $@&apos; &gt; RustDedicatedOGP.sh
-chmod +x RustDedicatedOGP.sh
-   </post_install>
+  <environment_variables>
+	export LD_LIBRARY_PATH="{OGP_HOME_DIR}/RustDedicated_Data/Plugins/x86_64"
+  </environment_variables>
 </game_config>

+ 36 - 2
modules/gamemanager/home_handling_functions.php

@@ -275,11 +275,28 @@ function exec_operation( $action, $home_id, $mod_id, $ip, $port )
 				require_once('protocol/lgsl/lgsl_protocol.php');
 			require_once("modules/gamemanager/cfg_text_replace.php");
 		}
+		
+		// Run pre-start commands
+		if(isset($server_xml->pre_start) && !empty($server_xml->pre_start)){
+			$preStart = trim($server_xml->pre_start);
+		}else{
+			$preStart = "";
+		}
+			
+		// Environment variables
+		if(isset($server_xml->environment_variables) && !empty($server_xml->environment_variables)){
+			$envVars = trim($server_xml->environment_variables);
+		}else{
+			$envVars = "";
+		}
+		
 		$remote_retval = $remote->remote_restart_server($home_info['home_id'],$ip,$port,$server_xml->control_protocol,
 														$home_info['control_password'],$server_xml->control_protocol_type,$home_info['home_path'],
 														$server_xml->server_exec_name,$server_xml->exe_location,$start_cmd,
 														$home_info['mods'][$mod_id]['cpu_affinity'],
-														$home_info['mods'][$mod_id]['nice']);
+														$home_info['mods'][$mod_id]['nice'],
+														$preStart,
+														$envVars);
 		$db->logger(get_lang_f('server_restarted', $home_info['home_name']) . "($ip:$port)");
 		if ( $remote_retval === -1 )
 			return FALSE;
@@ -306,12 +323,29 @@ function exec_operation( $action, $home_id, $mod_id, $ip, $port )
 				require_once('protocol/lgsl/lgsl_protocol.php');
 			require_once("modules/gamemanager/cfg_text_replace.php");
 		}
+		
+		// Run pre-start commands
+		if(isset($server_xml->pre_start) && !empty($server_xml->pre_start)){
+			$preStart = trim($server_xml->pre_start);
+		}else{
+			$preStart = "";
+		}
+		
+		// Environment variables
+		if(isset($server_xml->environment_variables) && !empty($server_xml->environment_variables)){
+			$envVars = trim($server_xml->environment_variables);
+		}else{
+			$envVars = "";
+		}
+		
 		$start_retval = $remote->universal_start($home_info['home_id'],
 												 $home_info['home_path'],
 												 $server_xml->server_exec_name, $server_xml->exe_location,
 												 $start_cmd, $port, $ip,
 												 $home_info['mods'][$mod_id]['cpu_affinity'],
-												 $home_info['mods'][$mod_id]['nice']);
+												 $home_info['mods'][$mod_id]['nice'],
+												 $preStart,
+												 $envVars);
 		$db->logger(get_lang('server_started') . " (".$home_info['home_name']." $ip:$port)");
 		if( $start_retval == AGENT_ERROR_NOT_EXECUTABLE or $start_retval <= 0)
 			return FALSE;

+ 18 - 2
modules/gamemanager/mini_start.php

@@ -519,12 +519,28 @@ elseif($server_home['home_id'] == $_POST['home_id'])
 	if($server_xml->replace_texts OR $server_xml->custom_fields)
 		require_once("modules/gamemanager/cfg_text_replace.php");
 	
+	// Run pre-start commands
+	if(isset($server_xml->pre_start) && !empty($server_xml->pre_start)){
+		$preStart = trim($server_xml->pre_start);
+	}else{
+		$preStart = "";
+	}
+		
+	// Environment variables
+	if(isset($server_xml->environment_variables) && !empty($server_xml->environment_variables)){
+		$envVars = trim($server_xml->environment_variables);
+	}else{
+		$envVars = "";
+	}
+	
 	$start_retval = $remote->universal_start($server_home['home_id'],
 		$server_home['home_path'],
 		$server_xml->server_exec_name, $server_xml->exe_location,
 		$start_cmd, $port, $ip,
 		$server_home['cpu_affinity'],
-		$server_home['nice']);
+		$server_home['nice'],
+		$preStart,
+		$envVars);
 	$db->logger(  server_started  . " (".$server_home['home_name']." $ip:$port)" );
 	if ( $start_retval == AGENT_ERROR_NOT_EXECUTABLE )
 	{
@@ -616,4 +632,4 @@ elseif($server_home['home_id'] == $_POST['home_id'])
 	$view->refresh("?m=gamemanager&amp;p=start&amp;refresh&amp;home_id=".$server_home['home_id']."&amp;ip=".$ip."&amp;port=".$port."&amp;mod_id=".$server_home['mod_id'],3);
 	return;
 }
-?>
+?>

+ 15 - 1
modules/gamemanager/restart_server.php

@@ -367,11 +367,25 @@ function exec_ogp_module() {
 				$extra_default = $home_info['mods'][$mod_id]['extra_params'];
 
 			$start_cmd .= " ".$extra_default;
+			
+			// Run pre-start commands
+			if(isset($server_xml->pre_start) && !empty($server_xml->pre_start)){
+				$preStart = trim($server_xml->pre_start);
+			}else{
+				$preStart = "";
+			}
+				
+			// Environment variables
+			if(isset($server_xml->environment_variables) && !empty($server_xml->environment_variables)){
+				$envVars = trim($server_xml->environment_variables);
+			}else{
+				$envVars = "";
+			}			
 						
 			$remote_retval = $remote->remote_restart_server($home_id,$ip,$port,$server_xml->control_protocol,
 															$home_info['control_password'],$control_type,$home_info['home_path'],
 															$server_xml->server_exec_name,$run_dir,$start_cmd,
-															$home_info['cpu_affinity'],$home_info['nice']);
+															$home_info['cpu_affinity'],$home_info['nice'],$preStart,$envVars);
 			
 			$db->logger(get_lang_f('server_restarted', $home_info['home_name']) . "($ip:$port)");