P2P cx index

This commit is contained in:
2026-10-28 13:53:25 -07:00
parent 84bab9bbc5
commit 92d6637695
4 changed files with 27 additions and 24 deletions

View File

@ -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();
};

View File

@ -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;

View File

@ -26,11 +26,11 @@ class LeenkxClient {
public var peers:Map<String, PeerInfo> = [];
public var seen:Map<String, Float> = [];
public var seenFired:Map<String, Bool> = [];
public var pkToAddress:Map<String, String> = [];
public var isRelay:Bool = false;
public var lastPeerCount:Null<Int> = null;
public var lastPeerId:String = null;
public var lastPeerIndex:Int = 0;
public var serverAddress:String = null;
public var heartbeatTimer:Null<haxe.Timer> = 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;
}
}

View File

@ -22,6 +22,7 @@ typedef PeerInfo = {
var pk:String;
var ek:String;
var last:Float;
var index:Int;
}
typedef Packet = {