import { Injectable } from '@angular/core'; import { IEventMessage } from '../models/event.message'; import { Subject } from 'rxjs'; import { OAuthService } from 'angular-oauth2-oidc'; import { HubConnection, HubConnectionBuilder, LogLevel ,HttpTransportType} from '@microsoft/signalr'; import { AppConfig } from "../shared/app.config"; @Injectable({ providedIn: 'root', }) export class EventService { public event:Subject = new Subject(); private _connection: HubConnection = null; private _apiEndPoint: string; constructor(private oauthService: OAuthService, private appConfig: AppConfig) { this._apiEndPoint = appConfig.getConfig("apiEndPoint"); this._connection = new HubConnectionBuilder().withUrl(`${ this._apiEndPoint}/eventHub`, { transport: HttpTransportType.WebSockets, // accessTokenFactory: () => { // return oauthService.getAccessToken(); // }, skipNegotiation:true }).withAutomaticReconnect().configureLogging(LogLevel.Information).build(); this._connection.on('event', eventMessage => { this.event.next(eventMessage); }); this._connection.onreconnected( event => { this.Authenticate(); }); this._connection.start().then(() => { this.Authenticate(); }); } Authenticate() { var accessToken = this.oauthService.getAccessToken(); if (accessToken) { this._connection.send('authenticate', this.oauthService.getAccessToken()); } } }