summaryrefslogtreecommitdiff
path: root/lib/room.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/room.js')
-rw-r--r--lib/room.js109
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, '&lt;').replace(GREATER_THAN, '&gt;').replace(AMPERSAND, '&amp;');
+ 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);
+};