Джако Крузо
14.03.2014Дорген

Подача команд в дорген через порт

Многих, кто генерит доры на конвейере, интересует, как из другой программы запустить генерирование с нужными проектами не перезапуская дорген. Это можно сделать, подав нужные команды на порт. Приведу пример, как это сделать из php.
На вкладке Scripting выполните это: StartCommandListener(2351,'1234');
Дорген начнёт слушать порт 2351. '1234' - случайное число, играет роль пароля.
После внесения в proj.txt новой партии проектов нужно исполнить в доргене команды reloadprojects(); updateprojects(); чтобы перезагрузить проекты в доргене. Для этого подаём на порт команду SCRIPT с нужным скриптом, а потом команду START_GENERATING:

//Перезагружаются проекты
$fp = fsockopen ("localhost", 2351, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {

fputs ($fp, "1234\r\nSCRIPT:\r\nreloadprojects(); updateprojects();\r\nEND_SCRIPT\r\n");

while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}

sleep(1);

//Запускается генерирование

$fp = fsockopen ("localhost", 2351, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {

fputs ($fp, "1234\r\nSTART_GENERATING\r\n");

while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}



Синтаксис команд таков:
1234\r\nSTART_GENERATING\r\n
Сначала идёт пароль, т.е. 1234, потом перевод строки \r\n, потом сама команда, и потом снова \r\n.

У команды SCRIPT синтаксис таков:
1234\r\nSCRIPT:\r\nreloadprojects(); updateprojects();\r\nEND_SCRIPT\r\n
Сначала идёт пароль, потом \r\n, потом сама команда SCRIPT: , потом \r\n, потом идёт скрипт, который надо выполнить в доргене, потом снова \r\n, и закрывает команду END_SCRIPT и \r\n после.

В ответ на команды приходит результат их выполнения. Начало ответа всегда 0 или 1. 0 - команда не выполнилась по каким-либо причинам, а 1 - команда выполнилась успешно. После идёт пробел, а после результат конкретной команды. Например команда 1234\r\nSCRIPT:\r\nprint('Hello!!!');\r\nEND_SCRIPT\r\n вернёт: 1 Hello!!!

Как узнать статус работы доргена:
Команда STATUS:

$fp = fsockopen ("localhost", 2351, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {

fputs ($fp, "1234\r\nSTATUS\r\n");

while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}

Ответ, как обычно, начинается с 0 или 1. Пример ответа: 1 0
Единица означает, что запрос успешно выполнен, а 0, то что дорген в настоящий момент ничего не делает. Если дорген генерит, то ответ может быть например: 1 1 2/3 , где вторая единица означает, что идёт генерирование, а 2/3 - что генерится второй проект из трёх. Если вторая цифра 2 - значит идёт фтп закачка, а если 3 то отправка в апостер.


В общем, кто интересуется такими возможностями, пишите мне на JakoKruzo@mail.ru .