File

src/tracking/tracking.gateway.ts

Implements

OnGatewayConnection OnGatewayDisconnect

Index

Properties
Methods

Properties

server
Type : Server
Decorators :
@WebSocketServer()

Methods

broadcastAlert
broadcastAlert(alert: any)

Broadcast an alert to all fleet subscribers

Parameters :
Name Type Optional
alert any No
Returns : void
broadcastPosition
broadcastPosition(vehicleId: string, position: any)

Called by the tracking service when a position update arrives

Parameters :
Name Type Optional
vehicleId string No
position any No
Returns : void
handleConnection
handleConnection(client: Socket)
Parameters :
Name Type Optional
client Socket No
Returns : void
handleDisconnect
handleDisconnect(client: Socket)
Parameters :
Name Type Optional
client Socket No
Returns : void
handleSubscribeFleet
handleSubscribeFleet(client: Socket)
Decorators :
@SubscribeMessage('subscribe:fleet')
Parameters :
Name Type Optional
client Socket No
Returns : { event: string; data: string; }
handleSubscribeVehicle
handleSubscribeVehicle(client: Socket, vehicleId: string)
Decorators :
@SubscribeMessage('subscribe:vehicle')
Parameters :
Name Type Optional
client Socket No
vehicleId string No
Returns : { event: string; data: string; }
handleUnsubscribeVehicle
handleUnsubscribeVehicle(client: Socket, vehicleId: string)
Decorators :
@SubscribeMessage('unsubscribe:vehicle')
Parameters :
Name Type Optional
client Socket No
vehicleId string No
Returns : { event: string; data: string; }
import {
  WebSocketGateway,
  WebSocketServer,
  SubscribeMessage,
  OnGatewayConnection,
  OnGatewayDisconnect,
} from '@nestjs/websockets';
import { Logger } from '@nestjs/common';
import { Server, Socket } from 'socket.io';

@WebSocketGateway({
  cors: { origin: '*' },
  namespace: '/tracking',
})
export class TrackingGateway
  implements OnGatewayConnection, OnGatewayDisconnect
{
  private readonly logger = new Logger(TrackingGateway.name);

  @WebSocketServer()
  server: Server;

  handleConnection(client: Socket) {
    this.logger.log(`Client connected: ${client.id}`);
  }

  handleDisconnect(client: Socket) {
    this.logger.log(`Client disconnected: ${client.id}`);
  }

  @SubscribeMessage('subscribe:fleet')
  handleSubscribeFleet(client: Socket) {
    client.join('fleet');
    this.logger.debug(`Client ${client.id} subscribed to fleet`);
    return { event: 'subscribed', data: 'fleet' };
  }

  @SubscribeMessage('subscribe:vehicle')
  handleSubscribeVehicle(client: Socket, vehicleId: string) {
    client.join(`vehicle:${vehicleId}`);
    this.logger.debug(
      `Client ${client.id} subscribed to vehicle:${vehicleId}`,
    );
    return { event: 'subscribed', data: vehicleId };
  }

  @SubscribeMessage('unsubscribe:vehicle')
  handleUnsubscribeVehicle(client: Socket, vehicleId: string) {
    client.leave(`vehicle:${vehicleId}`);
    return { event: 'unsubscribed', data: vehicleId };
  }

  /**
   * Called by the tracking service when a position update arrives
   */
  broadcastPosition(vehicleId: string, position: any) {
    this.server
      .to('fleet')
      .emit('vehicle:position', { vehicleId, ...position });
    this.server
      .to(`vehicle:${vehicleId}`)
      .emit('vehicle:position', { vehicleId, ...position });
  }

  /**
   * Broadcast an alert to all fleet subscribers
   */
  broadcastAlert(alert: any) {
    this.server.to('fleet').emit('alert:new', alert);
  }
}

results matching ""

    No results matching ""