diff options
Diffstat (limited to 'lib/room.js')
| -rw-r--r-- | lib/room.js | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/lib/room.js b/lib/room.js new file mode 100644 index 0000000..2a8f5fe --- /dev/null +++ b/lib/room.js @@ -0,0 +1,109 @@ +'use strict'; + +var IO; + +var LESS_THAN = /</g, GREATER_THAN = />/g, AMPERSAND = /&/g; +function sanitize (s) { + if (s) + return s.replace(LESS_THAN, '<').replace(GREATER_THAN, '>').replace(AMPERSAND, '&'); + return ""; +} +function sanitizeJSON (json) { + try { + var data = JSON.parse(sanitize(json)); + return data; + } catch (SyntaxError) { + console.log('Invalid JSON: ' + json); + return false; + } +} + +function Grid(){ + var base = this; + var tempo = 125; + var pattern = [ + [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] + ]; + function init(){ + bind(); + } + function bind(){ + } + base.getState = function(){ + return { + 'pattern': pattern, + 'tempo': tempo + } + } + base.setNote = function(data){ + if (data.step < pattern.length && data.channel < pattern[data.step].length) { + var state = data.state == 1 ? 1 : 0; + pattern[data.step][data.channel] = state; + } + } + init(); +} + +function Connection (socket) { + var base = this; + + function init(){ + bind(); + } + function bind(){ + socket.on('event-join', join); + socket.on('event-mouse', mouse); + socket.on('event-chat', chat); + + socket.on('event-note', note); + socket.on('event-tempo', tempo); + + socket.on('disconnect', disconnect); + } + function join(json){ + socket.broadcast.emit("event-join", json); + socket.emit("event-grid", grid.getState()); + } + function mouse(json){ + socket.broadcast.emit("event-mouse", json); + } + function chat(json){ + socket.broadcast.emit("event-chat", json); + } + function note(json){ + var data = sanitizeJSON(json); + if (data) { + grid.setNote(data); + socket.broadcast.emit("event-note", data); + } + } + function tempo(json){ + socket.broadcast.emit("event-tempo", json); + } + function disconnect(json){ + base = null; + } + init(); +} + +var grid = new Grid (); + +exports.connect = function(io, socket) { + IO = IO || io; + var user = new Connection (socket); +}; |
