Esempio n. 1
0
 public function ShowAction()
 {
     $cmd = send_command('<show_state what="jobs,job_params,job_commands,tasks,task_queue,job_chains,orders,remote_schedulers,schedules"/>', $host, $port);
     if ($cmd == '') {
         FocusAlert($spooler, 1, 'UNREACHABLE', 'Le Serveur ne r�pond plus !');
         PrintMessage("Pas de reponse !", 1);
         // ERROR !
         // on update l'heure pour ne pas qu'il soit pris par un autre script et on le verrouille
         $qry = 'update state_schedulers set UPDATED=now(),LOCK=0,STATE="unreachable" where id=' . $spooler_id;
         $res = $data->sql->query($qry);
         if ($mode == 'IMAGE') {
             header("Content-type: image/gif");
             $image = "../images/error.png";
             readfile($image);
         }
         exit;
     }
 }
Esempio n. 2
0
 /**
  * Функция, выполняющаяся при запуске cron
  */
 public function index()
 {
     $start_microtime = microtime(true);
     $log_data['user_name'] = 'System (cron)';
     // Получение данных о времени некоторых операций cron
     if (file_exists(APPPATH . 'cache/cron_time.json')) {
         $cron_time = json_decode(file_get_contents(APPPATH . 'cache/cron_time.json'), true);
     } else {
         $cron_time = array('stats' => 0);
     }
     $this->_cmd_output('Cron started');
     // Получение списка выделенных серверов
     $this->dedicated_servers->get_ds_list();
     foreach ($this->dedicated_servers->ds_list as $ds) {
         $this->_cmd_output("-Dedicated Server #" . $ds['id']);
         // Массив с id игровых серверов на машине
         $tasks_servers_id = array();
         // Получение списка серверов для этого DS
         $this->servers->select_fields('id');
         $this->servers->get_servers_list(false, false, array('enabled' => '1', 'ds_id' => $ds['id']));
         $this->control->set_data(array('os' => $ds['os'], 'path' => $ds['script_path']));
         $this->control->set_driver($ds['control_protocol']);
         try {
             // Соединение с машиной
             $this->control->connect($ds['control_ip'], $ds['control_port']);
             $this->control->auth($ds['control_login'], $ds['control_password']);
         } catch (Exception $e) {
             $this->_cmd_output('--' . $e->getMessage());
             continue;
         }
         // Задания
         foreach ($this->servers->servers_list as &$server) {
             $tasks_servers_id[] = $server['id'];
         }
         $this->_tasks($tasks_servers_id);
         foreach ($this->servers->servers_list as &$server) {
             $server_id =& $server['id'];
             // Получение данных сервера
             $this->_get_server_data($server_id);
             /*==================================================*/
             /*     Установка сервера					        */
             /*==================================================*/
             if ($this->servers_data[$server_id]['installed'] == '0') {
                 // Сервер не установлен
                 $this->_install_server($server_id);
             }
             /*==================================================*/
             /*     Перезапуск сервера в случае падения          */
             /*==================================================*/
             $this->servers->get_server_settings($server_id);
             /* В настройках указано, что сервер перезапускать не нужно */
             if ($this->servers->server_settings['SERVER_AUTOSTART']) {
                 // Проверка статуса сервера
                 $status = $this->servers->server_status($this->servers_data[$server_id]['server_ip'], $this->servers_data[$server_id]['query_port'], $this->servers_data[$server_id]['engine'], $this->servers_data[$server_id]['engine_version']);
                 /* Повторная проверка, контрольная.
                  * Бывали случаи, что сервер перезагружался, даже если нормально работал */
                 if (!$status) {
                     sleep(3);
                     $status = $this->servers->server_status($this->servers_data[$server_id]['server_ip'], $this->servers_data[$server_id]['query_port'], $this->servers_data[$server_id]['engine'], $this->servers_data[$server_id]['engine_version']);
                 }
                 if (!$status) {
                     /* Смотрим данные предыдущих проверок, если сервер был в оффе, то запускаем его */
                     /* Получение данных проверки крона из логов */
                     $where = array('date >=' => now() - 780, 'type' => 'cron_check', 'command' => 'server_status', 'server_id' => $server_id, 'log_data' => 'Server is down');
                     $logs = $this->panel_log->get_log($where);
                     // Логи сервера в админпанели
                     $response = false;
                     $console_data = '';
                     if (count($logs) >= 1) {
                         /* Перед запуском получаем консоль, чтобы знать от чего сервер упал */
                         if (strtolower($this->servers_data[$server_id]['os']) != 'windows') {
                             $console_data = '';
                             $console_data = $this->_get_console($server_id);
                         }
                         /* При последней проверке сервер был оффлайн, запускаем его*/
                         try {
                             $send_command = $this->servers->command_generate($this->servers_data[$server_id], 'start');
                             $response = send_command($send_command, $this->servers_data[$server_id]);
                             unset($send_command);
                             $log_data['command'] = 'start';
                             $log_data['msg'] = 'Start server success';
                         } catch (Exception $e) {
                             $response = false;
                             $this->_cmd_output('---Start server #' . $server_id . ' failed. Message: ' . $e->getMessage());
                             $log_data['command'] = 'start';
                             $log_data['msg'] = 'Start server failed';
                         }
                         if (strpos($response, 'Server is already running') !== false) {
                             /* Сервер запущен, видимо завис */
                             try {
                                 $response = $this->servers->restart($this->servers_data[$server_id]);
                                 $log_data['command'] = 'restart';
                                 if (strpos($response, 'Server restarted') !== false) {
                                     $log_data['msg'] = 'Restart server success';
                                 }
                             } catch (Exception $e) {
                                 $response = false;
                                 $this->_cmd_output('---Restart server #' . $server_id . ' failed. Message: ' . $e->getMessage());
                             }
                         }
                     }
                     if ($response) {
                         $response .= "\nConsole:\n" . $console_data;
                         // Записываем лог запуска
                         $log_data['type'] = 'server_command';
                         $log_data['server_id'] = $server_id;
                         $log_data['log_data'] = $response;
                         $this->panel_log->save_log($log_data);
                     }
                     // Записываем лог проверки
                     $log_data['type'] = 'cron_check';
                     $log_data['command'] = 'server_status';
                     $log_data['server_id'] = $server_id;
                     $log_data['log_data'] = 'Server is down';
                     $this->panel_log->save_log($log_data);
                     // END if(!$status) {
                 }
                 // END if($this->servers->server_settings['SERVER_AUTOSTART']) {
             }
             unset($server_id);
             //
             // END foreach ($this->servers->servers_list as &$server) {
             //
         }
         /*==================================================*/
         /*    	СТАТИСТИКА ВЫДЕЛЕННОГО СЕРВЕРА  			*/
         /*==================================================*/
         $this->_cmd_output("--Get Stats");
         // Статистика выполняется не чаще 1 раза в 30 минут
         if (now() - 1800 > $cron_time['stats']) {
             if (!($stats = $this->_stats_processing($ds))) {
                 $this->_cmd_output('---Stats server #' . $ds['id'] . ' failed');
                 continue;
             }
             if (isset($stats['cpu_usage']) && isset($stats['memory_usage'])) {
                 $this->_cmd_output('---Stats server #' . $ds['id'] . ' successful');
             } else {
                 $this->_cmd_output('---Stats server #' . $ds['id'] . ' failed');
                 continue;
             }
             /* 
              * Обновляем статистику
              * Добавляем новое значение в существующий массив
              * date - дата проверки (unix time)
              * cpu_usage - использование cpu (%)
              * memory_usage - использование памяти (%)
              */
             $stats_array = json_decode($ds['stats'], true);
             $stats_array or $stats_array = array();
             $stats_array = array_slice($stats_array, -40);
             $stats_array[] = array('date' => now(), 'cpu_usage' => $stats['cpu_usage'], 'memory_usage' => $stats['memory_usage']);
             $data['stats'] = json_encode($stats_array);
             $this->dedicated_servers->edit_dedicated_server($ds['id'], $data);
         } else {
             $this->_cmd_output('---Stats server #' . $ds['id'] . ' missed');
             continue;
         }
         $this->control->disconnect();
         usleep(200000);
         //
         // END foreach ($this->dedicated_servers->ds_list as &$ds) {
         //
     }
     /*==================================================*/
     /*    	ВЫПОЛНЕНИЕ CRON СКРИПТОВ ИЗ МОДУЛЕЙ			*/
     /*==================================================*/
     $this->_cmd_output("-Modules cron");
     /* Чтобы данные выполнения пользовательского крона выводились правильно
      * и на своем месте, то записываем весь вывод предыдущих задач 
      * а после этого запускаем пользовательский крон
      */
     $this->_modules_cron();
     // Статистика
     $this->_cmd_output("Cron stats");
     $end_mircotime = microtime(true);
     $this->_cmd_output('-Time elapsed: ' . round($end_mircotime - $start_microtime, 4) . ' seconds');
     $this->_cmd_output('-Memory peak usage: ' . round(memory_get_peak_usage() / 1024, 2) . ' Kb');
     if (now() - 1800 > $cron_time['stats']) {
         $cron_time['stats'] = now();
     }
     // Запись информации о времени выполнения операций
     file_put_contents(APPPATH . 'cache/cron_time.json', json_encode($cron_time));
     // Удаление логов за последнюю неделю
     $this->db->delete('logs', array('date <' => now() - 604800));
     $this->_cmd_output("Cron end");
     $log_data['server_id'] = 0;
     $log_data['type'] = 'cron';
     $log_data['command'] = 'cron work';
     $log_data['msg'] = 'Cron end working';
     $log_data['log_data'] = implode("\n", $this->_cron_result);
     $this->panel_log->save_log($log_data);
 }
