Files
LNXSDK/leenkx/Sources/leenkx/logicnode/NetworkHttpRequestNode.hx
2025-01-22 16:18:30 +01:00

106 lines
2.0 KiB
Haxe

package leenkx.logicnode;
import iron.object.Object;
class NetworkHttpRequestNode extends LogicNode {
public var property0: String;
public var callbackType: Int;
public var statusInt: Int;
public var response: Dynamic;
public var errorOut: String;
public var headers: Map<String,String>;
public var parameters: Map<String,String>;
public function new(tree:LogicTree) {
super(tree);
}
override function run(from:Int) {
var url = inputs[1].get();
if(url == null){return;}
headers = inputs[2].get();
parameters = inputs[3].get();
var printErrors: Bool = inputs[4].get();
var request = new haxe.Http(url);
#if js
request.async = true;
#end
if(headers != null){
for (k in headers.keys()) {
request.addHeader( k, headers[k]);
}
}
if(parameters != null){
for (k in parameters.keys()) {
request.addParameter( k, parameters[k]);
}
}
request.onStatus = function(status:Int) {
callbackType = 1;
statusInt = status;
runOutput(0);
}
request.onBytes = function(data:haxe.io.Bytes) {
callbackType = 2;
response = data;
runOutput(0);
}
request.onData = function(data:String) {
callbackType = 3;
response = data;
runOutput(0);
}
request.onError = function(error:String){
callbackType = 4;
errorOut = error;
if(printErrors) {
trace ("Error: " + error );
}
runOutput(0);
}
try {
if(property0 == "post") {
var bytes = inputs[6].get();
if(bytes == true){
var data:haxe.io.Bytes = inputs[5].get();
request.setPostBytes(data);
request.request(true);
}else{
var data:Dynamic = inputs[5].get();
request.setPostData(data.toString());
request.request(true);
}
} else {
request.request(false);
}
} catch( e : Dynamic ) {
trace("Could not complete request: " + e);
}
callbackType = 0;
runOutput(0);
}
override function get(from: Int): Dynamic {
return switch (from) {
case 1: callbackType;
case 2: statusInt;
case 3: response;
case 4: errorOut;
default: throw "Unreachable";
}
}
}