npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

socket-controller-rdy

v1.3.1

Published

This package is a drop-in backend-end controller solution for socket-io managed websocket. Controller logics are regrouped inside single class, derived from a SocketController abstract class. Each class will run as singleton and several different class ca

Downloads

42

Readme

socket-controller-rdy, an all around Socket IO Backend Controller

This package is a drop-in backend-end controller solution for socket-io managed websocket. Controller logics are regrouped inside single class, derived from a SocketController abstract class. Each class will run as singleton and several different class can operate at the same runtime. The incoming packets are passed to the corresponding SocketManager controller through the namespace Socket.IO feature. By default, namespace equals to the class name, eg: the class MyController will listen to '/MyController'.

controller methods logic

The decorator @ListenTo, will decorate a Controller method to bind its logic to socket.io incoming/outgoing events. The decorated function will receive data from the websocket on event with the same name as the decorated function, eg: myMethod will be triggered by 'myMethod' incoming event The return value of the decorated function will be emited back to ws client on an event of similar name. This return event can be renamed by providing an optional string to the decorator. eg: @ListenTo('resultEvent').

TypeScript experimental decorators package version

This version of the package makes is compatible with this implementation of decorators which requires each custom controller class to be also decorated (see below).

Installation

client-side : npm install socket.io-client
server-side : npm install socket-controller-rdy

Deployment

Server-side

The method that are to be bound to incoming WS requests are passed as a trailer argument a direct reference to the underlying socket object if several emits are required. Methods can be async. The class that hosts the methods must inherit the SocketController and be decorated as @SocketControllerRegister;

import { SocketController, ListenTo, SocketControllerRegister } from 'socket-controller-rdy';

@SocketControllerRegister
export class MySocketCtrl extends SocketController {
    @ListenTo()
    welcome(data: string) {
        const msg = `The WS controller MySocketCtrl is answering to you!`;
        return msg;
    }

    @ListenTo('reply_here')
    say_hello(data: string, socket:Socket) {
        socket.emit("updateEvent", "step one passed")
        const msg = `The WS controller MySocketCtrl is answering to you too!`;
        return msg;
    }
}

We can now create the socket Router which will register the custom controller. It can then be attached to an HTTP server to start handling WS incoming requests.

import { createServer } from 'http' 
import { SocketRouter } from "socket-controller-rdy";


const http = createServer();

const router = new SocketRouter();
router.use(MySocketCtrl);
router.bind({ http });

http.listen(8000);

The router can alternatively be attached to a pre-existing socket-io server.

const http = createServer();
const io = new Server(http);

const router = new SocketRouter();
router.use(MySocketCtrl);
router.bind({ io });

http.listen(8000);

Client-side

You just need to account for the namespace at connection.

const socket = io("https://server-domain.com/MySocketCtrl");
socket.on("connect", () =>{ 
    socket.emit("welcome", `Hi from Client`);
    socket.emit("say_hello", `Hi from Client too`);
});
socket.on("welcome",(data) => console.log(data)) // prints "The WS controller MySocketCtrl is answering to you!"
socket.on("reply_here",(data) => console.log(data)) // prints "The WS controller MySocketCtrl is answering to you too!"
socket.on("updateEvent",(data) => console.log(data)) // prints "step one passed"