diff --git a/lib/dtimer.js b/lib/dtimer.js index 4bd256a..066ac4c 100644 --- a/lib/dtimer.js +++ b/lib/dtimer.js @@ -209,7 +209,7 @@ DTimer.prototype.leave = function (cb) { .nodeify(cb); }; -DTimer.prototype.post = function (ev, delay, cb) { +DTimer.prototype.post = function (ev, delay, opts, cb) { var self = this; var evId; @@ -217,6 +217,17 @@ DTimer.prototype.post = function (ev, delay, cb) { throw new Error('delay argument must be of type number'); } + // Parse the options + if (typeof opts === 'function') { + cb = opts; + opts = undefined; + } + if (opts === undefined) { + opts = {}; + } + var updateTime = opts.updateTime == null ? true : opts.updateTime; + var updateMessage = opts.updateMessage == null ? true : opts.updateMessage; + // Copy event. ev = JSON.parse(JSON.stringify(ev)); @@ -245,9 +256,15 @@ DTimer.prototype.post = function (ev, delay, cb) { return this._redisTime() .then(function (now) { - return self._pub.multi() - .zadd(self._keys.ei, now+delay, evId) - .hset(self._keys.ed, evId, msg) + var zaddArgs = [ self._keys.ei, now+delay, evId ]; + if (!updateTime) { + zaddArgs.splice(1, 0, 'NX'); + } + var multi = self._pub.multi() + return multi + .zadd.apply(multi, zaddArgs) + [updateMessage ? 'hset' : 'hsetnx'](self._keys.ed, evId, msg) + .hsetnx(self._keys.ed, evId, msg) .evalsha( scripts.update.sha, 5,