Подскажите как реализовать идею...
Надо чтобы у меня на компьютере отображалось сколько часов запущена программа на другом ПК(writebuffernet). Например в messagebox после запуска скрипта на проверку (readbuffernet)
(Добавление)
При чем чтобы можно было обнулить статистику.
1. Dantes3000 - 29 Марта, 2017 - 14:41:07 - перейти к сообщению
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 доступны только для максимальной версии Кибор.
Добавить в код отправляющей программы:
Наверх в шапку
Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)
Добавить в код принимающей программы:
Наверх в шапку
Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)
Переменная int sendedtime будет содержать время работы отправляющей программы в милисекундах (плюс время обмена данными на сервер и принимающую программу, плюс паузы по 20 секунд между отправками/приемками).
З.Ы. Заранее сори за возможные опечатки, но вроде нигде не ошибся.
Добавить в код отправляющей программы:
Наверх в шапку
CODE:
char ch_time[10];
int timer = gettime();
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 (); // обнуляем таймер отправки данных на сервер
}
{
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;
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]));
}
{
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: Сперва Собираем данные с сервера
Добавить в код отправляющей программы:
Наверх в шапку
Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)
СПОСОБ 2: Берем данные из файла, предварительно сохранив их там
Добавить в код отправляющей программы:
Наверх в шапку
Внутрь главного цикла перед возвратом
(или внутрь обработчика CREATE_TIMER если он есть)
Ну короче как-то так...
Принимающий код не меняется (кроме char ch_time[20]; и второго параметра readbuffernet ессьно).
Принцип такой же как раньше, только теперь при запуске отправляющей программы она сперва считает с сервера/файла суммарное время своей работы, и в дальнейшем будет отправлять раз в 20 секунд обновленное общее время своей работы (будет суммировать текущее время работы с тем что выхватила из сервера/файла при первом запуске). Принимающая программа может быть запущена в любой момент для считывания данных с сервера в свою переменную int sendedtime. До тех пор данные с сервера, по идее, никуда не денутся.
С отправкой логов тоже можно реализовать, но это вызовет неизбежные фризы отправляющей программы, т. к. сперва логи надо будет перевести в char, а представьте какие логи будут со временем работы. Да и смысла нет, по-моему, для реализации Вашей идеи с почасовой оплатой... Но если очень хочется - принцип такой же.
СПОСОБ 1: Сперва Собираем данные с сервера
Добавить в код отправляющей программы:
Наверх в шапку
CODE:
char ch_time[20];
int overaltime = 0;
int timer = gettime();
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 (); // обнуляем таймер работы с сервером
}
{
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);
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 (); // обнуляем таймер работы с сервером
}
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.
Ну код писать не буду.. Алгоритм бы примерно так можно сделать было бы..
Изначально создается буферный файл на сервере.
Создать его можно той программой которая будет считывать данные времени.
В него записываем 0.
Бот каждые 10 минут работы читает этот файл и прибавляет по 1 к тому что есть в нем и его перезаписывает.
То есть каждые 10 мин число увеличивается на 1.
Когда надо получить инфо о времени, запускаем программу которая читает этот буфер. И в соответствие с числом расчитываем время.
При получение расчета с юзера обнуляем этот буфер 0.