# socket.io-controllers

> Use ES6 Class with Socket.IO

Latest version **1.1.0** (published 2017-08-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install socket.io-controllers
pnpm add socket.io-controllers
yarn add socket.io-controllers
bun add socket.io-controllers
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2017-08-18 |
| First published | 2017-08-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 7 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Bruce Hem |
| Maintainers | brucehem |
| Keywords | socket.io, es6-class, socket.io-controllers, socket-controller |

## Links

- npm: https://www.npmjs.com/package/socket.io-controllers
- Repository: https://github.com/BruceHem/socket.io-controllers
- Homepage: https://github.com/BruceHem/socket.io-controllers#readme
- Issues: https://github.com/BruceHem/socket.io-controllers/issues
- npm.io page: https://npm.io/package/socket.io-controllers

## Dependencies (7)

- [debug](https://npm.io/package/debug.md) ^3.0.0
- [lodash](https://npm.io/package/lodash.md) ^4.17.4
- [socket.io](https://npm.io/package/socket.io.md) ^2.0.3
- [@types/node](https://npm.io/package/@types/node.md) ^8.0.24
- [@types/debug](https://npm.io/package/@types/debug.md) 0.0.30
- [@types/lodash](https://npm.io/package/@types/lodash.md) ^4.14.73
- [@types/socket.io](https://npm.io/package/@types/socket.io.md) ^1.4.29

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 1.1.0 (latest) — 2017-08-18
- 1.0.0 — 2017-08-18

## README

# socket.io-controllers

## Description

Use ES6 Class with Socket.IO

## Installation

```bash
$ npm install socket.io-controllers --save
```

## Usage

Let's say that our application will be using Koa and Socket.IO.

- app.js

```javascript

const http = require('http');
const path = require('path');
const Koa = require('koa');
const SocketIO = require('socket.io');
const { setupSocketIOControllers } = require('socket.io-controllers');

const app = new Koa();
const server = http.createServer(app.callback());

app.context.io = setupSocketIOControllers({
	server,
	controllers: {
		dir: path.resolve(__dirname, 'socket-controllers')
		// suffix: '.sc.js' // Default: .socket-controller.
	}
});

server.listen(3000, () => console.log('Server running on port 3000'));

```
Create a socket-controllers folder (inside we will define our Socket Controller Classes)
- socket-controllers/default.socket-controller.js
```javascript
const { SocketController } = require('socket.io-controllers');

class DefaultSocketController extends SocketController {
	/**
	 * The "use" function will be our socket middleware.
	 * 
	 * Call this.next() anytime to continue.
	 * 
	 * Or call this.next(new Error('some error')) to deny access.
	 */
	use() {
		const { socket, next } = this;
		const { authToken } = socket.handshake.query;

		// Here we can do some check with the token
		if (authToken === '123456') {
			this.next();
		} else {
			this.next(new Error('Authentication Failed.'));
		}
	}

	/**
	 * We define our socket event handler like the following.
	 * 
	 * On client side for example:
	 * 
	 * socket.emit('SomeCustomEvent', payload)
	 * 
	 * or with acknowledgement
	 * 
	 * socket.emit('SomeCustomEvent', payload, ack => console.log(ack))
	 *
	 * You have access to socket.io server (io) and current socket (socket)
	 */
	onSomeCustomEvent(payload) {
		const { io, socket } = this;
	}

	onSomeCustomEvent2(payload, fn) {}
}

exports.DefaultSocketController = DefaultSocketController;


```
What about namespacing?
```javascript
class DefaultSocketController extends SocketController {} // io.of('/')

class AuthSocketController extends SocketController {} // io.of('/auth')

class ChatSocketController extends SocketController {} // io.of('/chat')
```

## LICENSE
MIT

---
_Source: https://npm.io/package/socket.io-controllers · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
