0.0.4 • Published 3 years ago

ngx-sockets v0.0.4

Weekly downloads
34
License
-
Repository
github
Last release
3 years ago

ngx-sockets

Socket.IO module for Angular 10+ with socket.io v3+

Install

npm install ngx-sockets

How to use

Import and configure NgxSocketsModule

import { NgxSocketsModule, NgxSocketConfig } from 'ngx-sockets';

const config: NgxSocketConfig = { url: 'http://localhost:3000', options: {} };

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    NgxSocketsModule.forRoot(config)
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

We need to configure NgxSocketsModule module using the object config of type NgxSocketConfig, this object accepts two optional properties they are the same used here io([url][, options]).

Now we pass the configuration to the static method forRoot of NgxSocketsModule

Using your socket Instance

The NgxSocketsModule provides now a configured NgxSocket service that can be injected anywhere inside the AppModule.

import { Injectable } from '@angular/core';
import { NgxSocket } from 'ngx-sockets';
import { map } from 'rxjs/operators';

@Injectable()
export class ChatService {

  constructor(private socket: NgxSocket) {}

  sendMessage(msg: string): void {
    this.socket.emit('message', msg);
  }

  getMessage(): Observable<any> {
    return this.socket.fromEvent<any>('message').pipe(map((data: any) => data.msg));
  }
}

Using multiple sockets with different end points

In this case we do not configure the NgxSocketsModule directly using forRoot. What we have to do is: extend the NgxSocket service, and call super() with the NgxSocketConfig object type (passing url & options if any).

import { Injectable, NgModule } from '@angular/core';
import { NgxSocket } from 'ngx-sockets';

@Injectable()
export class SocketOne extends NgxSocket {

  constructor() {
    super({ url: 'http://url_one:portOne', options: {} });
  }
}

@Injectable()
export class SocketTwo extends NgxSocket {

  constructor() {
    super({ url: 'http://url_two:portTwo', options: {} });
  }
}

@NgModule({
  declarations: [
    //components
  ],
  imports: [
    NgxSocketsModule,
    //...
  ],
  providers: [SocketOne, SocketTwo],
  bootstrap: [/** AppComponent **/]
})
export class AppModule { }

Now you can inject SocketOne, SocketTwo in any other services and / or components.

API

The properties and methods exposed by NgxSocket are the same as exposed by the socket.io client API, with some small additions.

socket.id

A string with the id of the underlying socket.

socket.connected

A boolean, representing whether or not the socket is connected to the server.

socket.disconnected

A boolean, representing whether or not the socket is disconnected from the server.

socket.open(): Socket

Manually opens the socket. Same as socket.connect().

socket.close(): Socket

Manually closes the socket. Same as socket.disconnect().

socket.connect(): Socket

Manually connects the socket. Same as socket.open().

socket.disconnect(): Socket

Manually disconnects the socket. Same as socket.close().

socket.send(...args: any[]): Socket

Sends a message event with the provided arguments. See socket.emit().

socket.emit(eventName: string, ...args: any[]): Socket

Emits an event with the provided eventName to the corresponding listener on the server. Any other arguments can be provided.

socket.on(eventName: string, listener: (...args: any[]) => void): Emitter

Registers a listener to the event with the provided eventName.

socket.onAny(listener: (event: string, ...args: any[]) => void): Socket

Registers a new catch-all listener.

socket.prependAny(listener: (event: string, ...args: any[]) => void): Socket

Same as socket.onAny(), but adds the listener to the beginning of the listeners array.

socket.offAny(listener?: (event: string, ...args: any[]) => void): Socket

Removes the previously registered listener. If no listener is provided, all catch-all listeners are removed.

socket.listenersAny(): ((...args: any[]) => void)[]

Returns the list of registered catch-all listeners.

socket.compress(value: boolean): Socket

Sets a modifier for the subsequent event, whether or not to compress the event data. Defaults to true if not set.

socket.onConnect(listener: (...args: any[]) => void): Emitter

Registers the provided listener for the connect event.

socket.onDisconnect(listener: (reason: DisconnectReason) => void): Emitter

Registers the provided listener for the disconnect event.

socket.onConnectError(listener: (error: Error) => void): Emitter

Registers the provided listener for the connect_error event.

socket.fromEvent<T>(eventName: string): Observable<T>

Returns an observable which can be used to listen to the event with the provided eventName. This method is most commonly used in an Angular application with the rxjs library. Don't forget to unsubscribe() to prevent memory leaks.

socket.fromEventOnce<T>(eventName: string): Promise<T>

Returns a promise to listen for a one-time event.

Related projects

LICENSE

MIT

0.0.3

3 years ago

0.0.4

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago