From 92d66376952a1fec419eddf96b4653cbd1802cd1 Mon Sep 17 00:00:00 2001 From: Onek8 Date: Wed, 28 Oct 2026 13:53:25 -0700 Subject: [PATCH] P2P cx index --- .../leenkx/logicnode/CreateLeenkxNode.hx | 2 +- .../logicnode/LeenkxCloseConnectionNode.hx | 1 - .../leenkx/network/torrent/LeenkxClient.hx | 47 ++++++++++--------- .../Sources/leenkx/network/torrent/Types.hx | 1 + 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/leenkx/Sources/leenkx/logicnode/CreateLeenkxNode.hx b/leenkx/Sources/leenkx/logicnode/CreateLeenkxNode.hx index ef58123a..c620e399 100644 --- a/leenkx/Sources/leenkx/logicnode/CreateLeenkxNode.hx +++ b/leenkx/Sources/leenkx/logicnode/CreateLeenkxNode.hx @@ -74,7 +74,7 @@ class CreateLeenkxNode extends LogicNode { lnxCn.isRelay = property1 == true; lnxCn.onOpen = function() { - Leenkx.data.set(net_Url, lnxCn.lastPeerCount); + Leenkx.data.set(net_Url, lnxCn.lastPeerIndex); Leenkx.id.set(net_Url, lnxCn.lastPeerId); sock.onopen(); }; diff --git a/leenkx/Sources/leenkx/logicnode/LeenkxCloseConnectionNode.hx b/leenkx/Sources/leenkx/logicnode/LeenkxCloseConnectionNode.hx index b2262467..1340ab44 100644 --- a/leenkx/Sources/leenkx/logicnode/LeenkxCloseConnectionNode.hx +++ b/leenkx/Sources/leenkx/logicnode/LeenkxCloseConnectionNode.hx @@ -23,7 +23,6 @@ class LeenkxCloseConnectionNode extends LogicNode { var id:String = inputs.length > 2 ? inputs[2].get() : null; if (id != null && lnxCn != null) { lnxCn.peers.remove(id); - lnxCn.seenFired.remove(id); } runOutput(0); return; diff --git a/leenkx/Sources/leenkx/network/torrent/LeenkxClient.hx b/leenkx/Sources/leenkx/network/torrent/LeenkxClient.hx index 74f20fcf..27bf9d58 100644 --- a/leenkx/Sources/leenkx/network/torrent/LeenkxClient.hx +++ b/leenkx/Sources/leenkx/network/torrent/LeenkxClient.hx @@ -26,11 +26,11 @@ class LeenkxClient { public var peers:Map = []; public var seen:Map = []; - public var seenFired:Map = []; public var pkToAddress:Map = []; public var isRelay:Bool = false; public var lastPeerCount:Null = null; public var lastPeerId:String = null; + public var lastPeerIndex:Int = 0; public var serverAddress:String = null; public var heartbeatTimer:Null = null; @@ -545,29 +545,32 @@ class LeenkxClient { function sawPeer(pk:String, ek:String, identifier:String):Void { var t = now(); var addr = addressFromPk(pk); - var myAddr = address(); - var isSelf = (addr == myAddr); - var alreadySeen = seenFired.exists(addr); - if (!isSelf) { - if (!peers.exists(addr) || peers[addr].last + timeout < t) { - peers.set(addr, {pk: pk, ek: ek, last: t}); - var packet = makePacket({y: PacketType.Ping}); - sendRaw(packet); - } else { - var p = peers.get(addr); - p.ek = ek; - p.last = t; - } - if (!alreadySeen) { - seenFired.set(addr, true); - lastPeerId = addr; - if (onOpen != null) onOpen(); - if (onSeen != null) onSeen(addr); - if (addr == identifier) { - serverAddress = addr; - if (onServer != null) onServer(addr); + if (addr == address()) return; + if (!peers.exists(addr) || peers[addr].last + timeout < t) { + var index = 0; + var taken = true; + while (taken) { + taken = false; + index++; + for (k in peers.keys()) { + if (peers[k].index == index) { taken = true; break; } } } + peers.set(addr, {pk: pk, ek: ek, last: t, index: index}); + lastPeerIndex = index; + lastPeerId = addr; + if (onOpen != null) onOpen(); + if (onSeen != null) onSeen(addr); + if (addr == identifier) { + serverAddress = addr; + if (onServer != null) onServer(addr); + } + var packet = makePacket({y: PacketType.Ping}); + sendRaw(packet); + } else { + var p = peers.get(addr); + p.ek = ek; + p.last = t; } } diff --git a/leenkx/Sources/leenkx/network/torrent/Types.hx b/leenkx/Sources/leenkx/network/torrent/Types.hx index 91a462e8..0ef8cd8e 100644 --- a/leenkx/Sources/leenkx/network/torrent/Types.hx +++ b/leenkx/Sources/leenkx/network/torrent/Types.hx @@ -22,6 +22,7 @@ typedef PeerInfo = { var pk:String; var ek:String; var last:Float; + var index:Int; } typedef Packet = {