Объект JCJSLocalServer это полнофункциональный многопоточный асинхронный сервер обмена через именованные каналы (pipe)
В этом разделе перечислены свойства и методы объекта JCJSLocalServer плагина PluginNetwork
В JCJSLocalServer реализован протокол обмена jCjS,
гарантирующий неизменную доставку JS объектов между постами jCjS в рамках одного хоста.
Для совместимости со сторонним ПО, предусмотрен режим raw.
Пример использования находится в каталоге stuff/tests/pluginNetwork/LOC_Srv
Свойства (property)
Объект JCJSTcpClient имеет общие свойства указанные
в описательной части протокола обмена jCjS
ВНИМАНИЕ!!!, свойство protoSelf по умолчанию имеет значение 0
Пример использования:
// Загрузить плагин и Установить в JS конструторы объектов
post.loadPlugin('PluginNetwork').install(scriptEngine);
// Создать объект, к свойствам и
// методам которого можно обращаться в стиле Qt
var locServer = new JCJSLocalServer();
//свойство параметра чтение/запись:
// Чтение
var pipe_name = locServer.pipe_name;
// Запись
var pipe_name = 'pipe_name';
locServer.pipe_name = pipe_name;
bool locServer.isWork только чтение
возвращает текущее состояние сервера
if(locServer.isWork) {
locServer.serverStop();
}
VariantList locServer.clientDescriptors только чтение
возвращает дескрипторы соединений
var clientDescriptors = locServer.clientDescriptors;
int locServer.clientCount только чтение
возвращает количество подключенных клиентов
var clientsCount = locServer.clientCount;
int locServer.maxClients Чтение/запись
Максимальное количество клиентов
var maxClients = locServer.maxClients; // по умолчанию 30 locServer.maxClients = 1; // ограничить одним соединением
String locServer.pipe_name Чтение/запись
Установить/прочитать имя канала (именованный канал)
var pipe_name = locServer.pipe_name; // по умолчанию '', создается автоматически
locServer.pipe_name = 'pipeName'; // Изменить имя
if(locServer.serverStart())
post.log("i", "Server started pipe://" + locServer.pipe_name);
else
post.log("e", "Server not started");
//----------------------------------------------
// равнозначно следующей записи
if(locServer.serverStart('pipeName'))
post.log("i", "Server started pipe://" + locServer.pipe_name);
else
post.log("e", "Server not started");
String locServer.pipe_fullName только чтение
Прочитать полное имя канала (именованный канал)
bool locServer.worldAccess Чтение/запись
Разрешить подключаться клиентам без привелегий (по умолчанию false)
int locServer.intrval чтение/запись
Интервал чтения из сокета
bool locServer.raw чтение/запись
Включение raw режима (по умолчанию выключен)
quint8 locServer.stopChar чтение/запись
В режиме raw: Символ конца приемной посылки (по умолчанию 0 - выключен)
String locServer.stopWord чтение/запись
В режиме raw: Слово конца приемной посылки (по умолчанию '' - выключен)
stopChar более приоритетнее чем stopWord
void locServer.readyRead(Variant message, int socketDescriptor)
генерируется объектом JCJSLocalServer при успешном приеме сообщения
// подсоединить к сигналу readyRead функцию обработчик
locServer.readyRead.connect(function messageRead(mess, socketDesc){
post.log("i", 'Клиент прислал сообщение: ' + JSON.stringify(mess) + ' дескриптор соединения=' + socketDesc)
});
// эквивалентно следующей конструкции
function messageRead(mess, socketDesc){
post.log("i", 'Клиент прислал сообщение: ' + JSON.stringify(mess) + ' дескриптор соединения=' + socketDesc);
}
locServer.readyRead.connect(messageRead);
// следующей тривиальной строкой можно автоматически отправлять эхо-ответ
locServer.readyRead.connect(locServer.sendClient);
void locServer.connected(int socketDescriptor) Сигнал
генерируется объектом JCJSLocalServer при успешном подсоединении клиента к серверу
// подсоединить к сигналу connected функцию обработчик
locServer.connected.connect(function clientConnected(socketDesc){
post.log("i", 'Есть новое соединение: дескриптор соединения=' + socketDesc)
});
void locServer.disconnected(String addr, int port, int socketDescriptor) Сигнал
генерируется объектом JCJSLocalServer при разъединении соединения с клиентом
// подсоединить к сигналу connected функцию обработчик
locServer.disconnected.connect(function clientDisconnected(socketDesc){
post.log("i", 'Клиент отключился: дескриптор соединения=' + socketDesc)
});
void locServer.error(String error, int socketDescriptor) Сигнал
генерируется объектом JCJSLocalServer при ошибках в сокете
// подсоединить к сигналу connected функцию обработчик
locServer.error.connect(function error(err, socketDesc){
post.log("i", 'Ошибка: err=' + err + ' дескриптор соединения=' + socketDesc)
});
void locServer.protoSelfChange(int socketDescriptor, newVer, oldVer) Сигнал
генерируется объектом JCJSLocalServer если в процессе обмена протокол был изменен
locServer.protoSelfChange.connect(function protoSelfChange(d, newVer, oldVer){
if(newVer === 0 && oldVer > 0) {
post.log('w', 'было понижение версии. Встроенное шифрование crypt отключено');
post.log('w', 'cli ' + d + ': '+JSON.stringify(locServer.clientInfo(d)) );
}
});
Date locServer.serverWorkTime() Функция
Время работы сервера
var serverWorkTime = locServer.serverWorkTime();
bool locServer.serverStart(String pipeName = '') Функция
Запустить сервер на канале с именем pipeName
Если имя не задавать, оно будет сгенерировано
if(locServer.serverStart())
post.log("i", "Server started pipe://" + locServer.pipe_name);
else
post.log("e", "Server not started");
bool locServer.serverStop() Функция
Остановить сервер
locServer.serverStop();
bool locServer.serverStartStop() Функция
поменять статус сервера на противоположный
locServer.serverStartStop();
void locServer.removeAllCliens() Функция
отключает всех клиентов
(у каждого подключенного клиента сгенерируется сигнал разрыва соединения)
locServer.removeAllCliens();
void locServer.sendAllClients(String mess) Функция
отправить всем подключенным клиентам сообщение
locServer.sendAllClients('Сообщение для всех подключенных');
void locServer.sendClient(const QString &mess, int socketDescriptor) Функция
отправить сообщение клиенту по дескриптору соединения
locServer.readyRead.connect(function messageRead(mess, socketDesc){
post.log("i", 'Клиент прислал сообщение: ' + JSON.stringify(mess) + ' дескриптор соединения=' + socketDesc);
locServer.sendClient('Сообщение для клиента, приславшего сообщение', socketDesc);
});
// равноценно следующей записи, но передается объект this в функцию обработчик
locServer.readyRead.connect(locServer, function messageRead(mess, socketDesc){
post.log("i", 'Клиент прислал сообщение: ' + JSON.stringify(mess) + ' дескриптор соединения=' + socketDesc);
// здесь (this === locServer) = true
this.sendClient('Сообщение для клиента, приславшего сообщение', socketDesc);
});
void locServer.getClient(int socketDescriptor) Функция
взять у сервера объект соединения по дескриптору соединения
locServer.readyRead.connect(locServer, function messageRead(mess, socketDesc){
post.log("i", 'Клиент прислал сообщение: ' + JSON.stringify(mess) + ' дескриптор соединения=' + socketDesc);
// здесь (this === locServer) = true
this.sendClient('Сообщение для клиента, приславшего сообщение', socketDesc);
});
// равноценно следующей записи, но запрашивается объект соединения
locServer.readyRead.connect(locServer, function messageRead(mess, socketDesc){
post.log("i", 'Клиент прислал сообщение: ' + JSON.stringify(mess) + ' дескриптор соединения=' + socketDesc);
// здесь (this === locServer) = true
var cli = this.getClient(socketDesc);
cli.sendMessage('Сообщение для клиента, приславшего сообщение');
});