Readme.md
### Vapid
[![NPM VERSION](http://img.shields.io/npm/v/vapid.svg?style=flat)](https://www.npmjs.org/package/vapid)
[![CODACY BADGE](https://img.shields.io/codacy/b18ed7d95b0a4707a0ff7b88b30d3def.svg?style=flat)](https://www.codacy.com/public/44gatti/vapid)
[![CODECLIMATE-TEST-COVERAGE](https://img.shields.io/codeclimate/c/rootslab/vapid.svg?style=flat)](https://codeclimate.com/github/rootslab/vapid)
[![LICENSE](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](https://github.com/rootslab/vapid#mit-license)
![NODE VERSION](https://img.shields.io/node/v/vapid.svg)
[![TRAVIS CI BUILD](http://img.shields.io/travis/rootslab/vapid.svg?style=flat)](http://travis-ci.org/rootslab/vapid)
[![BUILD STATUS](http://img.shields.io/david/rootslab/vapid.svg?style=flat)](https://david-dm.org/rootslab/vapid)
[![DEVDEPENDENCY STATUS](http://img.shields.io/david/dev/rootslab/vapid.svg?style=flat)](https://david-dm.org/rootslab/vapid#info=devDependencies)
[![NPM MONTHLY](http://img.shields.io/npm/dm/vapid.svg?style=flat)](http://npm-stat.com/charts.html?package=vapid)
![NPM YEARLY](https://img.shields.io/npm/dy/vapid.svg)
[![NPM GRAPH](https://nodei.co/npm/vapid.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/vapid/)
> __Vapid__, a vacuous Redis implementation for connection tests, with a fully functional PubSub system for multiple clients.
> See __[lib/commands](./lib/commands)__ dir to check for implemented commands.
### Install
```bash
$ npm install vapid [-g]
```
> __install and update devDependencies__:
```bash
$ cd vapid/
$ npm install
# update
$ npm update
```
> __require__:
```javascript
var Vapid = require( 'vapid' );
```
### Run Tests
```bash
$ cd vapid/
$ npm test
```
### Run Benchmarks
> run benchmarks for __Vapid__ PubSub system with __Spade__ clients.
```bash
$ cd vapid/
$ npm run bench
```
> __NOTE__:
> - in order to use __spade__ and __hiredis__ native parser, install **_devDependencies_** .
----------------------------------------------------------------------------------------------
### Constructor
```javascript
Vapid( [ Object opt ] )
// or
new Vapid( [ Object opt ] )
```
### #Options
> Default options are listed.
```javascript
{
secret : 'secret'
, maxdb : 16
}
```
### Properties
> All properties from net.Server module are inherited : 'connections', 'maxConnections', ..
```javascript
/*
* A property that holds the initial config object.
*/
Vapid.options : Object
/*
* Hash of connected clients/sockets.
*/
Vapid.clients : Object
/*
* Command Queues for connected clients, every queue is an instance of Train.
*/
Vapid.cqueues : Object
/*
* Parsers for connected clients.
*/
Vapid.parsers : Object
/*
* An object containing implemented Redis commands.
*/
Vapid.commands : Object
/*
*
*/
Vapid.logger : Gerry
/*
* An object containing bindings between channels/patterns and clients subscribed to.
*/
Vapid.pubsub : Object
```
### Methods
> Arguments within [ ] are optional.
> All methods from net.Server module are inherited : 'listen', 'address', ..
```javascript
/*
* Enable logging to console.
*/
Vapid#cli : function ( [ Boolean enable [, Function logger [, Boolean collect_events ] ] ] ) : undefined
/*
* Send data to all connected clients ( optionally you can specify a reduced list ).
*/
Vapid#send : function ( Buffer data | String data [, Array client_id_list ] ) : Number
/*
* Server voluntarily crashed after calling Vapid#crash. All socket connections
* will be destroyed and the server will be closed.
*/
Vapid#crash : function () : Number
/*
* Mute all or a list of sockets, server discards commands until mute will be switched off.
*/
Vapid#mute : function ( [ Boolean silent [, Array socket_names ] ] ) : Number
```
### Events
> All the events from net.Server module are inherited: 'listening', 'connection'. 'close', 'error', ..
> Vapid custom events:
```javascript
/*
* A client has disconnected
*/
'disconnection' : function ( String client_id )
/*
* Emitted when server crashes, it happens after the 'close' events.
* See also Vapid#crash.
*/
'crashed' : function ( Number trashed )
```
### MIT License
> Copyright (c) 2014-present < Guglielmo Ferri : 44gatti@gmail.com >
> Permission is hereby granted, free of charge, to any person obtaining
> a copy of this software and associated documentation files (the
> 'Software'), to deal in the Software without restriction, including
> without limitation the rights to use, copy, modify, merge, publish,
> distribute, sublicense, and/or sell copies of the Software, and to
> permit persons to whom the Software is furnished to do so, subject to
> the following conditions:
> __The above copyright notice and this permission notice shall be
> included in all copies or substantial portions of the Software.__
> THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.