mirror of
https://github.com/Ale32bit/Capy64.git
synced 2025-01-18 10:36:44 +00:00
Added error checking to Lua libs,
added http_failure event to http.requestAsync
This commit is contained in:
parent
719b66fdb0
commit
5e0183cc1c
4 changed files with 43 additions and 6 deletions
|
@ -1,6 +1,11 @@
|
|||
local timer = require("timer")
|
||||
local expect = require("expect").expect
|
||||
local range = require("expect").range
|
||||
|
||||
function timer.sleep(n)
|
||||
expect(1, n, "number")
|
||||
range(1, 1)
|
||||
|
||||
local timerId = timer.start(n)
|
||||
repeat
|
||||
local _, par = coroutine.yield("timer")
|
||||
|
|
|
@ -1,19 +1,43 @@
|
|||
local http = require("http")
|
||||
local event = require("event")
|
||||
local expect = require("expect").expect
|
||||
|
||||
function http.request(url, body, headers, options)
|
||||
expect(1, url, "string")
|
||||
expect(2, body, "string", "nil")
|
||||
expect(3, headers, "table", "nil")
|
||||
expect(4, options, "table", "nil")
|
||||
|
||||
if not http.checkURL(url) then
|
||||
return nil, "Invalid URL"
|
||||
end
|
||||
|
||||
local requestId = http.requestAsync(url, body, headers, options)
|
||||
local _, response
|
||||
local ev, id, par
|
||||
repeat
|
||||
_, id, response = event.pull("http_response")
|
||||
ev, id, par = event.pull("http_response", "http_failure")
|
||||
until id == requestId
|
||||
return response
|
||||
|
||||
if ev == "http_failure" then
|
||||
return nil, par
|
||||
end
|
||||
|
||||
return par
|
||||
end
|
||||
|
||||
function http.get(url, headers, options)
|
||||
expect(1, url, "string")
|
||||
expect(2, headers, "table", "nil")
|
||||
expect(3, options, "table", "nil")
|
||||
|
||||
return http.request(url, nil, headers, options)
|
||||
end
|
||||
|
||||
function http.post(url, body, headers, options)
|
||||
expect(1, url, "string")
|
||||
expect(2, body, "string", "nil")
|
||||
expect(3, headers, "table", "nil")
|
||||
expect(4, options, "table", "nil")
|
||||
|
||||
return http.request(url, body, headers, options)
|
||||
end
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
|
||||
"HTTP": {
|
||||
"Enable": true,
|
||||
"Blacklist": [],
|
||||
"WebSockets": {
|
||||
"Enable": true,
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using Capy64.LuaRuntime.Extensions;
|
||||
using Capy64.LuaRuntime.Handlers;
|
||||
using KeraLua;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
@ -15,7 +16,6 @@ public class HTTP : IPlugin
|
|||
private static IGame _game;
|
||||
private static HttpClient _client;
|
||||
private static long RequestId;
|
||||
private static List<ReadHandle> ReadHandles = new();
|
||||
|
||||
private readonly LuaRegister[] HttpLib = new LuaRegister[]
|
||||
{
|
||||
|
@ -31,7 +31,7 @@ public class HTTP : IPlugin
|
|||
},
|
||||
new(),
|
||||
};
|
||||
public HTTP(IGame game)
|
||||
public HTTP(IGame game, IConfiguration configuration)
|
||||
{
|
||||
_game = game;
|
||||
RequestId = 0;
|
||||
|
@ -60,6 +60,7 @@ public class HTTP : IPlugin
|
|||
private static int L_Request(IntPtr state)
|
||||
{
|
||||
var L = Lua.FromIntPtr(state);
|
||||
|
||||
var request = new HttpRequestMessage();
|
||||
|
||||
var url = L.CheckString(1);
|
||||
|
@ -153,6 +154,13 @@ public class HTTP : IPlugin
|
|||
var reqTask = _client.SendAsync(request);
|
||||
reqTask.ContinueWith(async (task) =>
|
||||
{
|
||||
|
||||
if(task.IsFaulted || task.IsCanceled)
|
||||
{
|
||||
_game.LuaRuntime.PushEvent("http_failure", requestId, task.Exception?.Message);
|
||||
return;
|
||||
}
|
||||
|
||||
var response = await task;
|
||||
/*object content;
|
||||
if ((bool)options["binary"])
|
||||
|
|
Loading…
Reference in a new issue