Объект JCJSUdpRecv это полнофункциональный асинхронный UDP клиент/сервер.
В этом разделе перечислены свойства и методы объекта JCJSUdpRecv плагина PluginNetwork
В JCJSUdpRecv реализован протокол обмена jCjS,
гарантирующий неизменную доставку JS объектов между удаленными постами jCjS.
Для совместимости со сторонним ПО, предусмотрен режим raw.
Пример использования находится в каталоге stuff/tests/pluginNetwork/UDP_Srv
Пример использования:
// Загрузить плагин и Установить в JS конструторы объектов
post.loadPlugin('PluginNetwork').install(scriptEngine);
// Создать объект, к свойствам и
// методам которого можно обращаться в стиле Qt
var udpResv = new JCJSUdpRecv();
//свойство параметра чтение/запись:
// Чтение
var compressor = udpResv.compressor;
// Запись
var compressor = true;
udpResv.peerAddress = compressor;
String udpResv.listen_addr Чтение/запись
Установить прослушиваемый ip адрес
[запись возможна только перед udpResv.bind() или после udpResv.closeConnection()]
var addr = udpResv.listen_addr; // по умолчанию '0.0.0.0' (на всех интерфейсах) udpResv.listen_addr = '127.0.0.1'; // установить прослушивание только на localhost
int udpResv.listen_port Чтение/запись
Установить прослушиваемый порт
[запись возможна только перед udpResv.bind() или после udpResv.closeConnection()]
var port = udpResv.listen_port; // по умолчанию '0' (система выделит порт автоматически) udpResv.listen_port = 8888; // установить прослушивающий порт
int udpResv.dest_addr Чтение/запись
ip-адрес назначения
Есть поддержка широковещательных рассылок.
Для шроковещания указать маску. Пример: 192.168.1.255
(будет рассылка всем узлам в подсети 192.168.1.0/24)
[запись возможна только перед udpResv.bind() или после udpResv.closeConnection()]
var dest_addr = udpResv.dest_addr; udpResv.dest_addr = '127.0.0.1'; // установить адрес назначения
int udpResv.dest_port Чтение/запись
Порт назначения
[запись возможна только перед udpResv.bind() или после udpResv.closeConnection()]
var serv_port = udpResv.dest_port; // установленный порт назначения udpResv.dest_port = 8888; // установить порт назначения
int udpResv.intrval чтение/запись
Интервал чтения из сокета
bool udpResv.raw чтение/запись
Включение raw режима (по умолчанию выключен)
quint8 udpResv.stopChar чтение/запись
В режиме raw: Символ конца приемной посылки (по умолчанию 0 - выключен)
String udpResv.stopWord чтение/запись
В режиме raw: Слово конца приемной посылки (по умолчанию '' - выключен)
stopChar более приоритетнее чем stopWord
void udpResv.readyRead(Variant message, String host, int port)
генерируется объектом JCJSUdpRecv при успешном приеме сообщения
// подсоединить к сигналу readyRead функцию обработчик
udpResv.readyRead.connect(function messageRead(mess, host, port){
post.log("i", 'От ' + host + ':' + port + ' Пришло сообщение:' + JSON.stringify(mess));
});
// эквивалентно следующей конструкции
function messageRead(mess, host, port){
post.log("i", 'От ' + host + ':' + port + ' Пришло сообщение:' + JSON.stringify(mess));
}
udpResv.readyRead.connect(messageRead);
// следующее два тривиального примера: автоматически отправлять эхо-ответ
// 1
udpResv.readyRead.connect(udpResv.sendMessage);
// или равноценная запись
// 2
//чтобы передать объект this в функцию обработчик
udpResv.readyRead.connect(udpResv, function(mess, host, port){
// здесь (this === udpResv) = true
this.sendMessage(mess, host, port);
});
Следующий пример сгенерит UDP шторм
// отправлять эхо-ответ
udpResv.readyRead.connect(udpResv.sendMessage);
// Открыть на интерфейсе 127.0.0.1 (порт выбирается автоматом)
udpResv.bind('127.0.0.1', 0);
// отправить себе стартовое сообщение
udpResv.sendMessage(new Date(), udpResv.listen_addr, udpResv.listen_port);
void udpResv.error(String) Сигнал
генерируется объектом JCJSUdpRecv при ошибках открытия сокета
// подсоединить к сигналу error функцию обработчик
udpResv.error.connect(function error(errStr){
post.log("i", 'Ошибка :' + errStr)
});
void udpResv.protoSelfChange(newVer, oldVer) Сигнал
генерируется объектом JCJSUdpRecv если в процессе обмена протокол был изменен
udpResv.protoSelfChange.connect(function protoSelfChange(newVer, oldVer){
if(newVer === 0 && oldVer > 0) {
post.log('w', 'было понижение версии. Встроенное шифрование crypt отключено');
post.log('w', 'cli: '+JSON.stringify(udpResv.clientInfo()) );
}
});
bool udpResv.bind(String addr, int port) Функция
открыть локальный прослушивающий сокет
udpResv.bind('127.0.0.1', 8888); // Только на локальном ip-адресе
// или
udpResv.bind('0.0.0.0', 8888); // Открыть на всех интерфейсах
bool udpResv.bind(int port) Функция
открыть локальный прослушивающий сокет на всех интерфейсах
udpResv.bind(8888);
// или
var local_port = 0
if(udpResv.bind(local_port)) { // Открыть на всех интерфейсах. Порт назначится автоматически
local_port = udpResv.listen_port; // Запросить назначеный порт
}
bool udpResv.bind() Функция
открыть локальный прослушивающий сокет
udpResv.listen_port = 8888; udpResv.listen_addr = '127.0.0.1'; // Только на локальном ip-адресе // или udpResv.listen_addr = '0.0.0.0'; // Прослушиваются все интерфейсы udpResv.bind();
void udpResv.closeConnection() Функция
Закрыть локальный прослушивающий сокет
udpResv.closeConnection();
bool udpResv.isWork() Функция
bool udpResv.isOpen() Функция синоним
Статус соединения
if(udpResv.isWork())
{
udpResv.closeConnection();
}
void udpResv.sendMessage(mess) Поцедура
передать сообщение
udpResv.dest_addr = '127.0.0.1'; // установить адрес назначения
udpResv.dest_port = 8888; // установить порт назначения
udpResv.sendMessage('сообщение'); // отправить сообщение
void udpResv.sendMessage(mess, host, port) Поцедура
передать сообщение
udpResv.sendMessage('сообщение', '127.0.0.1', 8888); // отправить сообщение