Browse Source

reconect when socket close

features/camera
PhamY0601 1 year ago
parent
commit
164c6c34e1
3 changed files with 14 additions and 12 deletions
  1. +2
    -2
      src/app/modules/overview/overall-ground/overall-ground.component.ts
  2. +1
    -2
      src/app/modules/overview/overview.module.ts
  3. +11
    -8
      src/app/shared/services/socket.service.ts

+ 2
- 2
src/app/modules/overview/overall-ground/overall-ground.component.ts View File

import {ChangeDetectorRef, Component, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';
import { Component, OnDestroy, OnInit } from '@angular/core';
import {SocketService} from "../../../shared/services/socket.service"; import {SocketService} from "../../../shared/services/socket.service";
import {Subscription} from "rxjs"; import {Subscription} from "rxjs";
import * as L from "leaflet";


@Component({ @Component({
selector: 'app-overall-ground', selector: 'app-overall-ground',

+ 1
- 2
src/app/modules/overview/overview.module.ts View File

import {overviewRoutes} from "./overview.routing"; import {overviewRoutes} from "./overview.routing";
import {MapComponent} from "./map/map.component"; import {MapComponent} from "./map/map.component";
import {SharedMaterialModule} from "../../shared/shared-material.module"; import {SharedMaterialModule} from "../../shared/shared-material.module";
import {MatIconModule} from "@angular/material/icon";
import { CameraStreamComponent } from './camera-stream/camera-stream.component'; import { CameraStreamComponent } from './camera-stream/camera-stream.component';
import {FormsModule} from "@angular/forms";


@NgModule({ @NgModule({
declarations: [ declarations: [

+ 11
- 8
src/app/shared/services/socket.service.ts View File

import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; import { webSocket, WebSocketSubject } from 'rxjs/webSocket';
import { BehaviorSubject, Subject } from "rxjs";
import {BehaviorSubject, catchError, delayWhen, EMPTY, Observable, retryWhen, Subject, tap, timer} from "rxjs";
import { config } from "../../../assets/config/config"; import { config } from "../../../assets/config/config";




export class SocketService { export class SocketService {
gateway = config.gateway; gateway = config.gateway;



websocket$!: WebSocketSubject<any> ;
websocket$: WebSocketSubject<any> | undefined ;
private isConnected: boolean = false; private isConnected: boolean = false;
private messagesSubject$ = new Subject(); private messagesSubject$ = new Subject();
public messages$ = this.messagesSubject$.asObservable(); public messages$ = this.messagesSubject$.asObservable();


constructor() { constructor() {
} }
public connect(cfg: { reconnect: boolean } = {reconnect: false}): void {
if (!this.websocket$ || this.websocket$.closed) {
console.log('Trying to open a WebSocket connection…');

public connect(cfg: { reconnect: boolean } = { reconnect: false }): void {
if (cfg.reconnect || !this.websocket$ || this.websocket$.closed) {
console.log(cfg.reconnect ? 'Reconnecting WebSocket…' : 'Trying to open a WebSocket connection…');
this.websocket$ = this.getNewWebSocket(); this.websocket$ = this.getNewWebSocket();
this.websocket$.subscribe((messages) => { this.websocket$.subscribe((messages) => {
this.messagesSubject$.next(messages); this.messagesSubject$.next(messages);
}); });
} }

} }


close() { close() {
this.websocket$.complete();
this.websocket$?.complete();
this.websocket$ = undefined;
} }


sendMessage(msg: any) { sendMessage(msg: any) {
this.websocket$.next(msg);
this.websocket$?.next(msg);
} }


private getNewWebSocket() { private getNewWebSocket() {
closeObserver: { closeObserver: {
next: () => { next: () => {
console.log('Connection closed'); console.log('Connection closed');
this.websocket$ = undefined;
this.isConnected = false; this.isConnected = false;
this.connect({reconnect: true}); this.connect({reconnect: true});
this.statusSubject.next(this.isConnected); this.statusSubject.next(this.isConnected);

Loading…
Cancel
Save