Kibor |
Отправлено: 05 Марта, 2015 - 16:09:13
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
В этой версии появилась возможность с помощью функций writebuffernet и readbuffernet легко обмениваться данными, контролировать и управлять собранными в Кибор EXE, которые запущены на разных компьютерах через интернет.
Обмен данными происходит через промежуточный сервер, поэтому достаточно лишь подключения к сети интернет. Не важно серый или белый у Вас ip.
Не используйте данные функции чаще раз в несколько минут (в сумме со всех программ). При большой нагрузке, программы ее создающие будут отключены от сервиса.
Идентификация программ которые надо связать происходит по нескольким параметрам. Можно связывать :
1 ) все программы собранные в конкретно зарегистрированном Кибор (установленном на конкретном компьютере).
2 ) программы собранные в конкретно зарегистрированном Кибор (установленном на конкретном компьютере) и указанном в функциях writebuffernet и readbuffernet уникальном придуманом ключе для данных программ.
3 ) программы собранные в конкретно зарегистрированном Кибор (установленном на конкретном компьютере) и указанном в функциях writebuffernet и readbuffernet ключа компьютера на котором работает одна из программ. (По ключу одного из компьютера (в О программе Кибор).)
4 ) программы собранные в конкретно зарегистрированном Кибор (установленном на конкретном компьютере) и указанном в функциях writebuffernet и readbuffernet уникальном придуманом ключе для данных программ и указанном в функциях writebuffernet и readbuffernet ключа компьютера на котором работает одна из программ. (По ключу одного из компьютера (в О программе Кибор).)
1 вариант позволяет общаться между собой всем программам собранных в конкретно установленном Киборе.
2 вариант позволяет общаться конкретной группе программ собранных в конкретно установленном Киборе (по уникальному придуманому ключу)
3 вариант позволяет общаться с программой установленной на конкретном компьютере (зная его ключ)
4 вариант позволяет общаться конкретной группе программ собранных в конкретно установленном Киборе (по уникальному придуманому ключу) и установленных на конкретном компьютере (зная его ключ (в О программе Кибор))
Обязательное условие - все EXE должны быть собранны в одном Кибор на одном компьтере.
Синтаксис:
Цитата: char ch[256];
strcpy(#ch[0], "Сообщение");
writebuffernet(#ch[0], size(#ch[0]), "kluch_prog", "kluch_comp");
Цитата: char ch[256];
readbuffernet(#ch[0], 256, "kluch_prog", "kluch_comp");
messagebox (format(#ch[0]));
первый параметр - указатель на массив char, данные с которого будем писать в буфер на сервере.
второй - количество записываемых байт.
третий - унакальный придуманный ключ для этой группы программ.
четвертый - ключ компьютера с программой которого будем связываться.
третий и четвертый параметры могут принимать -1
в этом случае данный параметр не будет учитываться.
то есть writebuffernet (readbuffernet) (#ch[0], size(#ch[0]), -1, -1); позволит общаться всем программам собранных в конкретном Кибор.
writebuffernet (readbuffernet) (#ch[0], size(#ch[0]), "kluch_prog", -1); конкретной группе программ.
writebuffernet (readbuffernet) (#ch[0], size(#ch[0]), -1, "kluch_comp"); с конкретным компьютером.
возвращают 1 при удаче и < 1 ошибка
Пример общения группе программ (по уникальному придуманому ключу):
первая программа - передает
Цитата: char ch[256];
strcpy(#ch[0], "Сообщение");
writebuffernet(#ch[0], size(#ch[0]), "kluch_prog", -1);
вторая программа - принимает
Цитата: char ch[256];
readbuffernet(#ch[0], 256, "kluch_prog", -1);
messagebox (format(#ch[0]));
Пример общения с программой на конкретном компьютере (по его ключу (в О программе Кибор)):
первая программа - передает
Цитата: char ch[256];
strcpy(#ch[0], "Сообщение");
writebuffernet(#ch[0], size(#ch[0]), -1, "kluch_comp");// указать ключ компа с которым связаться над
вторая программа - принимает
Цитата: char ch[256];
readbuffernet(#ch[0], 256, -1, individualcode());// указать ключ своего компа
messagebox (format(#ch[0]));
На данные функции действует ограничение по частоте вызова. Один раз за 10 (+рандомно 0 - 3 секунды) секунд между вызовами пары writebuffernet и readbuffernet и 25 (+рандомно 0 - 3 секунды) секунд между вызовами одноименных функций. Поэтому код надо строить так что бы не было чаще вызовов, 13 и 28 сек.
Иначе программа будет простаивать оставшееся время и сигналить звуком.
Так же допускается не чаще одного раза в 3 секунды обращаться к серверу этими функциями любым программам собранным в одном Кибор (с одним ключом). Иначе функции вернут -10 и не отработают по назначению.
Пояснение
CODE:char ch[256];
loop()
{
strcpy(#ch[0], "Сообщение");
writebuffernet(#ch[0], size(#ch[0]), "kluch_prog", "kluch_comp");
readbuffernet(#ch[0], 256, "kluch_prog", "kluch_comp");//Тут будет пауза 10 секунд. Основная работа скрипта не прерывается. Прервется только если readbuffernet вызовется раньше чем через 10 сек после вызова writebuffernet
messagebox (format(#ch[0]));
//Тут будет пауза 25 секунд когда дойдет до writebuffernet (с момента ее последнего вызова) Основная работа скрипта не прерывается. Прервется только если writebuffernet вызовется раньше чем через 25 сек повторно
}
CODE:char ch[256];
loop()
{
strcpy(#ch[0], "Сообщение");
writebuffernet(#ch[0], size(#ch[0]), "kluch_prog", "kluch_comp");
//Тут будет пауза 25 секунд когда дойдет до writebuffernet (с момента ее последнего вызова). Основная работа скрипта не прерывается. Прервется только если writebuffernet вызовется раньше чем через 25 сек повторно
}
CODE:char ch[256];
loop()
{
readbuffernet(#ch[0], 256, "kluch_prog", "kluch_comp");
messagebox (format(#ch[0]));
//Тут будет пауза 25 секунд когда дойдет до readbuffernet (с момента ее последнего вызова) Основная работа скрипта не прерывается. Прервется только если readbuffernet вызовется раньше чем через 25 сек повторно
}
Демонстрационный пример двух программ можно скачать тут .
send_command передает введенный текст, get_command принимает и выводит на экран.
Эти программы можно запускать на разных компьютерах. Передача идет через интернем с помощью writebuffernet и readbuffernet.
код этих программ
send_command
CODE:char ch[256];
string text;
int tim, tim1;
int col, x, y;
getdisplay(col, x, y);
a: text=input("Введите сообщение");
if (text!="")
{
strcpy(#ch[0], text);
writebuffernet(#ch[0], size(#ch[0]), -1, -1);
tim=gettime();
s: tim1=gettime()-tim;
if (gettime()-tim<11000)
{
textbkcolor (255,0);
textout(0, x/2-260, y/2-200, "send_command: Следующее сообщение можно будет отправить через "+format(10-(tim1/1000))+" секунд..", 0);
pause (1000);
goto s;
}
textbkcolor (65280,0);
textout(0, x/2-160, y/2-200 , "send_command: Можно отправлять сообщение.", 2);
goto a;
}
get_command
CODE:char ch[256];
string text;
int tim, tim1;
int col, x, y;
getdisplay(col, x, y);
a: readbuffernet(#ch[0], 256, -1, -1);
textbkcolor (8388608,65535);
textout(1, x/2-150, y/2+170, "get_command: Принято от send_command: ( "+format(#ch[0])+" )", 2);
tim=gettime();
s: tim1=gettime()-tim;
if (gettime()-tim<11000)
{
textbkcolor (255,65535);
textout(0, x/2-150, y/2+150, "get_command: Следующее сообщение будет принято через "+format(10-(tim1/1000))+" секунд..", 0);
pause (1000);
goto s;
}
textbkcolor (65280,0);
textout(0, x/2-50, y/2+150 , "get_command: Сообщение принято..", 2);
pause (1000);
goto a;
writebuffernet и readbuffernet доступны только для максимальной версии Кибор.
Демо режим доступен в количестве 5 использований функций writebuffernet и readbuffernet в процессе одного запуска программы Кибор и не в собранных exe. Демо режим возможен только с указанием третьего и четвертого параметров в -1.
Собранные в максимальной версии EXE так же будут работать на разных компьютерах пока версия Кибор в которой они собраны имеет максимальную лицензию. |
|
|
Kibor |
Отправлено: 06 Марта, 2015 - 14:33:58
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Сделал демо режим.
Демо режим доступен в количестве 5 использований функций writebuffernet и readbuffernet в процессе одного запуска программы Кибор и не в собранных exe. Демо режим возможен только с указанием третьего и четвертого параметров в -1.
можно использовать эти скрипты
запустить кибор. ввести скрипт для отправки:
CODE:char ch[256];
string text;
int tim, tim1;
int col, x, y;
getdisplay(col, x, y);
a: text=input("Введите отправляемое сообщение");
if (text!="")
{
strcpy(#ch[0], text);
writebuffernet(#ch[0], size(#ch[0]), -1, -1);
tim=gettime();
s: tim1=gettime()-tim;
if (gettime()-tim<11000)
{
textbkcolor (255,0);
textout(0, x/2-260, y/2-200, "send_command: Следующее сообщение можно будет отправить через "+format(10-(tim1/1000))+" секунд..", 0);
pause (1000);
goto s;
}
textbkcolor (65280,0);
textout(0, x/2-160, y/2-200 , "send_command: Можно отправлять сообщение.", 2);
goto a;
}
запустить.
запустить копию кибор. ввести скрипт для приема:
CODE:char ch[256];
string text;
int tim, tim1;
int col, x, y;
getdisplay(col, x, y);
a: if (messageboxyn("Принять сообщение?")==1)
{
if (readbuffernet(#ch[0], 256, -1, -1)==1)
{
textbkcolor (10485760,12632256);
textout(0, x/2-150, y/2+150 , "get_command: Сообщение принято..", 2);
textbkcolor (8388608,65535);
textout(1, x/2-150, y/2+170, "get_command: Принято от send_command: ( "+format(#ch[0])+" )", 2);
}
else
{
textbkcolor (255,12632256);
textout(0, x/2-150, y/2+150 , "get_command: Ожидание сообщения..", 2);
}
pause (1000);
tim=gettime();
s: tim1=gettime()-tim;
if (gettime()-tim<11000)
{
textbkcolor (255,65535);
textout(0, x/2-150, y/2+150, "get_command: Следующее сообщение будет принято через "+format(10-(tim1/1000))+" секунд..", 0);
pause (1000);
goto s;
}
goto a;
}
запустить.
Принять сообщение можно будет после отправки. |
|
|
|