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 = 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 } }