forked from LeenkxTeam/LNXSDK
P2P cx index
This commit is contained in:
@ -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();
|
||||
};
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@ typedef PeerInfo = {
|
||||
var pk:String;
|
||||
var ek:String;
|
||||
var last:Float;
|
||||
var index:Int;
|
||||
}
|
||||
|
||||
typedef Packet = {
|
||||
|
||||
Reference in New Issue
Block a user