diff options
| author | Jules Laplace <jules@okfoc.us> | 2012-09-24 16:22:07 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2012-09-24 16:22:07 -0400 |
| commit | 686106d544ecc3b6ffd4db2b665d3bc879a58d8c (patch) | |
| tree | a5b5e50237cef70e12f0745371896e96f5f6d578 /lib | |
ok
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/models.js | 52 | ||||
| -rw-r--r-- | lib/room.js | 109 |
2 files changed, 161 insertions, 0 deletions
diff --git a/lib/models.js b/lib/models.js new file mode 100644 index 0000000..824586b --- /dev/null +++ b/lib/models.js @@ -0,0 +1,52 @@ +var mongoose = require('mongoose'), + Schema = mongoose.Schema, + ObjectId = Schema.ObjectId; + +var SoundSchema = new Schema({ + soundId: ObjectId, + name: String, + url: String, + permalink: String, + filetype: String, + duration: { type: Number, default: 0 }, + date: { type: Date, default: Date.now } +}); + +var OffsetsSchema = new Schema({ + soundId: String, + offsets: { type: [Number] } +}) + +var LoopSchema = new Schema({ + soundId: String, + sampleURL: String, + startTime: Number, + endTime: Number, + duration: Number, + beats: Number, + offsets: Array, + transformations: Array, + date: { type: Date, default: Date.now } +}) + +var UserSchema = new Schema({ + userId: ObjectId, + score: { type: Number, default: 0 }, + name: String, + image: String, + date: { type: Date, default: Date.now } +}); + +var FaveSchema = new Schema({ + userId: String, + loopId: String, + date: { type: Date, default: Date.now } +}); + +var Sound = module.exports.Sound = mongoose.model('Sound', SoundSchema); +var Offsets = module.exports.Offsets = mongoose.model('Offsets', OffsetsSchema); +var Loop = module.exports.Loop = mongoose.model('Loop', LoopSchema); +var User = module.exports.User = mongoose.model('User', UserSchema); +var Fave = module.exports.Fave = mongoose.model('Fave', FaveSchema); +var Sound = module.exports.Sound = mongoose.model('Sound', SoundSchema); + 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); +}; |
