diff options
author | Holden Rohrer <holden.rohrer@gmail.com> | 2020-01-08 18:06:16 -0500 |
---|---|---|
committer | Holden Rohrer <holden.rohrer@gmail.com> | 2020-01-08 18:06:16 -0500 |
commit | 526ff0f8a9e57b4a0090a3ee02209b64e6af6f28 (patch) | |
tree | eef0b5c1ab1652913d089d3dc4bcc09f3287b04a | |
parent | 20702bf37916a7466bb3d8ca6865965d39c64f22 (diff) |
cleaned up jarvis
-rw-r--r-- | examples/jarvis.js | 65 |
1 files changed, 40 insertions, 25 deletions
diff --git a/examples/jarvis.js b/examples/jarvis.js index 433d2b0..065100d 100644 --- a/examples/jarvis.js +++ b/examples/jarvis.js @@ -10,62 +10,77 @@ const Search = require('../tools/search'); const Queue = require('../tools/queue'); const ri = require('../utils/rectintersect'); +//// Basic handling on open and close of the socket var main = new Socket(); -main.on('open', ()=>{ // Tries to identify itself with a cursor movement +main.on('open', open); +main.on('close', deinit); + +//// tileUpdates require knowledge of the prog's identity (sender) +var sender; +main.on('tileUpdate', tileHandler); + +//// Configurable helpers for utilities +function init(send){ + sender = send; + writes.enable(); +} + +function deinit(){ + writes.disable(); +} + +function initOnce(){ + timect(); +} + +var funcs = [protectArea, detectPrompt]; + +//// Management utilities +// "Pings" the server with a cursor location which is then detected +function open(){ console.log('socket opened'); let coords = [Math.floor(Math.random()*100000+16),Math.floor(Math.random()*100000+16)]; main.cursor(coords); - main.on('cursor',detect); + main.once('cursor', detect); function detect(pos, send){ if (vec.equals(pos[0],coords)){ main.off('cursor', detect); identity(send); } } -}); - -main.on('close', ()=>{ - writes.disable() -}); - -var sender; // Global variable that holds identity()'s `send` for tileHandler -var initialized = false; +} +// identity records the identity discovered from the cursor and calls configurable init and initOnce functions +var initialized = false; //"Initialize once" strategy function identity(send){ - sender = send; console.log('identity activated'); if (! initialized){ initialized = true; initOnce(); } - init(); - main.on('tileUpdate', tileHandler); -} - -function init(){ - writes.enable(); -} - -function initOnce(){ - timect(); + init(send); } +// 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; let locs = tilekeys(tiles); let tilespaces = {}; - for (let i=0; i<locs.length; i++){ - let loc = locs[i]; + for (loc of locs){ tilespaces[loc] = new Space(); tilespaces[loc].fromfetch(tiles, [loc, loc], conform=false); } - [protectArea, detectPrompt].forEach(func => { + funcs.forEach(func => { func(send, tilespaces, locs); }); } -notifsrc = '\ +//// "userspace" functions for responses, like to tileUpdates +var writes = new Queue(1000, 200, (elems) => main.write(elems)); + +var notifsrc = '\ \n\ For a node.js YWOT api: \n\ & http://github.com/feynmansfedora/ywot-clean \n\ |