it's alive!!!!

This commit is contained in:
Mark Nadal 2022-08-03 13:59:12 -07:00
parent 3dbdd4e43c
commit cfad98b0c6
3 changed files with 49 additions and 27 deletions

41
axe.js
View File

@ -18,32 +18,47 @@
var opt = root.opt, peers = opt.peers; var opt = root.opt, peers = opt.peers;
if(false === opt.axe){ return } if(false === opt.axe){ return }
if(!Gun.window){ return } // handled by ^ lib/axe.js if(!Gun.window){ return } // handled by ^ lib/axe.js
var w = Gun.window, lS = w.localStorage || opt.localStorage || {}, loc = w.location || opt.location || {}, nav = w.navigator || opt.navigator || {};
var axe = root.axe = {}, tmp, id; var axe = root.axe = {}, tmp, id;
var mesh = opt.mesh = opt.mesh || Gun.Mesh(root); // DAM! var mesh = opt.mesh = opt.mesh || Gun.Mesh(root); // DAM!
tmp = peers[id = location.origin + '/gun'] = peers[id] || {}; tmp = peers[id = loc.origin + '/gun'] = peers[id] || {};
tmp.id = tmp.url = id; tmp.retry = tmp.retry || 0; tmp.id = tmp.url = id; tmp.retry = tmp.retry || 0;
tmp = peers[id = 'http://localhost:8765/gun'] = peers[id] || {}; tmp = peers[id = 'http://localhost:8765/gun'] = peers[id] || {};
tmp.id = tmp.url = id; tmp.retry = tmp.retry || 0; tmp.id = tmp.url = id; tmp.retry = tmp.retry || 0;
Gun.log.once("AXE", "AXE enabled: Trying to find network via (1) local peer (2) last used peers (3) a URL parameter, and last (4) hard coded peers."); Gun.log.once("AXE", "AXE enabled: Trying to find network via (1) local peer (2) last used peers (3) a URL parameter, and last (4) hard coded peers.");
Gun.log.once("AXEWarn", "Warning: AXE alpha became super slow & laggy, now in testing only mode!"); Gun.log.once("AXEWarn", "Warning: AXE is in alpha, use only for testing!");
var last = (localStorage||'')['peers'] || ''; if(last){ last += ' ' } var last = lS.peers || ''; if(last){ last += ' ' }
last += (location.search.split('peers=')[1]||'').split('&')[0]; last += ((loc.search||'').split('peers=')[1]||'').split('&')[0];
root.on('bye', function(peer){ root.on('bye', function(peer){
this.to.next(peer); this.to.next(peer);
if(!peer.url){ return } // ignore WebRTC disconnects for now.
if(!nav.onLine){ peer.retry = 1 }
if(peer.retry){ return } if(peer.retry){ return }
if(axe.fall){ delete axe.fall[peer.id || peer.url] } if(axe.fall){ delete axe.fall[peer.url || peer.id] }
(function attempt(){ (function next(){
clearTimeout(peer.attempt); if(!axe.fall){ setTimeout(next, 9); return } // not found yet
var fall = Object.keys(axe.fall||''), one = fall[(Math.random()*fall.length) >> 0]; var fall = Object.keys(axe.fall||''), one = fall[(Math.random()*fall.length) >> 0];
if(axe.fall && !fall.length){ return } if(!fall.length){ lS.peers = ''; return } // out of peers
if(peers[one]){ attempt(); return } if(peers[one]){ next(); return } // already choose
if(!one){ peer.attempt = setTimeout(attempt, 9); return }
mesh.hi(one); mesh.hi(one);
}()); }());
}); });
root.on('hi', function(peer){ // TEMPORARY! Try to connect all peers.
this.to.next(peer);
if(!peer.url){ return } // ignore WebRTC disconnects for now.
(function next(){
if(!peer.wire){ return }
if(!axe.fall){ setTimeout(next, 9); return } // not found yet
var one = (next.fall = next.fall || Object.keys(axe.fall||'')).pop();
if(!one){ return }
setTimeout(next, 99);
mesh.say({dam: 'opt', opt: {peers: one}}, peer);
}());
});
function found(text){ function found(text){
axe.fall = {}; axe.fall = {};
@ -79,9 +94,11 @@
} }
if(last){ found(last); return } if(last){ found(last); return }
try{ fetch((location.search.split('axe=')[1]||'').split('&')[0] || location.axe || 'https://raw.githubusercontent.com/wiki/amark/gun/volunteer.dht.md').then(function(res){ try{ fetch(((loc.search||'').split('axe=')[1]||'').split('&')[0] || loc.axe || 'https://raw.githubusercontent.com/wiki/amark/gun/volunteer.dht.md').then(function(res){
return res.text() return res.text()
}).then(found).catch(function(){ }).then(function(text){
found(lS.peers = text);
}).catch(function(){
found(); // nothing found(); // nothing
})}catch(e){found()} })}catch(e){found()}
} }

