diff --git a/boxxy/src/boxxy.js b/boxxy/src/boxxy.js index 7b96d49..af338b9 100644 --- a/boxxy/src/boxxy.js +++ b/boxxy/src/boxxy.js @@ -4,7 +4,8 @@ function Boxxy() { /* State */ this.frozen = false; - this.frozenScore = null; + this.frozenLaps = null; + this.frozenTeams = null; this.notification = null; this.circuitLength = 0; this.startTime = null; @@ -19,6 +20,37 @@ function Boxxy() { this.onUpdatePosition = function(position) {}; this.onUpdate = function() {}; } +function clone(obj) { + // Handle the 3 simple types, and null or undefined + if (null == obj || "object" != typeof obj) return obj; + + // Handle Date + if (obj instanceof Date) { + var copy = new Date(); + copy.setTime(obj.getTime()); + return copy; + } + + // Handle Array + if (obj instanceof Array) { + var copy = []; + for (var i = 0, len = obj.length; i < len; i++) { + copy[i] = clone(obj[i]); + } + return copy; + } + + // Handle Object + if (obj instanceof Object) { + var copy = {}; + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]); + } + return copy; + } + + throw new Error("Unable to copy obj! Its type isn't supported."); +} Boxxy.prototype.putState = function(stateDelta) { if(stateDelta.notification != null) this.notification = stateDelta.notification; @@ -28,7 +60,12 @@ Boxxy.prototype.putState = function(stateDelta) { // This signifies the change melted -> frozen if(stateDelta.frozen != null && stateDelta.frozen && !this.frozen) { - this.frozenScore = this.teamsByScore(); + if(stateDelta.laps && stateDelta.teams) { + this.laps = stateDelta.laps; + this.teams = stateDelta.teams; + } + this.frozenLaps = clone(this.laps); + this.frozenTeams = clone(this.teams); this.frozen = true; } diff --git a/boxxy/src/server.js b/boxxy/src/server.js index e9f735f..0bf0e26 100644 --- a/boxxy/src/server.js +++ b/boxxy/src/server.js @@ -29,7 +29,15 @@ var boxxyState = boxxy.initialize(); io.sockets.on('connection', function(socket) { if (boxxyState.frozen) { - socket.emit('/state', boxxyState.frozenScore); + state = {}; + state.circuitLength = boxxyState.circuitLength; + state.startTime = boxxyState.startTime; + state.stopTime = boxxyState.stopTime; + state.stations = boxxyState.stations; + state.laps = boxxyState.frozenLaps; + state.teams = boxxyState.frozenTeams; + state.frozen = true; + socket.emit('/state', state); } else { socket.emit('/state', boxxyState); }