Есть исправно работающий обработчик стаканов.
Хочется прикрутить вывод информации из Quik в сторонние приложения по средством организации передачи данных через socket сервер.
Постоянно запускающаяся зацикленная функция вызываемая из main производит обработку и складирование данных в массив.
Socket сервер - должен периодически выдавать эту информацию по запросу подключившегося клиента.
Для запуска в Quik сервера используется библиотека luasocket (под lua 5.4.1).
Запуск ожидания коннекта ServerRun() - так же запускается из main.
При этом после выполнения server:accept() - выполнение какого либо кода прекращается.
Прекращается до тех пор пока на сервер не поступит запрос - он не выдаст ответ и только тогда функция table.load(var, 1000) будет запущена повторно.
И тоже застопорится до поступления следующего запроса от socket клиента.
client:settimeout(2) - должен вроде как прерывать ожидание коннекта и закрывать коннект - что поспособствовало бы продолжению выполнения иного кода, но этого не происходит.
Пробовал многое - но ничего не помогло. Где бы в коде не запускалась server:accept() - она останавливает выполнение любых других функций.
Как организовать запуск table.load(var, 1000) и ServerRun() - в раздельных потоках - так чтобы выполнение одной функции не останавливалось на период работы другой ?
Код для примера (сильно сокращён)
Хочется прикрутить вывод информации из Quik в сторонние приложения по средством организации передачи данных через socket сервер.
Постоянно запускающаяся зацикленная функция вызываемая из main производит обработку и складирование данных в массив.
Socket сервер - должен периодически выдавать эту информацию по запросу подключившегося клиента.
Для запуска в Quik сервера используется библиотека luasocket (под lua 5.4.1).
Запуск ожидания коннекта ServerRun() - так же запускается из main.
При этом после выполнения server:accept() - выполнение какого либо кода прекращается.
Прекращается до тех пор пока на сервер не поступит запрос - он не выдаст ответ и только тогда функция table.load(var, 1000) будет запущена повторно.
И тоже застопорится до поступления следующего запроса от socket клиента.
client:settimeout(2) - должен вроде как прерывать ожидание коннекта и закрывать коннект - что поспособствовало бы продолжению выполнения иного кода, но этого не происходит.
Пробовал многое - но ничего не помогло. Где бы в коде не запускалась server:accept() - она останавливает выполнение любых других функций.
Как организовать запуск table.load(var, 1000) и ServerRun() - в раздельных потоках - так чтобы выполнение одной функции не останавливалось на период работы другой ?
Код для примера (сильно сокращён)
Код |
---|
socket = require("socket") IPAddr = "127.0.0.1" --IP Адрес IPPort = 3585 --IP Port client = nil function main() while is_run do table.load(var, 1000) end ServerRun() end function ServerRun() while is_run do client = server:accept() client:settimeout(2) local line, err = client:receive() local result = evalString(line) if not err then client:send(result.."\n") end client:close() end end function OnInit(quik_path) server = assert(socket.bind("127.0.0.1", IPPort)) end |