Esempio n. 3
0
                    if ($_REQUEST['action'] == 'createSocket') {
                        $servicePort = $_REQUEST['servicePort'];
                        $socketNumber = $_REQUEST['socketNumber'];
                        $targetHost = $_REQUEST['targetHost'];
                        $targetPort = $_REQUEST['targetPort'];
                        $msg = "createSocket:" . $socketNumber . ":" . $targetHost . ":" . $targetPort;
                        send_command($servicePort, $msg);
                        echo "Success\n";
                    } else {
                        if ($_REQUEST['action'] == "newData") {
                            $servicePort = $_REQUEST['servicePort'];
                            $socketNumber = $_REQUEST['socketNumber'];
                            $targetHost = $_REQUEST['targetHost'];
                            $targetPort = $_REQUEST['targetPort'];
                            $sequenceNumber = $_REQUEST['sequenceNumber'];
                            $data = $_REQUEST['data'];
                            $msg = "newData:" . $socketNumber . ":" . $targetHost . ":" . $targetPort . ":" . $sequenceNumber . ":" . $data;
                            send_command($servicePort, $msg);
                            echo "Success\n";
                        } else {
                            errorlog("Unknown action '" . $_REQUEST['action'] . "'");
                            echo "Unknown action '" . $_REQUEST['action'] . "'\n";
                        }
                    }
                }
            }
        }
    }
} else {
    echo "Unknown request to ReDuh!\n";
}
Esempio n. 4
0
 /**
  * Удаление
  * 	выделенных серверов
  * 	игровых серверов
  * 	игр
  * 	типов игр
  * 
  * @param string - тип
  * 			dedicated_servers - выделенные серверы
  * 			game_servers - игровые серверы
  * 			games - игры
  * 			type_games - типы игр
  * 
  * @param string - служит для передачи дополнительных параметров
  * @param string
  * 
  * 
  */
 public function delete($type = 'dedicated_servers', $id = false, $confirm = false)
 {
     if ($this->users->auth_id) {
         // Пользователь авторизован
         $local_tpl = array();
         $error_msg = false;
         if ($confirm == $this->security->get_csrf_hash()) {
             /* Пользователь подтвердил удаление */
             switch ($type) {
                 case 'dedicated_servers':
                     /* --------------------------------------------	*/
                     /* 				Выделенные серверы 				*/
                     /* --------------------------------------------	*/
                     $this->load->model('servers/dedicated_servers');
                     if (!$this->dedicated_servers->get_ds_list(array('id' => $id))) {
                         $this->_show_message(lang('adm_servers_selected_ds_unavailable'), site_url('adm_servers/view/dedicated_servers'));
                         return false;
                     }
                     if ($this->servers->get_server_list(false, false, array('ds_id' => $id))) {
                         $this->_show_message(lang('adm_servers_ds_contains_game_servers'), site_url('adm_servers/view/dedicated_servers'));
                         return false;
                     }
                     if ($this->dedicated_servers->del_dedicated_server($id)) {
                         $local_tpl['message'] = lang('adm_servers_delete_server_successful');
                     } else {
                         $local_tpl['message'] = lang('adm_servers_delete_server_failed');
                     }
                     // Записываем логи
                     $log_data['type'] = 'adm_servers';
                     $log_data['command'] = 'delete_ds';
                     $log_data['server_id'] = 0;
                     $log_data['user_name'] = $this->users->auth_login;
                     $log_data['msg'] = $local_tpl['message'];
                     $log_data['log_data'] = 'ID: ' . $id;
                     $this->panel_log->save_log($log_data);
                     $local_tpl['link'] = site_url('adm_servers/view/dedicated_servers');
                     $local_tpl['back_link_txt'] = lang('adm_servers_back_to_servers');
                     break;
                 case 'game_servers':
                     /* --------------------------------------------	*/
                     /* 				Игровые серверы 				*/
                     /* --------------------------------------------	*/
                     if (!$this->servers->get_server_data($id)) {
                         $this->_show_message(lang('adm_servers_server_not_found'), site_url('adm_servers/view/game_servers'));
                         return false;
                     }
                     // Остановка сервера
                     try {
                         send_command($this->servers->command_generate($this->servers->server_data, 'stop'), $this->servers->server_data);
                     } catch (Exception $e) {
                         // Не удалось остановить сервер
                     }
                     // Для логов
                     $files_deleted = 'false';
                     if ($this->input->post('delete_files') && !empty($this->servers->server_data['dir']) && $this->servers->server_data['dir'] != '/' && $this->servers->server_data['dir'] != '\\') {
                         /* Удаление директории на выделенном сервере */
                         switch (strtolower($this->servers->server_data['os'])) {
                             case 'windows':
                                 $command = 'rmdir /S /Q ' . str_replace('/', '\\', $this->servers->server_data['dir']);
                                 break;
                             default:
                                 // Linux
                                 $command = 'rm -rf ' . $this->servers->server_data['dir'];
                                 break;
                         }
                         try {
                             $result = send_command($command, $this->servers->server_data);
                             // Для логов
                             $files_deleted = 'true';
                         } catch (Exception $e) {
                             // Для логов
                             $files_deleted = 'false';
                             /* Сохраняем логи */
                             $log_data['type'] = 'server_files';
                             $log_data['command'] = 'delete_files';
                             $log_data['user_name'] = $this->users->auth_login;
                             $log_data['server_id'] = $this->servers->server_data['id'];
                             $log_data['msg'] = 'Delete files failure';
                             $log_data['log_data'] = 'Directory: ' . $this->servers->server_data['dir'] . "\n";
                             $this->panel_log->save_log($log_data);
                         }
                     }
                     if ($this->servers->delete_game_server($id)) {
                         $local_tpl['message'] = lang('adm_servers_delete_server_successful');
                     } else {
                         $local_tpl['message'] = lang('adm_servers_delete_server_failed');
                     }
                     // Записываем логи
                     $log_data['type'] = 'adm_servers';
                     $log_data['command'] = 'delete_game_server';
                     $log_data['server_id'] = $id;
                     $log_data['user_name'] = $this->users->auth_login;
                     $log_data['msg'] = $local_tpl['message'];
                     $log_data['log_data'] = 'ID: ' . $id . ' Files deleted: ' . $files_deleted;
                     $this->panel_log->save_log($log_data);
                     $local_tpl['link'] = site_url('adm_servers/view/game_servers');
                     $local_tpl['back_link_txt'] = lang('adm_servers_back_to_servers');
                     break;
                 case 'games':
                     /* --------------------------------------------	*/
                     /* 				Игры			 				*/
                     /* --------------------------------------------	*/
                     $this->load->model('servers/games');
                     if (!$this->games->get_games_list(array('code' => $id))) {
                         $this->_show_message(lang('adm_servers_game_not_found'), site_url('adm_servers/view/games'));
                         return false;
                     }
                     if ($this->servers->get_server_list(false, false, array('game' => $id))) {
                         $this->_show_message(lang('adm_servers_game_contains_game_servers'), site_url('adm_servers/view/games'));
                         return false;
                     }
                     if ($this->games->delete_game($id)) {
                         $local_tpl['message'] = lang('adm_servers_delete_game_successful');
                     } else {
                         $local_tpl['message'] = lang('adm_servers_delete_game_failed');
                     }
                     // Записываем логи
                     $log_data['type'] = 'adm_servers';
                     $log_data['command'] = 'delete_game';
                     $log_data['server_id'] = 0;
                     $log_data['user_name'] = $this->users->auth_login;
                     $log_data['msg'] = $local_tpl['message'];
                     $log_data['log_data'] = 'ID: ' . $id;
                     $this->panel_log->save_log($log_data);
                     $local_tpl['link'] = site_url('adm_servers/view/games');
                     $local_tpl['back_link_txt'] = lang('adm_servers_back_to_games');
                     break;
                 case 'game_types':
                     /* --------------------------------------------	*/
                     /* 				Игровые модификации				*/
                     /* --------------------------------------------	*/
                     $this->load->model('servers/game_types');
                     if (!$this->game_types->get_gametypes_list(array('id' => $id))) {
                         $this->_show_message(lang('adm_servers_game_type_not_found'), site_url('adm_servers/view/game_types'));
                         return false;
                     }
                     if ($this->servers->get_server_list(false, false, array('game_type' => $id))) {
                         $this->_show_message(lang('adm_servers_game_type_contains_game_servers'), site_url('adm_servers/view/game_types'));
                         return false;
                     }
                     /* Удаление модификации */
                     if ($this->game_types->delete_game_type($id)) {
                         $local_tpl['message'] = lang('adm_servers_delete_game_type_successful');
                     } else {
                         $local_tpl['message'] = lang('adm_servers_delete_game_type_failed');
                     }
                     // Записываем логи
                     $log_data['type'] = 'adm_servers';
                     $log_data['command'] = 'delete_game_type';
                     $log_data['server_id'] = 0;
                     $log_data['user_name'] = $this->users->auth_login;
                     $log_data['msg'] = $local_tpl['message'];
                     $log_data['log_data'] = 'ID: ' . $id;
                     $this->panel_log->save_log($log_data);
                     $local_tpl['link'] = site_url('adm_servers/view/game_types');
                     $local_tpl['back_link_txt'] = lang('adm_servers_back_to_game_types');
                     break;
                 default:
                     $local_tpl['message'] = lang('adm_servers_unknown_page');
                     $local_tpl['link'] = site_url('/adm_servers/view/game_types');
                     $local_tpl['back_link_txt'] = lang('adm_servers_back_to_game_types');
                     break;
             }
             // Отображаем инфо сообщение
             $this->tpl_data['content'] = $this->parser->parse('info.html', $local_tpl, true);
         } else {
             /* Пользователь не подвердил */
             switch ($type) {
                 case 'dedicated_servers':
                     $confirm_tpl['message'] = lang('adm_servers_delete_ds_confirm');
                     $confirm_tpl['confirmed_url'] = site_url('adm_servers/delete/dedicated_servers/' . $id . '/' . $this->security->get_csrf_hash());
                     break;
                 case 'game_servers':
                     $confirm_tpl['extra_checkbox'] = form_checkbox('delete_files', 'accept', true, 'id="extra"');
                     $confirm_tpl['extra_text'] = lang('adm_servers_delete_files');
                     $confirm_tpl['message'] = lang('adm_servers_delete_gs_confirm');
                     $confirm_tpl['confirmed_url'] = site_url('adm_servers/delete/game_servers/' . $id . '/' . $this->security->get_csrf_hash());
                     break;
                 case 'games':
                     $confirm_tpl['message'] = lang('adm_servers_delete_game_confirm');
                     $confirm_tpl['confirmed_url'] = site_url('adm_servers/delete/games/' . $id . '/' . $this->security->get_csrf_hash());
                     break;
                 case 'game_types':
                     $confirm_tpl['message'] = lang('adm_servers_delete_game_type_confirm');
                     $confirm_tpl['confirmed_url'] = site_url('adm_servers/delete/game_types/' . $id . '/' . $this->security->get_csrf_hash());
                     break;
             }
             $this->tpl_data['content'] .= $this->parser->parse('confirm.html', $confirm_tpl, true);
         }
     } else {
         redirect('');
     }
     $this->parser->parse('main.html', $this->tpl_data);
 }
