137 lines
5.6 KiB
Haxe
137 lines
5.6 KiB
Haxe
package leenkx.logicnode;
|
|
import iron.object.Object;
|
|
#if js
|
|
import leenkx.network.Types;
|
|
import leenkx.network.Util;
|
|
import leenkx.network.Leenkx;
|
|
#end
|
|
import leenkx.system.Event;
|
|
|
|
|
|
class CreateLeenkxNode extends LogicNode {
|
|
public var net_Url: String;
|
|
public var data: Dynamic;
|
|
public var client: Dynamic;
|
|
public var value: String;
|
|
public var listener: TEvent = null;
|
|
|
|
public function new(tree:LogicTree) {
|
|
super(tree);
|
|
}
|
|
|
|
override function run(from:Int) {
|
|
#if js
|
|
net_Url = inputs[1].get();
|
|
if (net_Url == null) return;
|
|
if(Leenkx.connections[net_Url] == null){
|
|
var object = tree.object;
|
|
value = Leenkx.onLoadEvent;
|
|
listener = Event.add(value, onEvent, tree.object.uid);
|
|
client = new leenkx.network.Leenkx(net_Url, object);
|
|
|
|
} else {
|
|
return;
|
|
}
|
|
#end
|
|
}
|
|
|
|
function onEvent() {
|
|
#if js
|
|
var window:haxe.DynamicAccess<Dynamic> = untyped js.Browser.window;
|
|
var lxCxNew = window.get('lxNew');
|
|
|
|
var lxCn:Dynamic = lxCxNew(net_Url);
|
|
|
|
lxCn.on("connections", function(c) {
|
|
leenkx.network.Leenkx.data.set(net_Url, c + 1);
|
|
leenkx.network.Leenkx.connections[net_Url].onconnections();
|
|
});
|
|
lxCn.on("message", function(address,message) {
|
|
leenkx.network.Leenkx.data.set(net_Url, message);
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].onmessage();
|
|
});
|
|
lxCn.on("seen", function(address) {
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].onseen();
|
|
});
|
|
lxCn.on("left", function(address) {
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].onleft();
|
|
});
|
|
lxCn.on("server", function(address) {
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].onserver();
|
|
});
|
|
lxCn.on("ping", function(address) {
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].onping();
|
|
});
|
|
lxCn.on("timeout", function(address) {
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].ontimeout();
|
|
});
|
|
lxCn.on("rpc", function(address, call, args, nonce) {
|
|
leenkx.network.Leenkx.data.set(net_Url, call);
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
call(args);
|
|
leenkx.network.Leenkx.connections[net_Url].onrpc();
|
|
});
|
|
lxCn.on("rpc-response", function(address, nonce, response) {
|
|
leenkx.network.Leenkx.id.set(net_Url, address);
|
|
leenkx.network.Leenkx.connections[net_Url].onrpcresponse();
|
|
});
|
|
lxCn.on("wireleft", function(wirecount, wire) {
|
|
leenkx.network.Leenkx.data.set(net_Url, wirecount);
|
|
leenkx.network.Leenkx.id.set(net_Url, wire.peerId);
|
|
leenkx.network.Leenkx.connections[net_Url].onwireleft();
|
|
});
|
|
lxCn.on("wireseen", function(wirecount, wire) {
|
|
leenkx.network.Leenkx.data.set(net_Url, wirecount);
|
|
leenkx.network.Leenkx.id.set(net_Url, wire.peerId);
|
|
leenkx.network.Leenkx.connections[net_Url].onwireseen();
|
|
});
|
|
lxCn.on("torrent", function(identifier, torrent) {
|
|
leenkx.network.Leenkx.data.set(net_Url, torrent);
|
|
leenkx.network.Leenkx.id.set(net_Url, identifier);
|
|
leenkx.network.Leenkx.connections[net_Url].ontorrent();
|
|
});
|
|
|
|
lxCn.on("tracker", function(identifier) {
|
|
leenkx.network.Leenkx.id.set(net_Url, identifier);
|
|
leenkx.network.Leenkx.connections[net_Url].ontracker();
|
|
});
|
|
|
|
lxCn.on("announce", function(identifier) {
|
|
leenkx.network.Leenkx.id.set(net_Url, identifier);
|
|
leenkx.network.Leenkx.connections[net_Url].onannounce();
|
|
});
|
|
window.set("lx_" + net_Url, lxCn);
|
|
Leenkx.connections[net_Url].client = lxCn;
|
|
var script = '
|
|
window.addEventListener("beforeunload", function (e) {
|
|
leenkx.network.Leenkx.connections.h["' + net_Url + '"].client.destroy();
|
|
delete e["returnValue"];
|
|
});
|
|
';
|
|
js.Syntax.code('(1, eval)({0})', script.toString());
|
|
runOutput(0);
|
|
#end
|
|
}
|
|
|
|
|
|
override function get(from: Int): Dynamic {
|
|
#if js
|
|
return switch (from) {
|
|
case 1: Leenkx.connections[net_Url];
|
|
case 2: Leenkx.id.get(net_Url);
|
|
default: throw "Unreachable";
|
|
}
|
|
#else
|
|
return null;
|
|
#end
|
|
}
|
|
|
|
}
|
|
|