$size) { # If the rsync path matches the path at the string on the variable $size # then lists the path and the total size on separated variables # using explode over the string saved on $size if ( preg_match("/$rsyncPath/i", $size) ) list( $path, $totalsize ) = explode( ";", $size ); } if($kbytes > 0) { $pct = round(( $kbytes / $totalsize ) * 100, 2); } else { $pct = "unavailable"; } #echo "Percent is $pct"; $pct = $pct > 100 ? 100 : $pct; return "$totalsize;$mbytes;$pct"; } function update_local_copies() { $last_updated = filemtime("modules/gamemanager/sizes.list"); $nowtime=time(); $diff = $nowtime - $last_updated; if( $diff < 86400) { #echo "Now $nowtime last $last_updated diff $diff
"; return 0; } echo "Updating local cache of rsync meta data files
"; $update_files = array('sizes.list', 'rsync.list', 'rsync_sites.list'); $update_urls = array('rsync.opengamepanel.org', 'dls.atl.webehostin.com'); $context = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); foreach($update_files as $file_chk) { #echo "Trying to update $file_chk
"; foreach($update_urls as $site) { #echo "Trying $file_chk from $site
"; if(!is_writable("modules/gamemanager/$file_chk")) { print_failure("modules/gamemanager/$file_chk is not writable...please make it writable by the webserver"); } if($tmp_content = file_get_contents("http://$site/sync_data/$file_chk", false, $context)) { if(!file_put_contents("modules/gamemanager/$file_chk",$tmp_content)){echo "Failed to write
";}; break; } } } if(is_writable('modules/gamemanager')) { $tmp = 'modules/gamemanager'; } elseif(is_writable('/tmp')) { $tmp = 'modules/gamemanager'; } else { return "-1"; } } require_once("includes/lib_remote.php"); require_once("modules/config_games/server_config_parser.php"); function exec_ogp_module() { //update_local_copies(); #Disabled until the rsync_sites.list file from master servers is corrected. global $db,$view,$settings; $home_id = isset($_REQUEST['home_id']) ? $_REQUEST['home_id'] : ""; $mod_id = isset($_REQUEST['mod_id']) ? $_REQUEST['mod_id'] : ""; $state = isset($_POST['state']) ? $_POST['state'] : ""; $update = isset($_GET['update']) ? $_GET['update'] : ""; $rsync_remote_sites = file("modules/gamemanager/rsync_sites.list"); #load offical rsync sites $rsync_local_sites = file("modules/gamemanager/rsync_sites_local.list"); #load user custom sites $settings['rsync_available'] = isset($settings['rsync_available']) ? $settings['rsync_available'] : "1"; if(is_array($rsync_local_sites) && $settings['rsync_available'] == "1") { $rsync_sites = array_merge($rsync_remote_sites, $rsync_local_sites); } elseif($settings['rsync_available'] == "2") { $rsync_sites = $rsync_remote_sites; } elseif( $settings['rsync_available'] == "3") { $rsync_sites = $rsync_local_sites; } $isAdmin = $db->isAdmin($_SESSION['user_id']); if ($isAdmin) { $home_info = $db->getGameHome($home_id); } else { $home_info = $db->getUserGameHome($_SESSION['user_id'],$home_id); } if ( $home_info === FALSE || preg_match("/u/",$home_info['access_rights']) != 1 ) { print_failure( get_lang("no_rights") ); echo create_back_button("gamemanager","game_monitor"); return; } $home_id = $home_info['home_id']; $remote = new OGPRemoteLibrary($home_info['agent_ip'],$home_info['agent_port'],$home_info['encryption_key'],$home_info['timeout']); $server_xml = read_server_config(SERVER_CONFIG_LOCATION."/".$home_info['home_cfg_file']); if( isset($server_xml->lgsl_query_name) ) { $lgslname = $server_xml->lgsl_query_name; if($lgslname == "quake3") { if($server_xml->game_name == "Quake 3") $lgslname = "q3"; } } elseif( isset($server_xml->gameq_query_name) ) { $lgslname = $server_xml->gameq_query_name; if($lgslname == "minecraft") { if($server_xml->game_name == "Bukkit") $lgslname = "bukkit"; elseif($server_xml->game_name == "Tekkit") $lgslname = "tekkit"; } } elseif( isset($server_xml->protocol) ) $lgslname = $server_xml->protocol; else $lgslname = $server_xml->mods->mod['key']; if( preg_match("/win32/", $server_xml->game_key) OR preg_match("/win64/", $server_xml->game_key) ) $os = "windows"; elseif( preg_match("/linux/", $server_xml->game_key) ) $os = "linux"; echo "

Update " . $home_info['home_name'] . "

"; $screenRunningForHome = $remote->is_screen_running(OGP_SCREEN_TYPE_HOME,$home_id); if ($screenRunningForHome === 1) { print_failure( get_lang("server_running_cant_update") ); return; }else if($screenRunningForHome === -1){ print_failure( get_lang("agent_offline") ); return; } $update_active = $remote->get_log(OGP_SCREEN_TYPE_UPDATE, // Note exec location should not be added here as the log is in root where rsync is executed. $home_id,clean_path($home_info['home_path']), $log_txt,30); if ($update_active === 0) { print_failure( get_lang("agent_offline") ); $view->refresh("{CURRENT_PAGE}", 5); return; } // Start update. elseif ($state == 'start' && $update_active != 1) { $precmd = $home_info['mods'][$mod_id]['precmd'] == "" ? ( $home_info['mods'][$mod_id]['def_precmd'] == "" ? $server_xml->pre_install : $home_info['mods'][$mod_id]['def_precmd'] ) : $home_info['mods'][$mod_id]['precmd']; $postcmd = $home_info['mods'][$mod_id]['postcmd'] == "" ? ( $home_info['mods'][$mod_id]['def_postcmd'] == "" ? $server_xml->post_install : $home_info['mods'][$mod_id]['def_precmd'] ) : $home_info['mods'][$mod_id]['postcmd']; $exec_folder_path = clean_path($home_info['home_path'] . "/" . $server_xml->exe_location ); $exec_path = clean_path($exec_folder_path . "/" . $server_xml->server_exec_name ); if( isset( $_REQUEST['master_server_home_id'] ) ) { $ms_home_id = $_REQUEST['master_server_home_id']; if ($db->getMasterServer($home_info['remote_server_id'], $home_info['home_cfg_id']) == $ms_home_id) { if ($ms_home_id !== $home_id) { $ms_info = $db->getGameHome($ms_home_id); print_success(get_lang_f("starting_copy_with_master_server_named",htmlentities($ms_info['home_name']))); $rsync = $remote->masterServerUpdate( $home_id,$home_info['home_path'],$ms_home_id,$ms_info['home_path'],$exec_folder_path,$exec_path,$precmd,$postcmd ); $master = "&master=true"; } else { print_failure(get_lang('cannot_update_from_own_self')); $view->refresh('?m=gamemanager&p=game_monitor', 2); return; } } else { $db->logger(get_lang_f('update_attempt_from_nonmaster_server', $_SESSION['users_login'], $home_id, $ms_home_id)); print_failure(get_lang('attempting_nonmaster_update')); $view->refresh('?m=gamemanager&p=game_monitor', 2); return; } } else { $url_id = (isset($_POST['url_id']) && (int)$_POST['url_id'] > 0 ? (int)$_POST['url_id'] -1 : null); if (!is_null($url_id) && array_key_exists($url_id, $rsync_sites)) { $urlArr = explode('|', $rsync_sites[$url_id]); $url = $urlArr[0] . "/ogp_game_installer/$lgslname/$os/"; } else { print_failure(get_lang('unknown_rsync_mirror')); $view->refresh('?m=gamemanager&p=game_monitor'); return; } print_success(get_lang_f("starting_sync_with", $url)); // Additional files to lock if(isset($server_xml->lock_files) && !empty($server_xml->lock_files)){ $lockFiles = trim($server_xml->lock_files); }else{ $lockFiles = ""; } $rsync = $remote->start_rsync_install($home_id, $home_info['home_path'], $url, $exec_folder_path, $exec_path, $precmd, $postcmd, $lockFiles); $master = ""; } if( $rsync === 0 ) { print_failure( get_lang("failed_to_start_rsync_update") ); return; } else if ( $rsync === 1 || $rsync === -1) { if($rsync === -1){ print_failure(get_lang("timed_out")); } print_success(get_lang("update_started")); echo "

". get_lang("refresh_rsync_status") ."

"; $view->refresh("?m=gamemanager&p=rsync_install&update=refresh&home_id=$home_id&mod_id=$mod_id$master",5); return; } } elseif($update_active == 1) { echo "

\n"; if ( isset( $_POST['stop_update_x'] ) ) { $remote->stop_update($home_id); print_success("Update stopped."); $view->refresh("?m=gamemanager&p=rsync_install&update=refresh&home_id=$home_id&mod_id=$mod_id", 2); return; } $update_complete = false; echo "
". get_lang("stop_update") ."
"; if (empty($log_txt)) $log_txt = not_available; if(!isset($_GET['master'])) { $kbytes = $remote->rsync_progress($home_info['home_path']); list($totalsize,$mbytes,$pct) = explode(";",do_progress($kbytes,$lgslname."/".$os)); $totalmbytes = round($totalsize / 1024, 2); echo '

'. get_lang("update_in_progress") ." ${mbytes}MB/${totalmbytes}MB

"; $bar = ''; for( $i = 1; $i <= $pct; $i++ ) { $bar .= ''; } echo "$bar $pct%

"; } else { echo '

'. get_lang("update_in_progress") .'

'; } echo "
".$log_txt."
\n". "

". get_lang("refresh_rsync_status") ."

"; $view->refresh("?m=gamemanager&p=rsync_install&update=refresh&home_id=$home_id&mod_id=$mod_id",5); return; } elseif($update != "update") { $view->refresh("{CURRENT_PAGE}", 60); print_success(get_lang("update_completed") ); echo "
<< ". get_lang("back") ."
"; echo "
".$log_txt."
\n"; echo "
<< ". get_lang("back") ."
"; $update_complete = true; } else { #echo "LGSL or GameQ query name is $server_xml->lgsl_query_name$server_xml->gameq_query_name"; $sync_list = @file("modules/gamemanager/rsync.list", FILE_IGNORE_NEW_LINES); if(!is_array($sync_list)) { if(!is_file("modules/gamemanager/rsync.list")) { print_failure("Trouble accessing http://www.opengamepanel.org/rsync.list
". "Make sure allow_fopen_url is set to \"On\" in your php.ini and opengamepanel.org is online
". "In the mean time, you can get a local copy of the file by running wget http://www.opengamepanel.org/sync_data/rsync.list -O /path/to/ogpweb/modules/gamemanager/rsync.list"); return; } # print_failure("Error loading rsync.list"); # return; $sync_list = @file("modules/gamemanager/rsync.list", FILE_IGNORE_NEW_LINES); if(!is_array($sync_list)) { print_failure("Failed to open local copy of rsync.list in modules/gamemanager/rsync.list"); return; } } $master_server_home_id = $db->getMasterServer( $home_info['remote_server_id'], $home_info['home_cfg_id'] ); if ( in_array($lgslname, $sync_list) ) { echo "Game type supported

To add your own rsync site, create modules/gamemanager/rsync_sites_local.list and put a server name on each line.


Game name:" . $home_info['game_name'] . "
Directory:" . $home_info['home_path'] . "
Remoteserver: " . $home_info['remote_server_name'] . " (" . $home_info['agent_ip'] . ":" . $home_info['agent_port'] . ")
Rsync Server: ".create_drop_box_from_array_rsync($rsync_sites,"url_id")."
"; if( $master_server_home_id != FALSE AND $master_server_home_id != $home_id ) { echo "". get_lang("update_from_local_master_server") .""; } echo "

"; } elseif($master_server_home_id != FALSE AND $master_server_home_id != $home_id) { $ms_home_info = $db->getGameHome($master_server_home_id); echo "

Master server update available


". "". "
Game name:" . $home_info['game_name'] . "
Master Server Name:" . $ms_home_info['home_name'] . "
Master Server Directory:" . $ms_home_info['home_path'] . "
Local Directory:" . $home_info['home_path'] . "

"; } else { print_failure("This game type [ $lgslname ] is not yet supported with rsync install"); } } } ?>