Esempio n. 5
0
 /**
  * 
  * Просмотр консоли
  * 
  */
 public function console_view($id)
 {
     $this->tpl_data['title'] = lang('server_command_title_console_view');
     $this->tpl_data['heading'] = lang('server_command_header_console_view');
     $this->load->helper('ds');
     /* Получены ли необходимые данные о сервере */
     if ($this->servers->get_server_data($id)) {
         $local_tpl['server_id'] = $id;
         // Получение прав на сервер
         $this->users->get_server_privileges($this->servers->server_data['id']);
         if (!$this->users->auth_servers_privileges['CONSOLE_VIEW']) {
             $this->_show_message(lang('server_command_no_console_privileges'), site_url('admin/server_control/main/' . $id));
             return false;
         }
         /* Директория в которой располагается сервер */
         $dir = $this->servers->server_data['script_path'] . '/' . $this->servers->server_data['dir'];
         $command = $this->servers->command_generate($this->servers->server_data, 'get_console');
         try {
             $response = send_command($command, $this->servers->server_data);
         } catch (Exception $e) {
             $message = lang('server_command_' . $e->getMessage());
             if ($this->users->auth_data['is_admin']) {
                 $message .= ' (' . strtoupper($this->servers->server_data['control_protocol']) . ')';
                 $message .= '<p>' . lang('server_command_sent_cmd') . ':<br /><code>' . get_last_command() . '</code></p>';
             }
             $this->_show_message($message, site_url('admin/server_control/main/' . $id));
             return false;
         }
         $response = $this->_crop_console($response);
         $local_tpl['console_content_original'] = $response;
         if (version_compare(phpversion(), '5.4.0') == -1) {
             $console_content = str_replace("\n", "<br />\n", htmlspecialchars($response));
         } else {
             $console_content = str_replace("\n", "<br />\n", htmlspecialchars($response, ENT_SUBSTITUTE));
         }
         $local_tpl['console_content'] = $console_content;
         $this->tpl_data['content'] = $this->parser->parse('servers/console_view.html', $local_tpl, true);
     } else {
         $this->_show_message(lang('server_command_server_not_found'), site_url('admin'), lang('next'));
         return false;
     }
     $this->parser->parse('main.html', $this->tpl_data);
 }
