forked from LeenkxTeam/LNXSDK
66 lines
1.7 KiB
Haxe
66 lines
1.7 KiB
Haxe
package leenkx.logicnode;
|
|
#if lnx_torrent
|
|
import leenkx.network.Leenkx;
|
|
import leenkx.network.torrent.Torrent;
|
|
#end
|
|
|
|
class OnTorrentEventNode extends LogicNode {
|
|
public var property0:String;
|
|
public var eventValue:Dynamic;
|
|
var net_Url:String;
|
|
var torrent:Dynamic;
|
|
var registeredTorrents:Map<String, Bool> = new Map();
|
|
|
|
public function new(tree:LogicTree) {
|
|
super(tree);
|
|
}
|
|
|
|
override function run(from:Int) {
|
|
#if lnx_torrent
|
|
var connection = inputs[1].get();
|
|
if (connection == null) return;
|
|
var id = inputs[2].get();
|
|
if (id == null) return;
|
|
net_Url = connection._url;
|
|
|
|
var socket = Leenkx.connections[connection._url];
|
|
var client = socket != null ? socket.client : null;
|
|
var t = client != null ? client.get(id) : (Std.isOfType(id, Torrent) ? id : null);
|
|
if (t == null) return;
|
|
|
|
var event = property0 != null ? property0 : "done";
|
|
var self = this;
|
|
var fire = function(v:Dynamic) {
|
|
self.eventValue = v;
|
|
self.runOutput(0);
|
|
};
|
|
var key = t.infoHashHex != null ? t.infoHashHex : "v2:" + t.infoHashV2Hex;
|
|
var alreadyRegistered = registeredTorrents.exists(key);
|
|
if (!alreadyRegistered) registeredTorrents.set(key, true);
|
|
switch (event) {
|
|
case "ready":
|
|
if (t.ready) fire(null);
|
|
else if (!alreadyRegistered) t.on("ready", function() fire(null));
|
|
case "piece" | "wire" | "metadata" | "error":
|
|
if (!alreadyRegistered) t.on(event, function(v) fire(v));
|
|
default:
|
|
if (t.done) fire(null);
|
|
else if (!alreadyRegistered) t.on("done", function() fire(null));
|
|
}
|
|
torrent = t;
|
|
#end
|
|
}
|
|
|
|
override function get(from:Int):Dynamic {
|
|
#if lnx_torrent
|
|
return switch (from) {
|
|
case 1: torrent;
|
|
case 2: eventValue;
|
|
default: throw "Unreachable";
|
|
}
|
|
#else
|
|
return null;
|
|
#end
|
|
}
|
|
}
|