4
gun.js
View File

@ -1506,7 +1506,7 @@
//Type.obj.map(peer || opt.peers, each); // in case peer is a peer list. //Type.obj.map(peer || opt.peers, each); // in case peer is a peer list.
loop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack loop = 1; var wr = meta.raw; meta.raw = raw; // quick perf hack
var i = 0, p; while(i < 9 && (p = (pl||'')[i++])){ var i = 0, p; while(i < 9 && (p = (pl||'')[i++])){
if(!(p = ps[p])){ continue } if(!(p = ps[p] || (peer||'')[p])){ continue }
mesh.say(msg, p); mesh.say(msg, p);
} }
meta.raw = wr; loop = 0; meta.raw = wr; loop = 0;
@ -1619,7 +1619,7 @@
if(peer.id){ if(peer.id){
opt.peers[peer.url || peer.id] = peer; opt.peers[peer.url || peer.id] = peer;
} else { } else {
tmp = peer.id = peer.id || String.random(9); tmp = peer.id = peer.id || peer.url || String.random(9);
mesh.say({dam: '?', pid: root.opt.pid}, opt.peers[tmp] = peer); mesh.say({dam: '?', pid: root.opt.pid}, opt.peers[tmp] = peer);
delete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self delete dup.s[peer.last]; // IMPORTANT: see https://gun.eco/docs/DAM#self
} }

View File

@ -138,32 +138,37 @@ function start(root){
axe.up[p.pid] = p; // update same to be same. axe.up[p.pid] = p; // update same to be same.
return; return;
} }
};
root.on('hi', function(peer){
this.to.next(peer);
if(!peer.url){ return } if(!peer.url){ return }
axe.up[peer.pid || peer.id] = peer; axe.up[peer.pid] = peer;
}); if(axe.stay){ axe.stay() }
}()); };
;(function(){ // OPT MODULE
mesh.hear['opt'] = function(msg, peer){ mesh.hear['opt'] = function(msg, peer){
if(msg.ok){ return } if(msg.ok){ return }
var tmp = msg.opt; var tmp = msg.opt;
if(!tmp){ return } if(!tmp){ return }
tmp = tmp.peers; tmp = tmp.peers;
if(!tmp || 'string' != typeof tmp){ return } if(!tmp || 'string' != typeof tmp){ return }
if(axe.up[tmp] || 99 <= Object.keys(axe.up).length){ return } // 99 TEMPORARILY UNTIL BENCHMARKED! if(99 <= Object.keys(axe.up).length){ return } // 99 TEMPORARILY UNTIL BENCHMARKED!
mesh.hi({id: tmp, url: tmp, retry: 9}); mesh.hi({id: tmp, url: tmp, retry: 9});
if(peer){ mesh.say({dam: 'opt', ok: 1, '@': msg['#']}, peer) } if(peer){ mesh.say({dam: 'opt', ok: 1, '@': msg['#']}, peer) }
} }
setInterval(function(tmp){
if(!(tmp = root.stats && root.stats.stay)){ return } axe.stay = function(){
(tmp.axe = tmp.axe || {}).up = Object.keys(axe.up||{}); clearTimeout(axe.stay.to);
},1000 * 60); axe.stay.to = setTimeout(function(tmp, urls){
if(!(tmp = root.stats && root.stats.stay)){ return }
urls = {}; Object.keys(axe.up||'').forEach(function(p){
p = (axe.up||'')[p]; if(p.url){ urls[p.url] = {} }
});
(tmp.axe = tmp.axe || {}).up = urls;
}, 1000 * 9);//1000 * 60);
};
setTimeout(function(tmp){ setTimeout(function(tmp){
if(!(tmp = root.stats && root.stats.stay && root.stats.stay.axe)){ return } if(!(tmp = root.stats && root.stats.stay && root.stats.stay.axe)){ return }
setTimeout.each(tmp.up||[], function(url){ mesh.hear.opt({opt: {peers: url}}) }); if(!(tmp = tmp.up)){ return }
if(!(tmp instanceof Array)){ tmp = Object.keys(tmp) }
setTimeout.each(tmp||[], function(url){ mesh.hear.opt({opt: {peers: url}}) });
},1000); },1000);
}()); }());