// A bot which responds to `jarvis` with a box const Space = require('../space'); const Socket = require('../socket'); const tilekeys = require('../utils/tilekeys'); const Search = require('../tools/search'); const Queue = require('../tools/queue'); var main = new Socket(); function equals(arg1,arg2){ // Just takes the specific case argument of each being an int pair return arg1[0] == arg2[0] && arg1[1] == arg2[1] } main.on('open', ()=>{ // Tries to identify itself with a cursor movement 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); function detect(pos, send){ if (equals(pos[0],coords)){ main.off('cursor', detect); identity(send); } } }) function identity(send){ sender = send; // Communicates local send to tileHandler as a global variable console.log('identity activated'); main.on('tileUpdate', tileHandler); } var sender; function tileHandler(send, source, tiles){ if (send == sender) return; let locs = tilekeys(tiles); detectPrompt(send, tiles, locs); } var search = new Space(); search.adhoc('jarvis'); // The search space is the word jarvis, so whenever that's caught, a relevant function can be called. var read = new Search(search); var expire = {}; function detectPrompt(send, tiles, locs){ // tries to detect the prompt ('jarvis') and calls respond if found. for (let i=0; i 0) respond(results); expire[loc] = setTimeout(() => {read.del(loc)}, 30000); } } let response = new Space(); response.adhoc('yes, my liege'); let writes = new Queue(1000, 200, (elems) => main.write(elems)); function respond(coord){ console.log('called at', coord); response.loc = coord; writes.enqueue(...response.towrite()); }