Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Связь между программами

Страниц (4): [1] 2 3 4 »
 

1. Dantes3000 - 29 Марта, 2017 - 14:41:07 - перейти к сообщению
Подскажите как реализовать идею...
Надо чтобы у меня на компьютере отображалось сколько часов запущена программа на другом ПК(writebuffernet). Например в messagebox после запуска скрипта на проверку (readbuffernet)
(Добавление)
При чем чтобы можно было обнулить статистику.
2. Dantes3000 - 30 Марта, 2017 - 12:30:34 - перейти к сообщению
то как?
(Добавление)
хоть на словах
3. Kibor - 30 Марта, 2017 - 12:46:55 - перейти к сообщению
Что как?
Отслеживаемая программа при запуске записывает на сервер время.
Следящая по запросу считывает.
4. Dantes3000 - 30 Марта, 2017 - 14:55:45 - перейти к сообщению
Что-то не то....Я хочу 100% знать сколько был запущен скрипт на другом компе. Даже если у меня не работает скрипт приема. Думаю это можно реализовать с помощью записи в файл. Или еще как-то?
(Добавление)
Это тоже сложновато....(
5. idcco - 31 Марта, 2017 - 04:14:40 - перейти к сообщению
Обязательные условия - все EXE должны быть собраны в одном Кибор на одном компьютере, writebuffernet и readbuffernet доступны только для максимальной версии Кибор.

Добавить в код отправляющей программы:
Наверх в шапку
CODE:
char ch_time[10];
int timer = gettime();

Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)

CODE:
if (gettime() - timer > 20000) // отправлять данные каждые 20 секунд
{
strcpy (#ch_time[0], format (gettime ())); // переводим время с запуска в массив char
writebuffernet (#ch_time[0], size (#ch_time[0]), -1, -1); // отправляем на сервер
timer = gettime (); // обнуляем таймер отправки данных на сервер
}


Добавить в код принимающей программы:
Наверх в шапку
CODE:
char ch_time[10];
int timer = gettime();
int sendedtime;

Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)

CODE:
if (gettime() - timer > 20000) // принимать данные каждые 20 секунд
{
readbuffernet (#ch_time[0], 10, -1, -1); // считываем данные с сервера
timer = gettime (); // обнуляем таймер запроса данных с сервера
sendedtime = formatsn (format (#ch_time[0]));
}


Переменная int sendedtime будет содержать время работы отправляющей программы в милисекундах (плюс время обмена данными на сервер и принимающую программу, плюс паузы по 20 секунд между отправками/приемками).

З.Ы. Заранее сори за возможные опечатки, но вроде нигде не ошибся.
6. Dantes3000 - 31 Марта, 2017 - 05:16:41 - перейти к сообщению
Всё верно, конечно...я бы до такого дошел спустя пару дней неудач)
Но не подходит такой метод. Для этого нужно, чтобы принимающая программа постоянно работала. Я одному человеку делаю бота для игры и хочу брать почасовую оплату...Поэтому не всегда могу следить за ним.

Идея такая - на стороне человека время запуска записывается в лог и постоянно отсылается мне...и как только я запускаю чтение с буфера - получаю в свой лог его лог. Это уже на много сложнее реализовать. Было бы проще скопировать его лог к себе, но это для меня запредельная сложность.
7. Kibor - 31 Марта, 2017 - 12:14:48 - перейти к сообщению
Оплата по предоплате? или по факту времени использованного..
8. idcco - 31 Марта, 2017 - 12:58:46 - перейти к сообщению
Не вижу проблемы, просто отправляющая программа тоже должна знать сколько она суммарно работает.

СПОСОБ 1: Сперва Собираем данные с сервера
Добавить в код отправляющей программы:
Наверх в шапку
CODE:
char ch_time[20];
int overaltime = 0;
int timer = gettime();

Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)

CODE:
if (gettime() - timer > 20000) // принимать/отправлять данные каждые 20 секунд
{
if (overaltime = 0) // если время ранее не было считано (только что запущена программа)
{
readbuffernet (#ch_time[0], 20, -1, -1); // считываем данные с сервера
overaltime = formatsn (format (#ch_time[0])); // пихаем их в переменную overaltime
}
strcpy (#ch_time[0], format (gettime () + overaltime)); // переводим в массив char сумму общего времени
writebuffernet (#ch_time[0], size (#ch_time[0]), -1, -1); // отправляем сумму на сервер
timer = gettime (); // обнуляем таймер работы с сервером
}

СПОСОБ 2: Берем данные из файла, предварительно сохранив их там
Добавить в код отправляющей программы:
Наверх в шапку
CODE:
char ch_time[20];
int timer = gettime();
int overaltime = 0; sum = 0;
string str = "";
if (fopen ("c:\... спрятанный путь к файлу ...\worktime.txt", "r") != 0) // читаем из файла
{
freadline (str);
fclose ();
}
overaltime = formatsn (str);

Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)

CODE:
if (gettime() - timer > 20000) // принимать/отправлять данные каждые 20 секунд
sum = gettime () + overaltime;
if (fopen ("c:\... спрятанный путь к файлу ...\worktime.txt", "w") != 0) // сохраняем в файл
{
fwrite (sum);
fclose ();
}
strcpy (#ch_time[0], format (sum)); // переводим в массив char сумму общего времени
writebuffernet (#ch_time[0], size (#ch_time[0]), -1, -1); // отправляем сумму на сервер
timer = gettime (); // обнуляем таймер работы с сервером
}

Ну короче как-то так...

Принимающий код не меняется (кроме char ch_time[20]; и второго параметра readbuffernet ессьно).
Принцип такой же как раньше, только теперь при запуске отправляющей программы она сперва считает с сервера/файла суммарное время своей работы, и в дальнейшем будет отправлять раз в 20 секунд обновленное общее время своей работы (будет суммировать текущее время работы с тем что выхватила из сервера/файла при первом запуске). Принимающая программа может быть запущена в любой момент для считывания данных с сервера в свою переменную int sendedtime. До тех пор данные с сервера, по идее, никуда не денутся.

С отправкой логов тоже можно реализовать, но это вызовет неизбежные фризы отправляющей программы, т. к. сперва логи надо будет перевести в char, а представьте какие логи будут со временем работы. Да и смысла нет, по-моему, для реализации Вашей идеи с почасовой оплатой... Но если очень хочется - принцип такой же.
9. Dantes3000 - 01 Апреля, 2017 - 02:11:10 - перейти к сообщению
 Kibor пишет:
Оплата по предоплате? или по факту времени использованного..

По факту. Другу делаю, он не обманет.
10. Kibor - 01 Апреля, 2017 - 03:28:33 - перейти к сообщению
Я понимаю, что друг может несколько раз запускать программу и использовать ее.. И надо узнать сколько часов она проработала в сумме..

Ну код писать не буду.. Алгоритм бы примерно так можно сделать было бы..
Изначально создается буферный файл на сервере.
Создать его можно той программой которая будет считывать данные времени.
В него записываем 0.

Бот каждые 10 минут работы читает этот файл и прибавляет по 1 к тому что есть в нем и его перезаписывает.
То есть каждые 10 мин число увеличивается на 1.

Когда надо получить инфо о времени, запускаем программу которая читает этот буфер. И в соответствие с числом расчитываем время.
При получение расчета с юзера обнуляем этот буфер 0.

Powered by ExBB FM 1.0 Final