This commit is contained in:
Mark Nadal 2020-05-13 17:44:37 -07:00
parent 9d1307fcf0
commit 0bedff821b
4 changed files with 76 additions and 6 deletions

16
gun.js
View File

@ -923,7 +923,7 @@
if(cat.jam){ return cat.jam.push([cb, as]) }
cat.jam = [[cb,as]];
gun.get(function go(msg, eve){
if(u === msg.put && (tmp = Object.keys(cat.root.opt.peers).length) && ++acks <= tmp){
if(u === msg.put && (tmp = Object.keys(cat.root.opt.peers).length) && ++acks <= tmp){ // TODO: BUG! If NodeJS && people connec to it, this peer count will be wrong. See other ref of this bug.
return;
}
eve.rid(msg);
@ -1311,6 +1311,7 @@
}
if((tmp = eve.wait) && (tmp = tmp[at.id])){ clearTimeout(tmp) }
eve.ack = (eve.ack||0)+1;
// TODO: BUG! If NodeJS && people connec to it, these peer counts will be wrong + see other ref of this bug:
if(!to && u === data && eve.ack <= (opt.acks || Object.keys(at.root.opt.peers).length)){ return }
if((!to && (u === data || at.soul || at.link || (link && !(0 < link.ack))))
|| (u === data && (tmp = Object.keys(at.root.opt.peers).length) && (!to && (link||at).ack < tmp))){
@ -1436,6 +1437,8 @@
opt.pack = opt.pack || (opt.memory? (opt.memory * 999 * 999) : 300000000) * 0.3;
opt.puff = opt.puff || 9; // IDEA: do a start/end benchmark, divide ops/result.
var puff = setTimeout.turn || setTimeout;
var parse = JSON.parseAsync || function(t,cb,r){ var u; try{ cb(u, JSON.parse(t,r)) }catch(e){ cb(e) } }
var json = JSON.stringifyAsync || function(v,cb,r,s){ var u; try{ cb(u, JSON.stringify(v,r,s)) }catch(e){ cb(e) } }
var dup = root.dup, dup_check = dup.check, dup_track = dup.track;
@ -1503,16 +1506,23 @@
;(function(){
var SMIA = 0;
var message, loop;
mesh.hash = function(msg, cb){ var data;
if(!cb){ data = msg.put }
console.log("HASH:", data);
json(data, function(err, text){
console.log("STRINGIFIED!", text);
})
}
function each(peer){ mesh.say(message, peer) }
var say = mesh.say = function(msg, peer){
if(this.to){ this.to.next(msg) } // compatible with middleware adapters.
if(this && this.to){ this.to.next(msg) } // compatible with middleware adapters.
if(!msg){ return false }
var id, hash, tmp, raw, ack = msg['@'];
var DBG = msg.DBG, S; if(!peer){ S = +new Date ; DBG && (DBG.y = S) }
var meta = msg._||(msg._=function(){});
if(!(id = msg['#'])){ id = msg['#'] = String.random(9) }
!loop && dup_track(id);//.it = it(msg); // track for 9 seconds, default. Earth<->Mars would need more! // always track, maybe move this to the 'after' logic if we split function.
if(!(hash = msg['##']) && u !== msg.put && !meta.via && ack){ say.hash(msg); return } // TODO: Should broadcasts be hashed?
if(!(hash = msg['##']) && u !== msg.put && !meta.via && ack){ console.log('HASH:', msg); mesh.hash(msg); return } // TODO: Should broadcasts be hashed?
if(!(raw = meta.raw)){
raw = mesh.raw(msg);
if(hash && ack){

View File

@ -148,6 +148,66 @@ function value(s){
}
}
module.exports = yson;
yson.stringifyAsync = function(data, done, replacer, space, ctx){
ctx = ctx || {};
ctx.text = ctx.text || "";
ctx.up = [ctx.at = {d: data}];
ctx.done = done;
ctx.i = 0;
var j = 0;
ify();
function ify(){
var at = ctx.at, data = at.d, tmp;
//console.log(at.k, typeof data, data);
if(at.i > 0){ ctx.text += ',' }
if(u !== (tmp = at.k)){ ctx.text += '"'+tmp+'":' }
switch(typeof data){
case 'boolean':
ctx.text += ''+data;
break;
case 'string':
//ctx.text += JSON.stringify(data);
ctx.text += '"'+data+'"';//JSON.stringify(data);
break;
case 'number':
ctx.text += data;
break;
case 'object':
if(!data){
ctx.text += 'null';
break;
}
if(data instanceof Array){
ctx.text += '[';
at = {i: -1, as: data, up: at};
at.l = data.length;
ctx.up.push(ctx.at = at);
break;
}
ctx.text += '{';
at = {i: -1, ok: Object.keys(data).sort(), as: data, up: at};
at.l = at.ok.length;
ctx.up.push(ctx.at = at);
break;
}
while(1+at.i >= at.l){
ctx.text += (at.ok? '}' : ']');
at = ctx.at = at.up;
}
if(++at.i < at.l){
if(tmp = at.ok){
at.d = at.as[at.k = tmp[at.i]];
} else {
at.d = at.as[at.i];
}
if(++j < 9){ return ify() } else { j = 0 }
sI(ify);
return;
}
ctx.done(u, ctx.text);
}
}
if(typeof window != ''+u){ window.YSON = yson }
try{ if(typeof module != ''+u){ module.exports = yson } }catch(e){}
}());

2
sea.js
View File

@ -1426,8 +1426,6 @@
SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019
var noop = function(){}, u;
var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.
var rel_is = Gun.val.rel.is;
var obj_ify = Gun.obj.ify;
// TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.
})(USE, './index');

View File

@ -23,9 +23,11 @@
<script src="../lib/radisk.js"></script>
<script src="../lib/store.js"></script>
<script src="../lib/rindexed.js"></script>
<script src="../lib/yson.js"></script>
<script src="./rad/rad.js"></script>
<script src="./sea/sea.js"></script>
<script src="./common.js"></script>
<script>
if(location.search){