-
Notifications
You must be signed in to change notification settings - Fork 191
HTTP support
OTClientV8 comes with HTTP/HTTPS and JSON support in lua.
HTTP.get(url, callback)
HTTP.getJSON(url, callback) -- website should return json
HTTP.post(url, data, callback)
HTTP.postJSON(url, data, callback) -- data should be a table {} and website should return json
HTTP.download(url, file, downloadCallback, progressCallback) -- progressCallback can be null
HTTP.downloadImage(url, downloadImageCallback)
HTTP.cancel(operationId)
Each function, except cancel
return operationId, you can use it to cancel http request.
Those functions came from modules/corelib/http.lua
and they use more advanced g_http API.
Files from download are available in virtual "/downloads" directory. Downloading of images is using cache based on url (so if you change image it won't refresh until restart or change url).
For get, getJSON, post and postJSON HTTP callback should look like this:
function callback(data, err)
if err then
-- handle error, if err is not null then err is a string
return
end
-- handle data
-- if it's data from getJSON/postJSON then data is a table {}
end
For download:
function downloadCallback(path, checksum, err)
if err then
-- handle error, if err is not null then err is a string
return
end
-- do something with path and checksum
end
function progressCallback(progress, speed)
-- progress is from 0 to 100
-- speed is in kbps
end
For downloadImage:
function downloadImageCallback(path, err)
if err then
-- handle error, if err is not null then err is a string
return
end
-- do something with path to downloaded image
end
If you want to load image from base64 there's special function for it: Image:setImageSourceBase64(base64code)
You can find an example of that in modules/client_news/news.lua
. Only PNG images are supported.
Default timeout for every operations is 5s, you can change it in modules/corelib/http.lua
.
There are few lua scripts using HTTP api:
modules/client_entergame/entergame.lua
modules/client_feedback/feedback.lua
modules/client_news/news.lua
modules/client_updater/updater.lua
modules/game_shop/shop.lua
Examples:
HTTP.get("https://api.ipify.org/", function(data, err)
if err then
g_logger.info("Whoops! Error occured: " .. err)
return
end
g_logger.info("My IP is: " .. data)
end)
HTTP.getJSON("https://api.ipify.org/?format=json", function(data, err)
if err then
g_logger.info("Whoops! Error occured: " .. err)
return
end
g_logger.info("My IP is: " .. tostring(data['ip']))
end)
If you're pro, there's also support for simple regex in lua which look like this:
let clients = new Set();
require('uWebSockets.js').App().ws('/*', {
open: (ws, req) => {
clients.add(ws);
},
message: (ws, message, isBinary) => {
console.log("Message: " + message);
let ok = ws.send(message, isBinary);
},
close: (ws, code, message) => {
clients.delete(ws);
}
}).any('/*', (res, req) => {
/* Let's deny all Http */
res.end('Nothing to see here!');
}).listen(9000, (listenSocket) => {
if (listenSocket) {
console.log('Listening to port 9000');
}
});
setInterval(() => {
for(let client of clients) {
client.send("hello", false);
}
}, 1000);