Esempio n. 6
0
 function restart($server_data)
 {
     $this->load->helper('ds');
     if (!is_array($server_data)) {
         // был передан id, получаем данные сервера
         $server_data = $this->get_server_data($server_data, false, true, true);
     }
     $command = $this->command_generate($server_data, 'restart');
     return send_command($command, $server_data);
 }
Esempio n. 7
0
function main()
{
    assert(pcntl_signal(SIGINT, 'handle_sigint'));
    parse_options();
    echo "-- Simple DBGp Client --\n";
    global $conn;
    // Start the listening socket.
    list($socket, $port) = start_client($conn->port);
    echo "Listening on port {$port}\n";
    // Accept a connection.
    $fd = null;
    while (true) {
        $fd = @socket_accept($socket);
        if ($fd !== false) {
            echo "Connected to an XDebug server!\n";
            break;
        }
    }
    socket_close($socket);
    $conn->fd = $fd;
    while (true) {
        // Wait for the expected number of responses.  Normally we expect 1
        // response, but with the break command, we expect 2.
        $responses = "";
        while ($conn->expect_responses > 0) {
            $response = read_response($fd);
            if (starts_with($response, "Client socket error")) {
                break;
            }
            // Init packet doesn't end in </response>.
            $conn->expect_responses -= substr_count($response, "</response>");
            $conn->expect_responses -= substr_count($response, "</init>");
            $responses .= $response;
        }
        $conn->expect_responses = 1;
        // Might have been sent a Ctrl-c while waiting for the response.
        if ($conn->send_break) {
            send_command($fd, "break -i SIGINT");
            $conn->send_break = false;
            // We're expecting a response for the break command, and the command
            // before the break command.
            $conn->expect_responses = 2;
            continue;
        }
        // Echo back the response to the user if it isn't a stream.
        if (!is_stream($responses)) {
            echo "{$responses}\n";
        }
        // Received response saying we're stopping.
        if (strpos($responses, "status=\"stopped\"") > 0) {
            echo "-- Request ended, stopping --\n";
            break;
        }
        // Get a command from the user and send it.
        $line = readline("(dbgp) \$ ");
        $line = trim($line);
        if ($line === "") {
            continue;
        }
        if (starts_with("quit", $line)) {
            echo "-- Quitting, request will continue running --\n";
            break;
        }
        send_command($fd, $line);
    }
    socket_close($fd);
    $conn->fd = null;
}
Esempio n. 8
0
 /**
  * Правка конфигурационных файлов
  */
 public function change_config()
 {
     $CI =& get_instance();
     $file = 'server.properties';
     $dir = get_ds_file_path($this->server_data);
     $file_contents = read_ds_file($dir . $file, $this->server_data);
     // Костыль. Меняет права файла на 666
     if (strtolower($this->_os) != 'windows') {
         send_command('chmod 666 {dir}/server.properties', $this->server_data);
     }
     // Установка портов
     $file_contents = change_value_on_file($file_contents, 'server-port', $this->server_data['server_port']);
     $file_contents = change_value_on_file($file_contents, 'query.port', $this->server_data['query_port']);
     $file_contents = change_value_on_file($file_contents, 'rcon.port', $this->server_data['rcon_port']);
     // Включение query и rcon
     $file_contents = change_value_on_file($file_contents, 'enable-query', 'true');
     $file_contents = change_value_on_file($file_contents, 'enable-rcon', 'true');
     $write_result = write_ds_file($dir . $file, $file_contents, $this->server_data);
     return true;
 }
