Посидел, немного подумал, что было бы неплохо для организации быстрого обмена данными из QUIK? И пришла в голову мысль получать данные по HTTP напрямую без посредников. В итоге накатал либу с веб сервером, с помощью которой можно напрямую вызывать методы LUA скриптов и возвращать результат по HTTP. Есть конечно ограничения, но если будет кому-нибудь интересно, допилю, и буду поддерживать проект. Установка: 1) Содержимое с архивом ложим в папку с QUIK 2) Добавляем в QUIK DelphianTransactor.lua и запускаем его По умолчанию указан порт 15000, внутри архива лежит понятное ReadMe, там описано как вызывать. Но если кому не охото читать, то для наглядности в браузере заходим
_хттп://127.0.0.1:15000/?call=test1¶ms=123
потом
_хттп://127.0.0.1:15000/?result=check
... Тем самым будет вызвана функция из functions.lua, туда же и можно складывать свои клиентские функции https://cloud.mail.ru/public/B3sj/Lk2nimCeJ В ближайшее время накатаю класс на php (обёртку) Жду на почту (delphiec90@mail.ru)
Теперь, можно вызывать функции QLUA как ИЗ ВНЕ по HTTP, так и из QLUA делать GET и POST запросы. (и никакой мороки с подключением luasocket и т.д.), запустил DelphianTransactor.lua и всё работает.
Появилось желание решить некоторый проблемы и может кого-то уберечь от лишнего геморроя, подключил библиотеку и сразу можешь делать GET,POST запросы из QLUA, и вызывать функции QLUA из вне, и не надо думать, что там и как надо править и куда засовывать luasocket, чтобы это заработало....
Это будет очень удобно для тех, кто хочет связать со своим WEB сервером QUIK, или с приложением. А DDE кстати ограничен в возможностях, ODBC тоже геморройно, а qlua просто так этого делать не умеет.
Пример экспорта стакана на удалённый сервер с помощью данной либы
Код
link="http://192.168.1.100/index.php"
function OnQuote(class, sec)
ql2 = getQuoteLevel2(class, sec);
QuoteStr = "";
for i = tonumber(ql2.bid_count), 1, -1 do
if ql2.bid[i].quantity ~= nil then
QuoteStr = QuoteStr..tostring(tonumber(ql2.bid[i].quantity))..":"..tostring(tonumber(ql2.bid[i].price))..";";
else
QuoteStr = QuoteStr.."0:"..tostring(tonumber(ql2.bid[i].price))..";";
end
end
QuoteStr = QuoteStr.."*";
for i = 1, tonumber(ql2.offer_count), 1 do
if ql2.offer[i].quantity ~= nil then
if i < tonumber(ql2.offer_count) then
QuoteStr = QuoteStr..tostring(tonumber(ql2.offer[i].quantity))..":"..tostring(tonumber(ql2.offer[i].price))..";";
else
QuoteStr = QuoteStr..tostring(tonumber(ql2.offer[i].quantity))..":"..tostring(tonumber(ql2.offer[i].price));
end
else
if i < tonumber(ql2.offer_count) then
QuoteStr = QuoteStr.."0:"..tostring(tonumber(ql2.offer[i].price))..";";
else
QuoteStr = QuoteStr.."0:"..tostring(tonumber(ql2.offer[i].price));
end
end
end
p={}
p[1]='class='..tostring(class,1)
p[2]='sec='..tostring(sec,1)
p[3]='quote='..QuoteStr
DT_HttpPost(link,p)
end
Чем-то подобным встречаем, только лучше в базу а не в файл
Код
<?php
if ((isset($_POST['class'])) and (isset($_POST['sec'])))
{
file_put_contents("test.txt",$_POST['class']." ".$_POST['sec']." ".$_POST['quote'].PHP_EOL,FILE_APPEND);
}
echo("ok");
К чему это я.... с данным модулем, надо всего лишь добавить