comparison nodescore.js @ 49:ddb09f0a67fd

begining of attempt at modularisation
author tzara <rc-web@kiben.net>
date Sat, 13 Oct 2012 00:17:52 +0000
parents 8fc7155aa3ac
children a0ae699ac444
comparison
equal deleted inserted replaced
48:eee1afe759d7 49:ddb09f0a67fd
5 nodescore.kiben.net 5 nodescore.kiben.net
6 nodescore@kiben.net 6 nodescore@kiben.net
7 7
8 //////////////////////////////////////////// 8 ////////////////////////////////////////////
9 */ 9 */
10
10 var sio = require('socket.io') 11 var sio = require('socket.io')
11 , http = require('http') 12 , http = require('http')
13 , ch = require('./chronometer')
12 , fs = require('fs') 14 , fs = require('fs')
13 , static = require('node-static'); 15 , static = require('node-static');
16
14 // run webserver serving static html 17 // run webserver serving static html
15 //////////////////////////////////////////// 18 ////////////////////////////////////////////
16 var clientFiles = new static.Server('./www'); 19 var clientFiles = new static.Server('./www');
17 var httpServer = http.createServer( 20 var httpServer = http.createServer(
18 function(request, response) { 21 function(request, response) {
22 }); 25 });
23 }); 26 });
24 27
25 httpServer.listen(8889); 28 httpServer.listen(8889);
26 29
27
28 var pinging=0 30 var pinging=0
29 console.log("ping set to 0") 31 console.log("ping set to 0")
30 32
31 //////////////////////////////////////////// 33 ////////////////////////////////////////////
32 // connect to websockets 34 // connect to websockets
33 //////////////////////////////////////////// 35 ////////////////////////////////////////////
34 36
35 var io = sio.listen(httpServer) 37 io = sio.listen(httpServer)
36 , nicknames = {}; 38 , nicknames = {};
37 39
38 io.set('log level', 3); // reduce logging 40 //var sequencer = require('./sequencer')
39 41
42 io.set('log level', 1); // reduce logging
40 io.sockets.on('connection', function (socket) { 43 io.sockets.on('connection', function (socket) {
41 44
42 socket.on('nickname', function (nick, fn) { 45 socket.on('nickname', function (nick, fn) {
43 if (nicknames[nick]) { 46 if (nicknames[nick]) {
44 fn(true); 47 fn(true);
75 78
76 socket.on('metroStop', stopMetro) 79 socket.on('metroStop', stopMetro)
77 function stopMetro () { 80 function stopMetro () {
78 metroState=0; 81 metroState=0;
79 }; 82 };
80 83
81 //////////////////////////////////////////// 84 var chronstate=0;
82 // Chronometer 85
83 //////////////////////////////////////////// 86
84 87
85 // number padding: 0 to 00 88 xdatetime = setInterval(function () {
86 89 d = ch.xdateTime()
87 function pad(number) { return (number < 10 ? '0' : '') + number } 90 socket.broadcast.emit('dateTime', d)
88 91 socket.emit('dateTime', d)
89 // the chronometer initial states 92 }, 1000)
90 var chronstate = 0; var zecsec = 0; var seconds = 0; 93
91 var mins = 0; var hours = 0; 94
92 95 socket.on('startSeq', function () { startChr();});
93 var dater
94 function dateTime() {
95 dater = setInterval( function () {
96 var datetime= new Date();
97 var now=datetime.toString()
98 socket.broadcast.emit("dateTime", now);
99 socket.emit("dateTime", now);
100 }, 1000)}
101
102 clearInterval(dater);
103 dateTime()
104
105 function chronometer() {
106
107 if (chronstate==1){
108 zecsec += 1; // set tenths of a second
109 if(zecsec > 9) { zecsec = 0; seconds += 1;}
110 if(seconds > 59) { seconds = 0;mins += 1;}
111 if(mins > 59) { mins = 0; hours += 1; }
112 var chron = pad(hours) +":"+pad(mins)+ ':'+ pad(seconds)+ ":"+ zecsec
113 setTimeout(function(){chronometer()}, 100);
114 socket.broadcast.emit('chronFromServer', chron)
115 socket.emit('chronFromServer', chron)
116 }
117 }
118
119 socket.on('startChr', function () { startChr();});
120 // if not already started start the chronometer 96 // if not already started start the chronometer
121 function startChr() { if (chronstate !== 1) { 97 function startChr() { if (chronstate !== 1) {
122 chronstate = 1; chronometer();} 98 chronstate = 1;
99 chronCtrl(1,100);
100 step(seqA);step(seqB); step(seqC); step(seqD);
101 }
123 } 102 }
124 103
125 socket.on('stopChr', function () { stopChr();} ); 104
126 function stopChr() { chronstate = 0; } 105 socket.on('stopWatch', function (state) { stopWatch(state);});
127 // stop the chronometer 106 // if not already started start the chronometer
128 107 function stopWatch(state) { if (chronstate !== 1) {
108 if (state==1){
109 chronstate = 1;
110 chronCtrl(1,100);}
111 }
112
113 if (state==0){
114 chronstate = 0;
115 clearInterval(xstopwatch);
116 }
117
118 if (state==2){
119 chronstate = 0;
120 c=ch.zeroChron()
121 socket.broadcast.emit('chronFromServer', c)
122 socket.emit('chronFromServer', c)
123 }
124 }
125
126
127
128 function chronCtrl (state,interval){
129 console.log("=========================== chronstate=" + chronstate)
130 if (state==1){
131 xstopwatch = setInterval(function () {
132 c = ch.chronometer(interval/100)
133 //cz = ch.chronometer(interval/100)
134 socket.broadcast.emit('chronFromServer', c)
135 socket.emit('chronFromServer', c)
136 }, interval)
137
138 }
139 if (state==0) {
140 clearInterval(xstopwatch);
141 }
142 }
143
144
145 // stop the chronometer
146 socket.on('stopChr', function () { stopChr();});
147 function stopChr() {console.log("stop chron................................................")
148 chronCtrl(0)
149 chronstate=0
150 }
151
152 function pad(number) { return (number < 10 ? '0' : '') + number }
153
129 socket.on('resetChr', function () { resetChr();}); 154 socket.on('resetChr', function () { resetChr();});
130 function resetChr() {//clearInterval(); 155 function resetChr() {//clearInterval();
131 chronstate = 0; 156 chronstate = 0;
132 zecsec = 0; seconds = 0; 157 zecsec = 0; seconds = 0;
133 mins = 0; hours = 0; 158 mins = 0; hours = 0;
134 chronstate = 0; 159 chronstate = 0;
135 var chron = pad(hours) +":"+pad(mins)+ ':'+ pad(seconds)+ ":"+ zecsec 160 var chron = pad(hours) +":"+pad(mins)+ ':'+ pad(seconds)+ ":"+ zecsec
136 // send 0.0.0 values to display 161 // send 0.0.0 values to display
137 socket.broadcast.emit('chronFromServer', chron) 162 socket.broadcast.emit('chronFromServer', chron)
138 socket.emit('chronFromServer', chron) 163 socket.emit('chronFromServer', chron)
139 } 164 }
140 165
141 //////////////////////////////////////////// 166 ////////////////////////////////////////////
142 // magic square sequencer 167 // magic square sequencer
143 //////////////////////////////////////////// 168 ////////////////////////////////////////////
144 169 // var score = require('./score');
170 // var c = require('./chronometer');
171
172 // var mm = score.mm
145 var sequencerState = 0; 173 var sequencerState = 0;
146 174
175
176 // var srcsqr = score.srcsqr
147 var srcsqr = [] 177 var srcsqr = []
148 srcsqr[0] = [22,21,24,25,06,07]; 178 srcsqr[0] = [22,21,24,25,06,07];
149 srcsqr[1] = [20,23,27,26,05,04]; 179 srcsqr[1] = [20,23,27,26,05,04];
150 srcsqr[2] = [03,00,17,16,35,34]; 180 srcsqr[2] = [03,00,17,16,35,34];
151 srcsqr[3] = [01,02,19,18,33,32]; 181 srcsqr[3] = [01,02,19,18,33,32];
152 182
183 // var seqA = score.seqA
184 // var seqB = score.seqB
185 // var seqC = score.seqC
186 // var seqD = score.seqD
187
153 var seqA = { metrobeat:0, voice:1, name: "A", counter: 0, mm: 60, beatsinbar: 4, durations: srcsqr[0], units: [1,2,3,1,2,4]}; 188 var seqA = { metrobeat:0, voice:1, name: "A", counter: 0, mm: 60, beatsinbar: 4, durations: srcsqr[0], units: [1,2,3,1,2,4]};
154 var seqB = { metrobeat:0, voice:2, name: "B", counter: 0, mm: 120, beatsinbar: 4, durations: srcsqr[1], units: [3,2,1,1,2,3]}; 189 var seqB = { metrobeat:0, voice:2, name: "B", counter: 0, mm: 120, beatsinbar: 4, durations: srcsqr[1], units: [3,2,1,1,2,3]};
155 var seqC = { metrobeat:0, voice:3, name: "C", counter: 0, mm: 90, beatsinbar: 4, durations: srcsqr[2], units: [4,5,6,5,4,2]}; 190 var seqC = { metrobeat:0, voice:3, name: "C", counter: 0, mm: 90, beatsinbar: 4, durations: srcsqr[2], units: [4,5,6,5,4,2]};
156 var seqD = { metrobeat:0, voice:4, name: "D", counter: 0, mm: 105, beatsinbar: 4, durations: srcsqr[3], units: [2,3,4,2,3,1]}; 191 var seqD = { metrobeat:0, voice:4, name: "D", counter: 0, mm: 105, beatsinbar: 4, durations: srcsqr[3], units: [2,3,4,2,3,1]};
157 192
193
194
158 var countdowntick = function(seq){ 195 var countdowntick = function(seq){
159
160 // var tempoms = Math.floor(60000/seq.mm) 196 // var tempoms = Math.floor(60000/seq.mm)
161 var tempoms = Math.floor(60000/seq.mm) 197 var tempoms = Math.floor(60000/seq.mm)
162 console.log(tempoms) 198 //console.log(tempoms)
163 var timemultiplier=1 199 var timemultiplier=1
164 var outcount = 4; var incount=4; 200 var outcount = 4; var incount=4;
165 var time = ((seq.durations[seq.counter]+1) *timemultiplier) + 30000 + (outcount*tempoms); 201 var time = ((seq.durations[seq.counter]+1) *timemultiplier) + 30000 + (outcount*tempoms);
166 var time = Math.floor(time) 202 var time = Math.floor(time)
167 var ztime = time; 203 var ztime = time;
210 } 246 }
211 } 247 }
212 248
213 // on each beat do: 249 // on each beat do:
214 250
251
215 // push out the pulse to metronome 252 // push out the pulse to metronome
216 seq.metrobeat = (seq.metrobeat+1)%seq.beatsinbar ; 253 seq.metrobeat = (seq.metrobeat+1)%seq.beatsinbar ;
217 socket.broadcast.emit('metroPulse', tempoms, seq.voice,seq.metrobeat); 254 socket.broadcast.emit('metroPulse', tempoms, seq.voice,seq.metrobeat);
218 socket.emit('metroPulse', tempoms, seq.voice,seq.metrobeat); 255 socket.emit('metroPulse', tempoms, seq.voice,seq.metrobeat);
219 } 256 }
220 257
221 // flip the page 258 // flip the page
222 if (counter == 0){ 259 if (counter == 0){
223
224 seq.counter = (seq.counter + 1) % seq.durations.length 260 seq.counter = (seq.counter + 1) % seq.durations.length
225 socket.broadcast.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter); 261 socket.broadcast.emit("pageFlipfromserver", seq.voice, unit, time, seq.mm,seq.counter);
226 //delete tockTock; 262 //delete tockTock;
227 step(seq); 263 step(seq);
228 } 264 }
241 sequencerState = 0 277 sequencerState = 0
242 clearInterval(pulse) 278 clearInterval(pulse)
243 stopChr(); 279 stopChr();
244 }); 280 });
245 }; 281 };
246 282
247 ////////////////
248
249 socket.on('startSeq', function () {
250 if (sequencerState == 0) {
251 console.log("sequencer starting...")
252 startChr();
253
254 //////////////////////////////////////////////////////////////////
255
256 step(seqA);step(seqB); step(seqC); step(seqD);
257 ztime =-1;
258 }
259 else console.log("sequencer already started...")
260 });
261
262 step = function (seq) { 283 step = function (seq) {
263 //clearInterval(seq.boo); 284 //clearInterval(seq.boo);
264 //clearInterval(countdowntick); 285 //clearInterval(countdowntick);
265 countdowntick(seq) 286 countdowntick(seq)
266 sequencerState=1; 287 sequencerState=1;
267 }; 288 };
268 289
269 socket.on('resetSeq', function () { 290 socket.on('resetSeq', function () {
270 console.log("reset") 291 console.log("reset")
271 resetChr(); 292 resetChr();
272 }); 293 });
273 294
335 delete nicknames[socket.nickname]; 356 delete nicknames[socket.nickname];
336 socket.broadcast.emit('announcement', socket.nickname + ' disconnected'); 357 socket.broadcast.emit('announcement', socket.nickname + ' disconnected');
337 socket.broadcast.emit('nicknames', nicknames); 358 socket.broadcast.emit('nicknames', nicknames);
338 }); 359 });
339 360
361
340 }); 362 });
363
364 exports.io = io;
365 exports.sio = sio;
366 exports.httpServer = httpServer;