IPS и запуск бинарников - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

IPS и запуск бинарников

#1 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 622
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 25 Апрель 2019 - 14:28

Здравствуйте. Я делаю приложение для игрового бота, он создает игры на сервере. Все конфиги находятся в бд и будут редактироваться в IPS. Сейчас мне пора думать о том, как делать создавать/запускать/останавливать/компилить бот по средствам IPS.

И так, есть папка с исходниками source, в которой, находятся .cpp и .h файлы, все они собираются командой make в один файл ghost++, это бинарный файл который запускается на сервере и стартует бот.

Для инициализации конфига из БД, он должен прочитать следующие параметры: mysql_server, mysql_user, mysql_password,mysql_database, mysql_botid. По этим значениям выбираются поля конфигурации самого бота, сейчас эти значения находятся в исходниках, но я думаю сделать чтение файла и вписать в него, либо через командую строку их указывать, но лучше в файле наверно. Есть еще файлы, допустим папка config, но здесь общая папка, до нее просто путь указать в настройках и всё, тут проблем нет.

Здесь я просто описал механизм работы, чтобы было немного понятно.

Примерная работа: создаем бот через формы в IPS, она создает каталог bot1 в котором файл ghost++. Общую папку с конфигами мы уже имеем, где лучше держать всё это, в source или data?

----------------------------------

В данный момент пока один вопрос, как из php запускать бинарные файлы? Может есть встроенные библиотеки? Я знаю о php_ssh2, и оно будет работать, может что-то другое посоветуете?

Сообщение изменено: TemKa_SD (25 Апрель 2019 - 14:30)

0

#2 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 688
  • Регистрация: 15-Октябрь 11
  • Репутация: 197
  • Откуда:Россия, Тула
  • IPB version:I have no IPB
 

Отправлено 25 Апрель 2019 - 14:39

https://www.php.net/...ru/ref.exec.php
0

#3 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 484
  • Регистрация: 20-Март 09
  • Репутация: 2 557
  • IPB version:3.1.x
 

Отправлено 25 Апрель 2019 - 14:44

Просмотреть сообщениеTemKa_SD сказал(а):

Я знаю о php_ssh2

Я честно говоря о таком не знаю.
Выполнять команды в php можно и через exec или system. Более сложными функциями мне не доводилось работать.
0

#4 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 622
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 25 Апрель 2019 - 14:48

Хоть убейте, но я не понимаю как тут цитировать ))))

--------------------

Дмитрий, спасибо, потестирую завтра.

siv1987, я имел ввиду libssh2 - в году так 2014 или даже раньше скорей всего, использовал radio icecast через эту cms'ку : radiocms, там включение, остановка радио была с помощью этой либы, но может там через exec нельзя было, не знаю.

Буду пробовать, спасибо.

Скажите сразу, где лучше держать всё это, исходник, папки с ботами, конфигами, в source?
0

#5 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 622
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 25 Апрель 2019 - 15:21

Ну да, вроде работает, только пришлось эти функции включать в php. Других нет? Безопасных )))

	public function run()
	{
        \exec('cd ~/ghost/source/wc3ghost/ && screen -U -dmS dev ./ghost++');
	}

	/**
	* Get Root Buttons
	*
	* @return	array
	*/
	public function _getRootButtons()
	{
		$buttons   = array();

		\IPS\Output::i()->sidebar['actions']['run'] = array(
			'icon'		=> 'run',
			'title'		=> 'Запустить бот',
			'link'		=> \IPS\Http\Url::internal( 'app=wc3&module=bots&controller=mapcfgs&do=run' ),
			'data'		=> array( 'ipsDialog' => '', 'ipsDialog-title' => 'Запустить бот' )
		);

		return $buttons;
	}

0

#6 Пользователь не на сайте   TemKa_SD ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 622
  • Регистрация: 16-Январь 18
  • Репутация: 7
  • Откуда:Спасск-Дальний
  • IPB version:4.1.x
 

Отправлено 28 Апрель 2019 - 09:15

Здравствуйте. Реализовал функции запуска и остановки, что скажите? Может что-то посоветуете? Вроде всё работает )

public function runBot()
{
	$bot_id = \IPS\Request::i()->bot_id;

	if ( isset( $bot_id ) )
	{
		$bot = static::load( $bot_id );
		$path = static::$botPath;
		$pid = $bot->bot_pid;

		if($pid !== false && $pid != 0) {
			\IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack('wc3_bot_run_error_1', FALSE, array( 'sprintf' => array($pid))), $pid, 500, '' );
		}

		$start = \exec(" sh -c " . \escapeshellarg("cd {$path}{$bot_id}; nohup ./{$bot_id}++ > /dev/null 2>&1 & echo $!"), $output, $status);

		$bot->bot_pid = $start;
		$bot->save();
		\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=wc3&module=bots&controller=bots' ), 'wc3_bot_run_started' );
	}
}

public function stopBot()
{
	if ( isset( \IPS\Request::i()->bot_id ) )
	{
		$bot = static::load( \IPS\Request::i()->bot_id );
		$pid = $bot->_data['bot_pid'];
		$restart = FALSE;

		if($pid === false || $pid == 0) {
			if($restart) {
				return true;
			} else {
				\IPS\Output::i()->error( 'wc3_bot_stop_error_1', $pid, 500, '' );
			}
		}

		\exec("kill {$pid} > /dev/null 2", $output, $status);

		if($status === 1){
			$bot->bot_pid = 0;
			$bot->save();
			\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=wc3&module=bots&controller=bots' ), 'wc3_bot_stop_stoped' );
		} else {
		    \IPS\Output::i()->error( 'wc3_bot_stop_error_2', $status, 500, '' );
		}

	}
}

Сообщение изменено: TemKa_SD (28 Апрель 2019 - 09:15)

0

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2019 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна