mirror of
https://github.com/amark/gun.git
synced 2025-06-03 20:56:43 +00:00
axe doc music dht :)
This commit is contained in:
parent
d2c4e7c8e8
commit
1cd0c08ab0
29
axe.js
29
axe.js
@ -60,6 +60,20 @@
|
||||
// with one common superpeer (with ready failovers)
|
||||
// in case the p2p linear latency is high.
|
||||
// Or there could be plenty of other better options.
|
||||
|
||||
/*
|
||||
AXE should have a couple of threshold items...
|
||||
let's pretend there is a variable max peers connected
|
||||
mob = 10000
|
||||
if we get more peers than that...
|
||||
we should start sending those peers a remote command
|
||||
that they should connect to this or that other peer
|
||||
and then once they (or before they do?) drop them from us.
|
||||
sake of the test... gonna set that peer number to 1.
|
||||
The mob threshold might be determined by other factors,
|
||||
like how much RAM or CPU stress we have.
|
||||
*/
|
||||
opt.mob = opt.mob || Infinity;
|
||||
var mesh = opt.mesh = opt.mesh || Gun.Mesh(at);
|
||||
console.log("AXE enabled.");
|
||||
|
||||
@ -256,7 +270,7 @@
|
||||
this.to.next(peer);
|
||||
if(!peer.url){ return }
|
||||
axe.up[peer.id] = peer;
|
||||
})
|
||||
});
|
||||
at.on('bye', function(peer){ this.to.next(peer);
|
||||
if(peer.url){ delete axe.up[peer.id] }
|
||||
Gun.obj.map(peer.routes, function(route, hash){
|
||||
@ -266,6 +280,19 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// handle rebalancing a mob of peers:
|
||||
at.on('hi', function(peer){
|
||||
this.to.next(peer);
|
||||
if(peer.url){ return } // I am assuming that if we are wanting to make an outbound connection to them, that we don't ever want to drop them unless our actual config settings change.
|
||||
var count = Object.keys(opt.peers).length;
|
||||
if(opt.mob >= count){ return } // TODO: Make dynamic based on RAM/CPU also. Or possibly even weird stuff like opt.mob / axe.up length?
|
||||
mesh.say({dam: 'mob', mob: count, peers: Object.keys(axe.up)}, peer);
|
||||
setTimeout(function(){ mesh.bye(peer) }, 9); // something with better perf?
|
||||
});
|
||||
at.on('bye', function(peer){
|
||||
this.to.next(peer);
|
||||
});
|
||||
}
|
||||
|
||||
function joindht(dht, soul, pids) {
|
||||
|
@ -32,12 +32,17 @@
|
||||
<script src="../../gun/lib/meta.js"></script>
|
||||
<script src="../../gun/lib/normalize.js"></script>
|
||||
<script async src="../../gun/lib/fun.js"></script>
|
||||
|
||||
<script async src="../../gun/lib/music.js"></script>
|
||||
<!-- script async src="https://edide.io/music.lib"></script -->
|
||||
|
||||
<script>
|
||||
var gun = Gun('https://guntest.herokuapp.com/gun');
|
||||
var gun = Gun(['https://guntest.herokuapp.com/gun', 'http://localhost:8765/gun']);
|
||||
|
||||
;(window.onhashchange = function(){
|
||||
var file = (location.hash||'').slice(1);
|
||||
var S = +new Date;
|
||||
$('#page').empty();
|
||||
gun.get('test/gun/docs/'+file).get('what').map().on(function render(data, i){
|
||||
if(window.LOCK){ return }
|
||||
var p = $('#page').children().get(i);
|
||||
@ -60,6 +65,7 @@ meta.edit({
|
||||
use: function(eve){
|
||||
console.log('on');
|
||||
}, on: function(eve){
|
||||
if($(eve.target).closest('p').length){ return }
|
||||
var edit = this;
|
||||
setTimeout(function(){ meta.flip(false) },1);
|
||||
var doc = $('#page').attr('contenteditable', 'true');
|
||||
@ -71,10 +77,10 @@ meta.edit({
|
||||
if(eve.which != 13){ return }
|
||||
eve.preventDefault();
|
||||
var r = window.getSelection().getRangeAt(0);
|
||||
var c = r.commonAncestorContainer;
|
||||
var c = r.commonAncestorContainer, p;
|
||||
r.deleteContents();
|
||||
c.splitText(r.startOffset);
|
||||
var p = $(c).parent(), n = $("<"+p.get(0).tagName+">"), f;
|
||||
var p = c.splitText? $(c.splitText(r.startOffset)).parent() : $(c);
|
||||
var n = $("<"+p.get(0).tagName+">"), f;
|
||||
p.contents().each(function(){
|
||||
if(this === c){ return f = true }
|
||||
if(!f){ return }
|
||||
@ -131,9 +137,9 @@ meta.edit({
|
||||
|
||||
;(function(){
|
||||
|
||||
meta.edit({name: "Layout", combo: ['E','L']});
|
||||
meta.edit({name: "Layout", combo: ['L']});
|
||||
|
||||
meta.edit({name: "Fill", combo: ['E','L','F'],
|
||||
meta.edit({name: "Fill", combo: ['L','F'],
|
||||
use: function(eve){},
|
||||
on: function(eve){
|
||||
var on = meta.tap();
|
||||
@ -144,13 +150,13 @@ meta.edit({
|
||||
up: function(eve){}
|
||||
});
|
||||
|
||||
meta.edit({name: "Add", combo: ['E','L','A']});
|
||||
meta.edit({name: "Row", combo: ['E','L','A', 'R'],
|
||||
meta.edit({name: "Add", combo: ['L','A']});
|
||||
meta.edit({name: "Row", combo: ['L','A', 'R'],
|
||||
on: function(eve){
|
||||
meta.tap().append('<div style="min-height: 9em; padding: 2%;">');
|
||||
}
|
||||
});
|
||||
meta.edit({name: "Columns", combo: ['E','L','A','C'],
|
||||
meta.edit({name: "Columns", combo: ['L','A','C'],
|
||||
on: function(eve){
|
||||
var on = meta.tap().addClass('center'), tmp, c;
|
||||
var html = '<div class="unit col" style="min-height: 9em; padding: 2%;"></div>';
|
||||
@ -161,7 +167,7 @@ meta.edit({
|
||||
})
|
||||
}
|
||||
});
|
||||
meta.edit({name: "Text", combo: ['A','T'],
|
||||
meta.edit({name: "Text", combo: ['L','A','T'],
|
||||
on: function(eve){
|
||||
var tag = $('<p>text</p>');
|
||||
meta.tap().append(tag);
|
||||
@ -169,6 +175,59 @@ meta.edit({
|
||||
}
|
||||
});
|
||||
|
||||
}());
|
||||
|
||||
;(function(){
|
||||
var song = {};
|
||||
// TODO:
|
||||
// 1. Manually OR automatically load music.js API, dependencies, and modules. - FINE for now
|
||||
// 2. only export music API, not meta, not dom, not mouselock system, not UI/html, etc. better module isolation and export.
|
||||
// 3. `var wave = Wave('a').play()` // also on `Music.now`
|
||||
// defaults... instrument: pure tones, volume curve: |\_ , speed curve: 0.5
|
||||
// 4. `wave.blur(0.5).itch(0.5);`
|
||||
// 5. wave.long(2); // how long in seconds each note plays, optionally: wave.pace(60) is bpm
|
||||
// 6. wave.loud(0.5); // 0% to 100% volume loudness of device output.
|
||||
// 7. wave.vary(0.5); // slows down or speeds up wiggle per harmonic
|
||||
// 8:
|
||||
// wave structure, does ToneJS allow us to change the sine wave smoothness/type continuously or is it a pre-fixed type?
|
||||
// wave structure: /\/\/, |_|, /|/, \|\| do some research with ToneJS whether these are dynamic or fixed
|
||||
// wave.itch(); // changes the shape of the wiggle from smooth sine to square or triangle
|
||||
// wave.blur(220hz); // blur may not apply/work on pure notes other than filtering them.
|
||||
|
||||
meta.edit({name: "Music", combo: ['M']});
|
||||
|
||||
meta.edit({name: "Play", combo: ['M','P'],
|
||||
on: function(eve){
|
||||
// TODO: We still need to add to meta API ability to change name.
|
||||
if(song.play){
|
||||
music.stop();
|
||||
song.play = false;
|
||||
return;
|
||||
}
|
||||
song.play = true;
|
||||
music.stop();
|
||||
setTimeout(function(){
|
||||
song.now = music.play($('#page').text());
|
||||
},250);
|
||||
}
|
||||
});
|
||||
|
||||
meta.edit({name: "Blur", combo: ['M','B'],
|
||||
on: function(eve){
|
||||
$(document).on('mousemove.tmp', function(eve){
|
||||
var x = eve.pageX;
|
||||
song.now.blur(x);
|
||||
});
|
||||
},
|
||||
up: function(){
|
||||
$(document).off('.tmp');
|
||||
}
|
||||
});
|
||||
|
||||
$(document).on('keydown', function(eve){
|
||||
music.play(String.fromCharCode(eve.which));
|
||||
});
|
||||
|
||||
}());
|
||||
</script>
|
||||
</body>
|
||||
|
1175
lib/music.js
Normal file
1175
lib/music.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -31,6 +31,12 @@ var superpeer3 = Gun(AXE({shard: 's~z'}));
|
||||
via the browser, so they all go to superpeer1.com
|
||||
then 2/3 of them should get sharded to superpeer2 & superpeer3
|
||||
|
||||
first all connect to:
|
||||
..s1-----s2--s3
|
||||
./\.\.
|
||||
b1.b2.b3
|
||||
|
||||
then be load balanced to:
|
||||
..s1--s2--s3
|
||||
./....|....\.
|
||||
b1....b2....b3
|
||||
@ -101,12 +107,12 @@ describe("Put ACK", function(){
|
||||
var peers = [], i = env.config.servers;
|
||||
while(i--){
|
||||
var tmp = (env.config.port + (i + 1));
|
||||
if(port != tmp){ // ignore ourselves
|
||||
//if(port != tmp){ // ignore ourselves
|
||||
peers.push('http://'+ env.config.IP + ':' + tmp + '/gun');
|
||||
}
|
||||
//}
|
||||
}
|
||||
console.log(port, " connect to ", peers);
|
||||
var gun = Gun({file: env.i+'data', peers: peers, web: server});
|
||||
var gun = Gun({file: env.i+'data', peers: peers, web: server, mob: 1});
|
||||
global.gun = gun;
|
||||
server.listen(port, function(){
|
||||
test.done();
|
||||
@ -129,6 +135,15 @@ describe("Put ACK", function(){
|
||||
try{ indexedDB.deleteDatabase('radata') }catch(e){}
|
||||
var env = test.props;
|
||||
var gun = Gun('http://'+ env.config.IP + ':' + (env.config.port + 1) + '/gun');
|
||||
|
||||
// SOME NEXT TEST HERE LOL
|
||||
var mesh = gun.back('opt.mesh');
|
||||
mesh.hear['mob'] = function(msg, peer){
|
||||
// TODO: NOTE, code AXE DHT to aggressively drop new peers AFTER superpeer sends this rebalance/disconnect message that contains some other superpeers.
|
||||
console.log("we got a message!", msg);
|
||||
try{ peer.wire.close(); }catch(e){ console.log("err:", e) }
|
||||
}
|
||||
|
||||
console.log("connected to who superpeer(s)?", gun._.opt.peers);
|
||||
window.gun = gun;
|
||||
window.ref = gun.get('test');
|
||||
@ -137,41 +152,16 @@ describe("Put ACK", function(){
|
||||
return Promise.all(tests);
|
||||
});
|
||||
|
||||
return;
|
||||
return;
|
||||
return;
|
||||
return;
|
||||
return;
|
||||
return;
|
||||
return;
|
||||
return;
|
||||
it("Got Load Balanced to Different Peer", function(){
|
||||
var tests = [], i = 0;
|
||||
browsers.each(function(browser, id){
|
||||
tests.push(browser.run(function(test){
|
||||
|
||||
it("Alice", function(){
|
||||
return alice.run(function(test){
|
||||
test.async();
|
||||
console.log("I AM ALICE");
|
||||
console.log(gun._.opt.peers);
|
||||
gun.get('not-dave').put({hello: 'world'}, function(ack){
|
||||
if(ack.err){
|
||||
alice_start_did_not_save;
|
||||
}
|
||||
test.done();
|
||||
});
|
||||
});
|
||||
});
|
||||
console.log("...");
|
||||
|
||||
it("Dave", function(){
|
||||
return dave.run(function(test){
|
||||
console.log("I AM DAVE");
|
||||
console.log(gun._.opt.peers);
|
||||
});
|
||||
});
|
||||
|
||||
it("Carl", function(){
|
||||
return carl.run(function(test){
|
||||
console.log("I AM CARL");
|
||||
console.log(global.gun);
|
||||
}, {i: i += 1, config: config}));
|
||||
});
|
||||
return Promise.all(tests);
|
||||
});
|
||||
|
||||
it("All finished!", function(done){
|
||||
|
Loading…
x
Reference in New Issue
Block a user