Skip to content
This repository has been archived by the owner on Mar 2, 2022. It is now read-only.

Commit

Permalink
Merge branch 'fix-boxxy'
Browse files Browse the repository at this point in the history
  • Loading branch information
Felix Van der Jeugt committed Apr 29, 2014
2 parents df06947 + e293a1c commit 6b18957
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 3 deletions.
41 changes: 39 additions & 2 deletions boxxy/src/boxxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
}

Expand Down
10 changes: 9 additions & 1 deletion boxxy/src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

0 comments on commit 6b18957

Please sign in to comment.