primus-locky
Primus locky is a primus extension for locky, it provides a room based locking.
This plugin requires primus-emitter, primus-rooms.
Install
npm install primus-locky
Usage
var http = require('http');
var Locky = require('locky');
var Primus = require('primus');
var PrimusLocky = require('primus-locky');
var server = http.createServer();
var primus = new Primus(server, {
locky: {
client: new Locky(),
unserializeSpark: getUserIdFromSpark
}
});
primus.use('locky', PrimusLocky);
Options
client
Since primus-locky doesn't depends directly from locky, you must inject a locky client in the options.
new Primus(server, {
locky: {
client: new Locky()
}
})
unserializeSpark
With the room based locking, the user must be determined from the spark, if your client are logged you can retrieve it from them.
new Primus(server, {
locky: {
unserializeSpark: function unserializeSpark(spark, cb) {
var user = getUserFromHeaders(spark.headers);
cb(null, user);
}
}
});
heartbeatInterval
Define the time between each heartbeat, by default locky.ttl - 1000
. This time should be less than the locky TTL, else the lock will be losed between each tick.
new Primus(server, {
locky: {
heartbeatInterval: 2000
}
});
Join room
You can find how to join a room in primus-room plugin. To join a locky room, the only thing to do is to prefix it with locky:
.
spark.join('locky:article:13');
Room based locking
The room based locking principle is very simple, it can be resume in four rules:
- When a user joins a room:
- if the room is empty, he takes the lock.
- if the room is not empty, nothing.
- When a user leaves a room:
- if he was alone in the room, nothing.
- if there is other persons in the room, a random user takes the lock.
Events
The events are emitted only in the resource room.
"locky:lock"
Emitted when a resource is locked by a user.
primusClient.on('locky:lock', function (resource, user) { ... });
"locky:unlock"
Emitted a resource is unlocked.
primusClient.on('locky:unlock', function (resource) { ... });
"locky:expire"
Emitted the lock on a resource has expired.
primusClient.on('locky:expire', function (resource) { ... });
License
MIT