Есть исправно работающий обработчик стаканов.
Хочется прикрутить вывод информации из 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
|