Skip to content

Commit

Permalink
Add an optional clock_offset property to sparks.
Browse files Browse the repository at this point in the history
Useful for syncing client clocks to server time.
  • Loading branch information
Fishrock123 committed Mar 28, 2014
1 parent d9e2c6d commit 56e6ea5
Showing 1 changed file with 30 additions and 4 deletions.
34 changes: 30 additions & 4 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,47 @@ module.exports = {
server: function (primus, options) {
primus.Spark.writable('latency', 0)

primus.transform('incoming', function (packet) {
if (options.use_clock_offset) primus.Spark.writable('clock_offset', 0)

primus.transform('incoming', options.use_clock_offset ? setBoth : setLatency)

function setLatency(packet) {
var latency = packet.data._latency
if (latency && typeof latency == 'number') {
this.latency = latency
return false
}
})
}

function setBoth(packet) {
var latency = packet.data._latency
, client_clock = packet.data._clock
, cont = true

if (latency && typeof latency == 'number') {
this.latency = latency
cont = false
}

if (client_clock && typeof client_clock == 'number') {
this.clock_offset = Date.now() - client_clock - Math.floor(this.latency / 2)
cont = false
}

return cont
}
},

client: function (primus, options) {
primus.on('incoming::pong', sendLatency)
primus.on('incoming::open', sendLatency)
primus.on('incoming::pong', options.use_clock_offset ? sendBoth : sendLatency)
primus.on('incoming::open', options.use_clock_offset ? sendBoth : sendLatency)

function sendLatency() {
this.write({ _latency: this.latency })
}

function sendBoth() {
this.write({ _latency: this.latency, _clock: Date.now() })
}
}
}

0 comments on commit 56e6ea5

Please sign in to comment.