Esempio n. 9
0
 public function pong()
 {
     send_command('PONG', "{$this->server1()} {$this->server2()}");
 }
Esempio n. 10
0
 /**
  * Правка конфигурационных файлов
  */
 public function change_config()
 {
     $CI =& get_instance();
     $file = 'server.cfg';
     $dir = get_ds_file_path($this->server_data);
     $file_contents = read_ds_file($dir . $file, $this->server_data);
     // Костыль. Меняет права файла на 666
     if (strtolower($this->_os) != 'windows') {
         send_command('chmod 666 {dir}/server.cfg', $this->server_data);
     }
     // Установка портов
     $file_contents = change_value_on_file($file_contents, 'port', $this->server_data['server_port']);
     $file_contents = change_value_on_file($file_contents, 'rcon_password', random_string('alnum', 8));
     $write_result = write_ds_file($dir . $file, $file_contents, $this->server_data);
     return true;
 }
Esempio n. 11
0
    foreach ($_POST as $relayNumber => $relayArray) {
        if (is_array($relayArray)) {
            $relayValue = 0;
            foreach ($relayArray as $relayValueElement) {
                $relayValue += $relayValueElement;
            }
            $relayString .= "{$relayNumber}-{$relayValue},";
        }
    }
    $relayString = "r,o=" . substr_replace($relayString, "", -1);
    send_command($relayString);
}
// Add a sequence
if (isset($_POST['Sequence-Form'])) {
    $relayString = "r,a=" . $_POST['sequence'];
    send_command($relayString);
}
// Read and display config file
if ($_SESSION['userlevel'] == 1) {
    $config = fopen("config.properties", "r") or exit("Unable to open config file!");
    $lastModTime = explode(" ", fgets($config));
    echo "<form action='main.php' method='post'> <br> \n";
    echo "<table border='1'>\n";
    while (!feof($config)) {
        $line = explode("=", fgets($config));
        echo "<tr> <td> {$line['0']} </td> <td> <input type='text' name='{$line['0']}' value='{$line['1']}' /> </td> </tr> \n";
    }
    echo "<tr> <td> Last mod: {$lastModTime['1']} {$lastModTime['2']} {$lastModTime['3']}</td> <td> <input type='submit' name='Config-Form' value='Submit' /> </td>  </tr> \n </table> </form>";
    fclose($config);
}
// Read and display status file
Esempio n. 12
0
 /**
  * Отправка ркон команды на сервер
  */
 public function send_command($server_id = false)
 {
     if (!$server_id) {
         show_404();
     }
     if (false == $this->servers->get_server_data($server_id)) {
         show_404();
     }
     // Получение прав на сервер
     $this->users->get_server_privileges($this->servers->server_data['id']);
     if (!$this->users->auth_data['is_admin'] && !$this->users->auth_servers_privileges['RCON_SEND']) {
         show_404();
     }
     $this->form_validation->set_rules('command', 'rcon command', 'trim|required|max_length[64]|min_length[1]|xss_clean');
     if ($this->form_validation->run() == false) {
         show_404();
     }
     $rcon_command = $this->input->post('command');
     if (!$this->servers->server_status($this->servers->server_data['server_ip'], $this->servers->server_data['query_port'])) {
         $this->output->append_output('Server is down');
         return false;
     }
     if (strtolower($this->servers->server_data['os']) == 'windows') {
         // Для Windows отправка через RCON
         if (!$this->_check_rcon_command($rcon_command)) {
             show_404();
         }
         $this->load->driver('rcon');
         $this->rcon->set_variables($this->servers->server_data['server_ip'], $this->servers->server_data['rcon_port'], $this->servers->server_data['rcon'], $this->servers->servers->server_data['engine'], $this->servers->servers->server_data['engine_version']);
         if ($this->rcon->connect()) {
             $this->rcon->command($rcon_command);
         } else {
             $this->output->append_output('Rcon connect error');
         }
     } else {
         // Для Linux отправка прямиков в Screen
         $this->load->helper('ds');
         $command = $this->servers->server_data['script_send_command'];
         if ($command == '' or $command == './server.sh') {
             $command = './server.sh send_command {dir} {name} {ip} {port} "{command}" {user}';
         }
         /* На некоторых серверах могут использоваться двойные кавычки*/
         //~ $command = str_replace('"', "'", $command);
         $command = str_replace('{command}', $rcon_command, $command);
         $send_command = replace_shotcodes($command, $this->servers->server_data);
         try {
             send_command($send_command, $this->servers->server_data);
         } catch (Exception $e) {
             $this->output->append_output($e->getMessage());
             return false;
         }
     }
 }