Skip to content

Primus locky is a primus plugin for locky, it provides a room based locking.

Notifications You must be signed in to change notification settings

lemonde/primus-locky

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

primus-locky

Build Status Dependency Status devDependency Status

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) {
      // Decode user id from headers.
      // This function should be implemented by you.
      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
  }
});

autoLock

Define if the lock will be take automatically by the first user or the last user in the room. Default to true.

new Primus(server, {
  locky: {
    autoLock: false
  }
});

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:.

// Join the room of the resource "article:13".
spark.join('locky:article:13');

primus.lockyRoom(resource)

This method can be used to target a locky room. It's the same API as primus.room().

primus.lockyRoom('myresource').send('hello');

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.

License

MIT

About

Primus locky is a primus plugin for locky, it provides a room based locking.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •