implmented http abstrction
This commit is contained in:
parent
1aa93574c8
commit
ce45bf2726
@ -1,3 +1,4 @@
|
|||||||
|
import kernel.http.HTTPRequest.Http;
|
||||||
import util.Observable;
|
import util.Observable;
|
||||||
import lib.ui.reactive.TextElement;
|
import lib.ui.reactive.TextElement;
|
||||||
import lib.ui.reactive.ReactiveUI;
|
import lib.ui.reactive.ReactiveUI;
|
||||||
@ -12,7 +13,22 @@ using util.Extender.LambdaExtender;
|
|||||||
class Startup {
|
class Startup {
|
||||||
public static function main() {
|
public static function main() {
|
||||||
Init.initKernel();
|
Init.initKernel();
|
||||||
uiTest();
|
httpTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function httpTest() {
|
||||||
|
Log.moveToOutput("main");
|
||||||
|
// var url = "https://mock.codes/400";
|
||||||
|
// var url = "https://jsonplaceholder.typicode.com/todos/1";
|
||||||
|
var url = "https://domainnotexsist.net/aaaa";
|
||||||
|
Http.request(url).handle((outcome)->{
|
||||||
|
switch outcome{
|
||||||
|
case Success(data):
|
||||||
|
Log.debug(data.body);
|
||||||
|
case Failure(failure):
|
||||||
|
Log.error(failure.reason);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function uiTest() {
|
private static function uiTest() {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package kernel;
|
package kernel;
|
||||||
|
|
||||||
|
import cc.HTTP.HTTPResponse;
|
||||||
import lua.TableTools;
|
import lua.TableTools;
|
||||||
import lua.Coroutine;
|
import lua.Coroutine;
|
||||||
import util.Vec.Vec2;
|
import util.Vec.Vec2;
|
||||||
@ -22,8 +23,8 @@ class KernelEvents {
|
|||||||
public final onDisk:Signal<String>;
|
public final onDisk:Signal<String>;
|
||||||
public final onDiskEject:Signal<String>;
|
public final onDiskEject:Signal<String>;
|
||||||
public final onHttpCheck:Signal<{url:String, success:Bool, failReason:Any}>;
|
public final onHttpCheck:Signal<{url:String, success:Bool, failReason:Any}>;
|
||||||
public final onHttpFailure:Signal<{url:String, failReason:String, handle:Any}>;
|
public final onHttpFailure:Signal<{url:String, failReason:String, handle:HTTPResponse}>;
|
||||||
public final onHttpSuccess:Signal<{url:String, handle:Any}>;
|
public final onHttpSuccess:Signal<{url:String, handle:HTTPResponse}>;
|
||||||
public final onKey:Signal<{keyCode:Int, isHeld:Bool}>;
|
public final onKey:Signal<{keyCode:Int, isHeld:Bool}>;
|
||||||
public final onKeyUp:Signal<Int>;
|
public final onKeyUp:Signal<Int>;
|
||||||
public final onModemMessage:Signal<{
|
public final onModemMessage:Signal<{
|
||||||
@ -60,8 +61,8 @@ class KernelEvents {
|
|||||||
private final onDiskTrigger:SignalTrigger<String> = Signal.trigger();
|
private final onDiskTrigger:SignalTrigger<String> = Signal.trigger();
|
||||||
private final onDiskEjectTrigger:SignalTrigger<String> = Signal.trigger();
|
private final onDiskEjectTrigger:SignalTrigger<String> = Signal.trigger();
|
||||||
private final onHttpCheckTrigger:SignalTrigger<{url:String, success:Bool, failReason:Any}> = Signal.trigger();
|
private final onHttpCheckTrigger:SignalTrigger<{url:String, success:Bool, failReason:Any}> = Signal.trigger();
|
||||||
private final onHttpFailureTrigger:SignalTrigger<{url:String, failReason:String, handle:Any}> = Signal.trigger();
|
private final onHttpFailureTrigger:SignalTrigger<{url:String, failReason:String, handle:HTTPResponse}> = Signal.trigger();
|
||||||
private final onHttpSuccessTrigger:SignalTrigger<{url:String, handle:Any}> = Signal.trigger();
|
private final onHttpSuccessTrigger:SignalTrigger<{url:String, handle:HTTPResponse}> = Signal.trigger();
|
||||||
private final onKeyTrigger:SignalTrigger<{keyCode:Int, isHeld:Bool}> = Signal.trigger();
|
private final onKeyTrigger:SignalTrigger<{keyCode:Int, isHeld:Bool}> = Signal.trigger();
|
||||||
private final onKeyUpTrigger:SignalTrigger<Int> = Signal.trigger();
|
private final onKeyUpTrigger:SignalTrigger<Int> = Signal.trigger();
|
||||||
private final onModemMessageTrigger:SignalTrigger<{
|
private final onModemMessageTrigger:SignalTrigger<{
|
||||||
|
22
src/kernel/http/HTTPFailure.hx
Normal file
22
src/kernel/http/HTTPFailure.hx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package kernel.http;
|
||||||
|
|
||||||
|
using lua.Table;
|
||||||
|
|
||||||
|
class HTTPFailure {
|
||||||
|
|
||||||
|
public final reason:String;
|
||||||
|
public final statusCode:Null<StatusCode>;
|
||||||
|
public final headers:Map<String,String>;
|
||||||
|
public final body:String;
|
||||||
|
|
||||||
|
@:allow(kernel.http)
|
||||||
|
private function new(failReason: String, ?handle: cc.HTTP.HTTPResponse) {
|
||||||
|
this.reason = failReason;
|
||||||
|
if (handle != null){
|
||||||
|
this.statusCode = handle.getResponseCode();
|
||||||
|
this.headers = handle.getResponseHeaders().toMap();
|
||||||
|
this.body = handle.readAll();
|
||||||
|
handle.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
28
src/kernel/http/HTTPRequest.hx
Normal file
28
src/kernel/http/HTTPRequest.hx
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package kernel.http;
|
||||||
|
|
||||||
|
using tink.CoreApi;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Wrapper for the native
|
||||||
|
**/
|
||||||
|
class Http {
|
||||||
|
public static function request(url:String,?body:String,?options: String):Future<Outcome<HTTPResponse,HTTPFailure>> {
|
||||||
|
return new Future<Outcome<HTTPResponse,HTTPFailure>>((resolve) -> {
|
||||||
|
KernelEvents.instance.onHttpFailure.handle((params)->{
|
||||||
|
if (params.url == url){
|
||||||
|
resolve(Failure(new HTTPFailure(params.failReason,params.handle)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
KernelEvents.instance.onHttpSuccess.handle((params) -> {
|
||||||
|
if (params.url == url){
|
||||||
|
resolve(Success(new HTTPResponse(params.handle)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cc.HTTP.request(url,body);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
17
src/kernel/http/HTTPResponse.hx
Normal file
17
src/kernel/http/HTTPResponse.hx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package kernel.http;
|
||||||
|
|
||||||
|
using lua.Table;
|
||||||
|
|
||||||
|
class HTTPResponse {
|
||||||
|
|
||||||
|
public final statusCode:StatusCode;
|
||||||
|
public final headers:Map<String,String>;
|
||||||
|
public final body:String;
|
||||||
|
|
||||||
|
@:allow(kernel.http)
|
||||||
|
private function new(handle: cc.HTTP.HTTPResponse) {
|
||||||
|
this.statusCode = handle.getResponseCode();
|
||||||
|
this.headers = handle.getResponseHeaders().toMap();
|
||||||
|
this.body = handle.readAll();
|
||||||
|
}
|
||||||
|
}
|
65
src/kernel/http/StatusCode.hx
Normal file
65
src/kernel/http/StatusCode.hx
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
package kernel.http;
|
||||||
|
|
||||||
|
@:enum abstract StatusCode(Int) from Int {
|
||||||
|
var Continue = 100;
|
||||||
|
var SwitchingProtocols = 101;
|
||||||
|
var Processing = 102;
|
||||||
|
var OK = 200;
|
||||||
|
var Created = 201;
|
||||||
|
var Accepted = 202;
|
||||||
|
var NonAuthoritativeInformation = 203;
|
||||||
|
var NoContent = 204;
|
||||||
|
var ResetContent = 205;
|
||||||
|
var PartialContent = 206;
|
||||||
|
var MultiStatus = 207;
|
||||||
|
var AlreadyReported = 208;
|
||||||
|
var IMUsed = 226;
|
||||||
|
var MultipleChoices = 300;
|
||||||
|
var MovedPermanently = 301;
|
||||||
|
var Found = 302;
|
||||||
|
var SeeOther = 303;
|
||||||
|
var NotModified = 304;
|
||||||
|
var UseProxy = 305;
|
||||||
|
var SwitchProxy = 306;
|
||||||
|
var TemporaryRedirect = 307;
|
||||||
|
var PermanentRedirect = 308;
|
||||||
|
var BadRequest = 400;
|
||||||
|
var Unauthorized = 401;
|
||||||
|
var PaymentRequired = 402;
|
||||||
|
var Forbidden = 403;
|
||||||
|
var NotFound = 404;
|
||||||
|
var MethodNotAllowed = 405;
|
||||||
|
var NotAcceptable = 406;
|
||||||
|
var ProxyAuthenticationRequired = 407;
|
||||||
|
var RequestTimeout = 408;
|
||||||
|
var Conflict = 409;
|
||||||
|
var Gone = 410;
|
||||||
|
var LengthRequired = 411;
|
||||||
|
var PreconditionFailed = 412;
|
||||||
|
var PayloadTooLarge = 413;
|
||||||
|
var URITooLong = 414;
|
||||||
|
var UnsupportedMediaType = 415;
|
||||||
|
var RangeNotSatisfiable = 416;
|
||||||
|
var ExpectationFailed = 417;
|
||||||
|
var ImATeapot = 418;
|
||||||
|
var MisdirectedRequest = 421;
|
||||||
|
var UnprocessableEntity = 422;
|
||||||
|
var Locked = 423;
|
||||||
|
var FailedDependency = 424;
|
||||||
|
var UpgradeRequired = 426;
|
||||||
|
var PreconditionRequired = 428;
|
||||||
|
var TooManyRequests = 429;
|
||||||
|
var RequestHeaderFieldsTooLarge = 431;
|
||||||
|
var UnavailableForLegalReasons = 451;
|
||||||
|
var InternalServerError = 500;
|
||||||
|
var NotImplemented = 501;
|
||||||
|
var BadGateway = 502;
|
||||||
|
var ServiceUnavailable = 503;
|
||||||
|
var GatewayTimeout = 504;
|
||||||
|
var HTTPVersionNotSupported = 505;
|
||||||
|
var VariantAlsoNegotiates = 506;
|
||||||
|
var InsufficientStorage = 507;
|
||||||
|
var LoopDetected = 508;
|
||||||
|
var NotExtended = 510;
|
||||||
|
var NetworkAuthenticationRequired = 511;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user