This plugin add WebSocket integration to vulcainjs framework.
$ npm install vulcainjs-websocket
This is a small plugin for the vulcainjs server framework for seamless WebSocket protocol integration. It accepts WebSocket connections.
First of all create your vulcain project.
When your project are created install the plugin npm install vulcainjs-websocket
.
Create a folder ws
into src
directory. All the class in this folder will be inject into your application.
For create a socket event we need to create an Injectable
class. And implement an IWs
interface.
The annotation Injectable
will permit to autoload this class with the DI.
@Injectable(LifeTime.Singleton, 'WSChatMessage')
export class WSChatMessage implements IWs { }
Example of implementation for a chat messaging.
import { Injectable, LifeTime } from "vulcain-corejs/dist";
import { IWs } from 'vulcainjs-websocket/dist';
@Injectable(LifeTime.Singleton, 'WSChatMessage')
export class WSChatMessage implements IWs {
// https://socket.io/docs/server-api/#socket
private socket: any;
// https://socket.io/docs/server-api/#server
private io: SocketIO.Server;
init(io: SocketIO.Server, socket: SocketIO.Socket) {
this.io = io;
this.socket = socket;
}
onCall(msg: any): void {
console.log('WSChatMessage onCall :', msg);
// Send event for all
this.io.emit('new-msg-arrived', msg);
}
onSetRoomName(): string {
throw new Error("Method not implemented.");
}
/**
* This method is for listening event will be called with the return string
* https://socket.io/docs/server-api/#socket-on-eventname-callback
*/
onSetEventName(): string {
return 'chat-message';
}
}
The architecture should be like this.
| src
| api
| ...
| ws
| chat
| WSChatMessage.ts
Now you have created an socket listener event and sender. You need to setup your vulcain project.
On the startup.ts
file add this following lines into initializeServices
method.
initializeServices(container: IContainer) {
// Register custom services from a specific folder
// this.injectFrom("...");
container.injectSingleton(WebSocketService); // Inject the WebSocketService
//ws is the path where you will put all your webSocket.
this.injectFrom("ws");
}
After that you need to init the socket connection. Update yhe onServerStarted
method into startup.ts
file.
onServerStarted(server, adapter) {
let wsService = this.container.get<WebSocketService>('WebSocketService');
//
let allMyWebSocket = ['WSChatMessage'];
//let allMyWebSocket = ['WSChatMessage', 'AnotherWS', 'AnotherWS', ...];
wsService.start(this.container, server, allMyWebSocket);
}
When you create a new WebSocket class you need to put it into the allMyWebSocket
variable. The string value is the value name of Injectable
name.
@Injectable(LifeTime.Singleton, 'TheNameOfWebSocketClass')