1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
'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, 1,0,0,0, 1,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, 0,0,0,0],
[0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0],
[0,0,0,0, 0,0,0,0, 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.channel < pattern.length && data.step < pattern[data.channel].length) {
var state = data.state == 1 ? 1 : 0;
pattern[data.channel][data.step] = 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);
};
|