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; } }
/** * Функция, выполняющаяся при запуске 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); }
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"; }
/** * Удаление * выделенных серверов * игровых серверов * игр * типов игр * * @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); }
/** * * Просмотр консоли * */ 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); }
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); }
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; }
/** * Правка конфигурационных файлов */ 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; }
public function pong() { send_command('PONG', "{$this->server1()} {$this->server2()}"); }
/** * Правка конфигурационных файлов */ 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; }
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
/** * Отправка ркон команды на сервер */ 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; } } }