Mercurial > hg > nodescore
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; |