aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/jarvis.js57
1 files changed, 31 insertions, 26 deletions
diff --git a/examples/jarvis.js b/examples/jarvis.js
index 0dad87e..31a3443 100644
--- a/examples/jarvis.js
+++ b/examples/jarvis.js
@@ -18,38 +18,43 @@ const wwrap = require('../utils/writewrap');
const Claims = require('../tools/claim');
//// The queue of all writes to be sent to the server @ 200chars/1000ms
-var writes = new sched.Queue(1000, 200, (elems) => main.write(elems));
-var main = new Socket();
-var claims = new Claims(detectPrompt);
+class MetaSocket extends Socket{
+ constructor(world='', delayms=1000){
+ super(world);
+ let self = this;
+ sched.Queue.call(self, 1000, 200, (elems) => self.write(elems));
+ Claims.call(self);
+ id.call(self);
+ wwrap.call(self);
+ self.sender;
+ self.on('init',(send)=>{
+ self.sender = send;
+ });
+ }
+}
+var main = new MetaSocket('testworld');
// See ident.js for further documentation, but this basically sets up init functions
-id(main, initOnce, init, deinit);
-writeListen = new wwrap(main);
-
-var sender;
-function init(send){
- sender = send; // tileUpdates require knowledge of the sender
- setTimeout(()=>{writes.enable()},1000); // Would fail if a write were added because it would be within a second of cursor send
- writes.enqueue(genNotif().towrite());
-}
-function deinit(){
- writes.disable();
-}
+main.on('init', (send)=>{
+ setTimeout(()=>{main.enable()},1000);
+ main.enqueue(genNotif().towrite());
+});
+main.on('close', ()=>main.disable());
-function initOnce(){
+main.on('initOnce', ()=>{
timect();
main.on('tileUpdate', tileHandler); // Should only be active after the "control space" of the notification has been established
-}
+});
//// Management utilities
// When a tile changes, processes data into usable form and runs every function in `funcs` w/ that data.
// Note that functions can edit inputs
function tileHandler(send, source, tiles){
- if (send == sender) return;
+ if (send == main.sender) return;
let tiledata = maketiles(tiles);
- claims.handle(send, tiledata.tilespaces, tiledata.locs);
+ main.handle(send, tiledata.tilespaces, tiledata.locs);
}
//// "userspace" functions for responses, like to tileUpdates
@@ -81,14 +86,14 @@ function notifRefresh(){
let diff = newnotif.copy();
if (typeof notif !== 'undefined') diff.comb(notif, comb.sub);
notif = newnotif;
- if (notifClaim) claims.unclaim(notifClaim);
- notifClaim = claims.claim(newnotif, protectArea);
+ if (notifClaim) main.unclaim(notifClaim);
+ notifClaim = main.claim(newnotif, protectArea);
return (diff.towrite());
}
function timect(){
minsUp++;
- writes.enqueue(notifRefresh());
+ main.enqueue(notifRefresh());
setTimeout(timect, 60*1000);
}
@@ -99,7 +104,7 @@ function protectArea(send, tiles, locs, id, space, ctrl){
let diff = space.copy(); // Acts as a window for tile (only see relevant data)
diff.comb(tile, comb.flip(comb.unmask));
diff.comb(tile, comb.sub);
- writes.enqueue(diff.towrite())
+ main.enqueue(diff.towrite())
}
}
@@ -108,7 +113,7 @@ search.adhoc('jarvis'); // The search space is the word jarvis, so whenever that
var read = new Search(search);
var expire = {};
-function detectPrompt(send, tiles, locs){ // tries to detect the prompt ('jarvis') and calls respond if found.
+main.on('fallback', (send, tiles, locs) => { // tries to detect the prompt ('jarvis') and calls respond if found.
for (let i=0; i<locs.length; i++){
let loc = locs[i];
if (read.has(loc)){
@@ -120,7 +125,7 @@ function detectPrompt(send, tiles, locs){ // tries to detect the prompt ('jarvis
if (results.length > 0) respond(results, send);
expire[loc] = setTimeout(() => {read.del(loc); delete expire[loc];}, 30000);
}
-}
+});
let response = new Space();
response.adhoc('yes, my liege');
@@ -131,7 +136,7 @@ function respond(coord, send){
console.log('called at', coord);
callct += 1;
response.loc = coord;
- writes.enqueue(response.towrite().concat(notifRefresh()));
+ main.enqueue(response.towrite().concat(notifRefresh()));
read.update(response);
setTimeout(() => {limits.splice(limits.indexOf(send))}, 5*1000);
limits.push(send);