Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 42 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ Use class-based controllers to handle websocket events. Helps to organize your c
```typescript
import 'reflect-metadata';
```

3. Install a DI container, for example `typedi`;

```
npm install typedi
```

## Example of usage

Expand All @@ -39,8 +45,10 @@ Use class-based controllers to handle websocket events. Helps to organize your c
MessageBody,
OnMessage,
} from 'socket-controllers';
import {Service} from 'typedi'; // Only if you are using typedi

@SocketController()
@Service() // Only if you are using typedi
export class MessageController {
@OnConnect()
connection(@ConnectedSocket() socket: any) {
Expand All @@ -67,10 +75,13 @@ Use class-based controllers to handle websocket events. Helps to organize your c
```typescript
import 'es6-shim'; // this shim is optional if you are using old version of node
import 'reflect-metadata'; // this shim is required
import { createSocketServer } from 'socket-controllers';
import { MessageController } from './MessageController';
import { SocketControllers } from 'socket-controllers';
import { MessageController } from './MessageController';
import {Container} from 'typedi'; // Only if you are using typedi

createSocketServer(3001, {
new SocketControllers({
port: 3001,
container: Container,
controllers: [MessageController],
});
```
Expand Down Expand Up @@ -135,7 +146,7 @@ export class MessageController {

If you specify a class type to parameter that is decorated with `@MessageBody()`,
socket-controllers will use [class-transformer][1] to create instance of the given class type with the data received in the message.
To disable this behaviour you need to specify a `{ useConstructorUtils: false }` in SocketControllerOptions when creating a server.
To disable this behaviour you need to specify a `{ transformOption: { transform: false ] }` in SocketControllerOptions when creating a server.

#### `@SocketQueryParam()` decorator

Expand Down Expand Up @@ -266,16 +277,18 @@ If promise returned by controller action, message will be emitted only after pro
#### Using exist server instead of creating a new one

If you need to create and configure socket.io server manually,
you can use `useSocketServer` instead of `createSocketServer` function.
you can pass it to the `SocketControllers` constructor.
Here is example of creating socket.io server and configuring it with express:

```typescript
import 'reflect-metadata'; // this shim is required
import { useSocketServer } from 'socket-controllers';
import { SocketControllers } from 'socket-controllers';
import { Server } from 'socket.io';
import { Container } from 'typedi'; // Only if you are using typedi

const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const io = new Server(server);

server.listen(3001);

Expand All @@ -287,7 +300,7 @@ io.use((socket: any, next: Function) => {
console.log('Custom middleware');
next();
});
useSocketServer(io);
new SocketControllers({io, container: Container});
```

#### Load all controllers from the given directory
Expand All @@ -297,9 +310,12 @@ You can load all controllers in once from specific directories, by specifying ar

```typescript
import 'reflect-metadata'; // this shim is required
import { createSocketServer } from 'socket-controllers';
import { SocketControllers } from 'socket-controllers';
import { Container } from 'typedi'; // Only if you are using typedi

createSocketServer(3000, {
new SocketControllers({
port: 3000,
container: Container,
controllers: [__dirname + '/controllers/*.js'],
}); // registers all given controllers
```
Expand Down Expand Up @@ -362,10 +378,13 @@ Controllers and middlewares should be loaded:

```typescript
import 'reflect-metadata';
import { createSocketServer } from 'socket-controllers';
import { SocketControllers } from 'socket-controllers';
import { MessageController } from './MessageController';
import { MyMiddleware } from './MyMiddleware'; // here we import it
let io = createSocketServer(3000, {
import { Container } from 'typedi'; // Only if you are using typedi
const server = new SocketControllers({
port: 3000,
container: Container,
controllers: [MessageController],
middlewares: [MyMiddleware],
});
Expand All @@ -375,10 +394,13 @@ Also you can load them from directories. Also you can use glob patterns:

```typescript
import 'reflect-metadata';
import { createSocketServer } from 'socket-controllers';
let io = createSocketServer(3000, {
controllers: [__dirname + '/controllers/**/*.js'],
middlewares: [__dirname + '/middlewares/**/*.js'],
import { SocketControllers } from 'socket-controllers';
import { Container } from 'typedi'; // Only if you are using typedi
const server = new SocketControllers({
port: 3000,
container: Container,
controllers: [__dirname + '/controllers/**/*.js'],
middlewares: [__dirname + '/middlewares/**/*.js'],
});
```

Expand All @@ -390,15 +412,13 @@ Here is example how to integrate socket-controllers with [typedi](https://github

```typescript
import 'reflect-metadata';
import { createSocketServer, useContainer } from 'socket-controllers';
import { SocketControllers } from 'socket-controllers';
import { Container } from 'typedi';

// its important to set container before any operation you do with socket-controllers,
// including importing controllers
useContainer(Container);

// create and run socket server
let io = createSocketServer(3000, {
const server = new SocketControllers({
port: 3000,
container: Container,
controllers: [__dirname + '/controllers/*.js'],
middlewares: [__dirname + '/middlewares/*.js'],
});
Expand Down
9 changes: 1 addition & 8 deletions sample/sample1-simple-controller/MessageController.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
import {
OnConnect,
SocketController,
ConnectedSocket,
OnDisconnect,
MessageBody,
OnMessage,
} from '../../src/decorators';
import { Message } from './Message';
import { ConnectedSocket, MessageBody, OnConnect, OnDisconnect, OnMessage, SocketController } from '../../src';

@SocketController()
export class MessageController {
Expand Down
7 changes: 5 additions & 2 deletions sample/sample1-simple-controller/app.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import 'reflect-metadata';
import { createSocketServer } from '../../src/index';
import { SocketControllers } from '../../src/index';
import { MessageController } from './MessageController';
import { Container } from 'typedi';

createSocketServer(3001, {
new SocketControllers({
port: 3001,
container: Container,
controllers: [MessageController],
}); // creates socket.io server and registers all controllers there

Expand Down
9 changes: 1 addition & 8 deletions sample/sample2-use-created-socket-io/MessageController.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
import {
OnConnect,
SocketController,
ConnectedSocket,
OnDisconnect,
MessageBody,
OnMessage,
} from '../../src/decorators';
import { Message } from './Message';
import { ConnectedSocket, MessageBody, OnConnect, OnDisconnect, OnMessage, SocketController } from '../../src';

@SocketController()
export class MessageController {
Expand Down
10 changes: 7 additions & 3 deletions sample/sample2-use-created-socket-io/app.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import 'reflect-metadata';
import { useSocketServer } from '../../src/index';
import { SocketControllers } from '../../src/index';
import { MessageController } from './MessageController';
import { Server } from 'socket.io';
import { Container } from 'typedi';

const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
const io = new Server(server);

server.listen(3001);

Expand All @@ -16,7 +18,9 @@ io.use((socket: any, next: Function) => {
console.log('Custom middleware');
next();
});
useSocketServer(io, {
new SocketControllers({
io,
container: Container,
controllers: [MessageController],
});

Expand Down
9 changes: 1 addition & 8 deletions sample/sample3-namespaces/MessageController.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
import {
OnConnect,
SocketController,
ConnectedSocket,
OnDisconnect,
MessageBody,
OnMessage,
} from '../../src/decorators';
import { Message } from './Message';
import { ConnectedSocket, MessageBody, OnConnect, OnDisconnect, OnMessage, SocketController } from '../../src';

@SocketController('/messages')
export class MessageController {
Expand Down
7 changes: 5 additions & 2 deletions sample/sample3-namespaces/app.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import 'reflect-metadata';
import { createSocketServer } from '../../src/index';
import { SocketControllers } from '../../src/index';
import { MessageController } from './MessageController';
import { Container } from 'typedi';

createSocketServer(3001, {
new SocketControllers({
port: 3001,
container: Container,
controllers: [MessageController],
}); // creates socket.io server and registers all controllers there

Expand Down
14 changes: 7 additions & 7 deletions sample/sample4-emitters/MessageController.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { Message } from './Message';
import {
OnConnect,
SocketController,
ConnectedSocket,
OnDisconnect,
EmitOnFail,
EmitOnSuccess,
MessageBody,
OnConnect,
OnDisconnect,
OnMessage,
EmitOnSuccess,
EmitOnFail,
SkipEmitOnEmptyResult,
} from '../../src/decorators';
import { Message } from './Message';
SocketController,
} from '../../src';

@SocketController()
export class MessageController {
Expand Down
7 changes: 5 additions & 2 deletions sample/sample4-emitters/app.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import 'reflect-metadata';
import { createSocketServer } from '../../src/index';
import { SocketControllers } from '../../src/index';
import { MessageController } from './MessageController';
import { Container } from 'typedi';

createSocketServer(3001, {
new SocketControllers({
port: 3001,
container: Container,
controllers: [MessageController],
}); // creates socket.io server and registers all controllers there

Expand Down
3 changes: 1 addition & 2 deletions sample/sample5-middlewares/AuthenticationMiddleware.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Middleware } from '../../src/decorators';
import { MiddlewareInterface } from '../../src/MiddlewareInterface';
import { Middleware, MiddlewareInterface } from '../../src';

@Middleware()
export class AuthenticationMiddleware implements MiddlewareInterface {
Expand Down
9 changes: 1 addition & 8 deletions sample/sample5-middlewares/MessageController.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
import {
OnConnect,
SocketController,
ConnectedSocket,
OnDisconnect,
MessageBody,
OnMessage,
} from '../../src/decorators';
import { Message } from './Message';
import { ConnectedSocket, MessageBody, OnConnect, OnDisconnect, OnMessage, SocketController } from '../../src';

@SocketController()
export class MessageController {
Expand Down
7 changes: 5 additions & 2 deletions sample/sample5-middlewares/app.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import 'reflect-metadata';
import { createSocketServer } from '../../src/index';
import { SocketControllers } from '../../src/index';
import { AuthenticationMiddleware } from './AuthenticationMiddleware';
import { MessageController } from './MessageController';
import { Container } from 'typedi';

createSocketServer(3001, {
new SocketControllers({
port: 3001,
container: Container,
controllers: [MessageController],
middlewares: [AuthenticationMiddleware],
}); // creates socket.io server and registers all controllers and middlewares there
Expand Down
12 changes: 6 additions & 6 deletions sample/sample6-dynamic-namespaces/MessageController.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Message } from './Message';
import {
OnConnect,
SocketController,
ConnectedSocket,
OnDisconnect,
MessageBody,
OnMessage,
NspParams,
} from '../../src/decorators';
import { Message } from './Message';
OnConnect,
OnDisconnect,
OnMessage,
SocketController,
} from '../../src';

@SocketController('/messages/:id')
export class MessageController {
Expand Down
7 changes: 5 additions & 2 deletions sample/sample6-dynamic-namespaces/app.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import 'reflect-metadata';
import { createSocketServer } from '../../src/index';
import { SocketControllers } from '../../src/index';
import { MessageController } from './MessageController';
import { Container } from 'typedi';

createSocketServer(3001, {
new SocketControllers({
port: 3001,
container: Container,
controllers: [MessageController],
}); // creates socket.io server and registers all controllers there

Expand Down
3 changes: 0 additions & 3 deletions src/MiddlewareInterface.ts

This file was deleted.

Loading