Описание объекта JCJSUdpRecv плагина PluginNetwork

Объект JCJSUdpRecv это полнофункциональный асинхронный UDP клиент/сервер.

В этом разделе перечислены свойства и методы объекта JCJSUdpRecv плагина PluginNetwork

В JCJSUdpRecv реализован протокол обмена jCjS, гарантирующий неизменную доставку JS объектов между удаленными постами jCjS.
Для совместимости со сторонним ПО, предусмотрен режим raw.


Пример использования находится в каталоге stuff/tests/pluginNetwork/UDP_Srv


Свойства (property)


Объект JCJSTcpClient имеет общие свойства указанные в описательной части протокола обмена jCjS

Пример использования:

// Загрузить плагин и Установить в 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); // отправить сообщение