nuǝɯ pǝɥsᴉꞁod mǝu
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    primus-lockypublic

    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

    install

    npm i primus-locky

    Downloadsweekly downloads

    82

    version

    1.2.3

    license

    MIT

    repository

    github.com

    last publish

    collaborators

    • avatar
    • avatar
    • avatar
    • avatar