forked from LeenkxTeam/LNXSDK
178 lines
4.6 KiB
Haxe
178 lines
4.6 KiB
Haxe
package leenkx.logicnode;
|
|
import iron.object.Object;
|
|
import leenkx.network.Types;
|
|
#if lnx_torrent
|
|
import leenkx.network.Leenkx;
|
|
import leenkx.network.torrent.LeenkxClient;
|
|
import leenkx.network.torrent.TorrentClient;
|
|
import leenkx.network.torrent.peer.RtcPeerPool;
|
|
#end
|
|
import leenkx.system.Event;
|
|
|
|
|
|
class CreateLeenkxNode extends LogicNode {
|
|
public var property0: String;
|
|
public var property1: Bool;
|
|
public var property2: String;
|
|
public var property3: String;
|
|
public var net_Url: String;
|
|
public var value: String;
|
|
public var listener: TEvent = null;
|
|
|
|
public function new(tree:LogicTree) {
|
|
super(tree);
|
|
}
|
|
|
|
override function run(from:Int) {
|
|
#if lnx_torrent
|
|
net_Url = inputs[1].get();
|
|
if (net_Url == null) return;
|
|
if (Leenkx.connections[net_Url] == null) {
|
|
value = Leenkx.onLoadEvent;
|
|
listener = Event.add(value, onEvent, tree.object.uid);
|
|
new leenkx.network.Leenkx(net_Url, tree.object);
|
|
}
|
|
#end
|
|
}
|
|
|
|
function onEvent() {
|
|
if (listener != null) {
|
|
Event.removeListener(listener);
|
|
listener = null;
|
|
}
|
|
#if lnx_torrent
|
|
var sock = Leenkx.connections[net_Url];
|
|
if (sock == null) return;
|
|
if (sock.client != null) {
|
|
runOutput(0);
|
|
return;
|
|
}
|
|
var opts:leenkx.network.torrent.Types.LeenkxOptions = {deferJoin: true};
|
|
var nextInput = 2;
|
|
if (property0 == "datachannel") {
|
|
opts.transport = "datachannel";
|
|
var imode = property2 != null ? property2 : "inherit";
|
|
if (imode != "inherit") {
|
|
if (inputs.length > nextInput) {
|
|
var ice = TorrentClient.trackerUrls(inputs[nextInput].get());
|
|
if (ice != null) {
|
|
opts.iceServers = imode == "override" ? ice : RtcPeerPool.defaultIceServers.concat(ice);
|
|
}
|
|
}
|
|
nextInput++;
|
|
}
|
|
}
|
|
var tmode = property3 != null ? property3 : "inherit";
|
|
var trackers:Array<String> = null;
|
|
if (tmode != "inherit" && inputs.length > nextInput) {
|
|
trackers = TorrentClient.trackerUrls(inputs[nextInput].get());
|
|
}
|
|
opts.announce = tmode == "override" && trackers != null ? trackers
|
|
: trackers != null ? TorrentClient.defaultTrackers.concat(trackers)
|
|
: TorrentClient.defaultTrackers;
|
|
var lnxCn = new LeenkxClient(net_Url, opts);
|
|
lnxCn.isRelay = property1 == true;
|
|
|
|
lnxCn.onOpen = function() {
|
|
Leenkx.data.set(net_Url, lnxCn.lastPeerCount);
|
|
Leenkx.id.set(net_Url, lnxCn.lastPeerId);
|
|
sock.onopen();
|
|
};
|
|
lnxCn.onConnections = function(c) {
|
|
Leenkx.data.set(net_Url, c + 1);
|
|
sock.onconnections();
|
|
};
|
|
lnxCn.onMessage = function(address, message, nonce) {
|
|
Leenkx.data.set(net_Url, message);
|
|
Leenkx.id.set(net_Url, address);
|
|
sock.onmessage();
|
|
};
|
|
lnxCn.onSeen = function(address) {
|
|
Leenkx.id.set(net_Url, address);
|
|
sock.onseen();
|
|
};
|
|
lnxCn.onLeft = function(address) {
|
|
Leenkx.id.set(net_Url, address);
|
|
sock.onleft();
|
|
};
|
|
lnxCn.onServer = function(address) {
|
|
Leenkx.id.set(net_Url, address);
|
|
sock.onserver();
|
|
};
|
|
lnxCn.onPing = function(address) {
|
|
Leenkx.id.set(net_Url, address);
|
|
sock.onping();
|
|
};
|
|
lnxCn.onTimeout = function(address) {
|
|
Leenkx.id.set(net_Url, address);
|
|
sock.ontimeout();
|
|
};
|
|
lnxCn.onWireLeft = function(wirecount, wire) {
|
|
Leenkx.data.set(net_Url, wirecount);
|
|
if (wire != null && wire.peerId != null) {
|
|
Leenkx.id.set(net_Url, wire.peerId);
|
|
}
|
|
sock.onwireleft();
|
|
};
|
|
lnxCn.onWireSeen = function(wirecount, wire) {
|
|
Leenkx.data.set(net_Url, wirecount);
|
|
if (wire != null && wire.peerId != null) {
|
|
Leenkx.id.set(net_Url, wire.peerId);
|
|
}
|
|
sock.onwireseen();
|
|
};
|
|
lnxCn.onTorrent = function(identifier, torrent) {
|
|
Leenkx.data.set(net_Url, torrent);
|
|
Leenkx.id.set(net_Url, identifier);
|
|
sock.ontorrent();
|
|
};
|
|
lnxCn.onTracker = function(identifier, tracker) {
|
|
Leenkx.id.set(net_Url, identifier);
|
|
sock.ontracker();
|
|
};
|
|
lnxCn.onAnnounce = function(identifier) {
|
|
Leenkx.id.set(net_Url, identifier);
|
|
sock.onannounce();
|
|
};
|
|
lnxCn.onError = function(msg) {
|
|
Leenkx.data.set(net_Url, msg);
|
|
sock.onerror();
|
|
};
|
|
lnxCn.onTorrentAdded = function(t) {
|
|
Leenkx.torrent.set(net_Url, t);
|
|
Leenkx.file.set(net_Url, t.files);
|
|
Leenkx.data.set(net_Url, t);
|
|
sock.ontorrentadded();
|
|
};
|
|
lnxCn.onTorrentDone = function(t) {
|
|
Leenkx.data.set(net_Url, t);
|
|
sock.ontorrentdone();
|
|
};
|
|
|
|
sock.client = lnxCn;
|
|
|
|
lnxCn.connect();
|
|
#if (js && !kha_krom)
|
|
js.Browser.window.addEventListener("beforeunload", function(e) {
|
|
lnxCn.destroy();
|
|
});
|
|
#end
|
|
#end
|
|
runOutput(0);
|
|
}
|
|
|
|
override function get(from: Int): Dynamic {
|
|
#if lnx_torrent
|
|
return switch (from) {
|
|
case 1: Leenkx.connections[net_Url];
|
|
case 2: Leenkx.id.get(net_Url);
|
|
default: throw "Unreachable";
|
|
}
|
|
#else
|
|
return null;
|
|
#end
|
|
}
|
|
|
|
}
|
|
|