Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tlhunter/node-nextplayer
Redis backed Round-Robin player turn control
https://github.com/tlhunter/node-nextplayer
Last synced: 25 days ago
JSON representation
Redis backed Round-Robin player turn control
- Host: GitHub
- URL: https://github.com/tlhunter/node-nextplayer
- Owner: tlhunter
- Created: 2015-10-13T06:29:11.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2016-01-02T05:43:42.000Z (almost 9 years ago)
- Last Synced: 2024-04-08T16:32:44.047Z (7 months ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/nextplayer
- Size: 11.7 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NextPlayer
NextPlayer is a tool for keeping track of whose turn it is, Round Robin style.
Players can be added or removed at will.
NextPlayer relies on Redis for tracking data.
This is a very generic module, it can be used for anything which needs to track Round Robin data where entries can be dynamically added and removed.
Operations are atomic, relying on Redis MULTI calls.If there's an existing module which does the same thing please let me know!
## Example Usage
```javascript
var NextPlayer = require('./index.js');
var nextplayer = new NextPlayer();
var ns = "game-12345";nextplayer.add(ns, ["Larry", "Curly", "Shemp", "Moe"], function(err, list) {
console.log('ADD', list); // Larry, Curly, Shemp, Moe
nextplayer.remove(ns, "Shemp", function(err, list) {
console.log('REMOVE', list); // Larry, Curly, Moe
nextplayer.step(ns, function(err, list) {
console.log('STEP1', list); // Curly, Moe, Larry
nextplayer.step(ns, function(err, list) {
console.log('STEP2', list); // Moe, Larry, Curly
nextplayer.list(ns, function(err, list) {
console.log('LIST', list); // Moe, Larry, Curly
nextplayer.destroy(ns, function(err) {
console.log('FIN');
process.exit();
});
});
});
});
});
});
```## Installation
```bash
npm install nextplayer
```## Methods
Note: If you want to use a Promise-based API, consider using [Bluebird's Promisfy All](https://github.com/petkaantonov/bluebird/blob/master/API.md#promisepromisifyallobject-target--object-options---object) feature.
### Constructor
Creates a new instance of NextPlayer. An instance isn't tied to a particular game, think of it as a reusable service. Instead it's tied to a particular Redis key naming convention.
#### Options
* **keyPrefix**: A List key representing the list of all players
* **redis**: (Optional) A fully configured and instantiated redis client
* **redisOptions**: (Optional) A list of redis connection options, defaults to local```javascript
var nextplayer = new NextPlayer({
keyPrefix: 'list-',
redis: redis.createClient({host: 'localhost', port: 6370})
});
```### .add(`namespace`, `identifiers`, `callback`)
If an array is provided, inserts a list of players to go last. Otherwise, adds a single player.
```javascript
nextplayer.add(namespace, "tod", callback);
nextplayer.add(namespace, ["bev", "jim"], callback);function callback(err, newList) {}
```### .set(`namespace`, `identifiers`, `callback`)
Much like `add()`, except any players already in the list will be replaced with this entirely new list.
```javascript
nextplayer.set(namespace, "tod", callback);
nextplayer.set(namespace, ["bev", "jim"], callback);function callback(err, newList) {}
```### .remove(`namespace`, `identifier`, `callback`)
Removes a single player, by identifier, from the list.
```javascript
nextplayer.remove(namespace, "ted", callback);function callback(err, newList) {}
```### .step(`namespace`, `callback`)
Cycles through the players in the list, so the current player is now the last player, and the next becomes current.
```javascript
nextplayer.step(namespace, callback);function callback(err, newList) {}
```### .list(`namespace`, `callback`)
Gets an array of all players in the list, starting with the current player.
```javascript
nextplayer.list(namespace, callback);function callback(err, list) {}
```### .current(`namespace`, `callback`)
Returns just the current player from the list.
```javascript
nextplayer.current(namespace, callback);function callback(err, current) {}
```### .destroy(`namespace`, `callback`)
Destroys all keys associated with the provided namespace. Doesn't destroy the NextPlayer instance.
```javascript
nextplayer.destroy(namespace, callback);function callback(err) {}
```