File

src/app/services/chat.service.ts

Index

Properties
Methods

Constructor

constructor()

Methods

Private Async createConnection
createConnection()
Returns : any
Private registerOnServerEvents
registerOnServerEvents()
Returns : void
sendMessage
sendMessage(message: Message)
Parameters :
Name Type Optional
message Message No
Returns : void
Private startConnection
startConnection()
Returns : void

Properties

Private _hubConnection
Type : HubConnection
connectionEstablished
Default value : new EventEmitter<Boolean>()
Private connectionIsEstablished
Default value : false
messageReceived
Default value : new EventEmitter<Message>()
import { EventEmitter, Injectable } from '@angular/core';
import { HubConnection, HubConnectionBuilder } from '@aspnet/signalr';
import { Message } from '../models/message';
import { environment } from '../../environments/environment';

@Injectable()
export class ChatService {
  messageReceived = new EventEmitter<Message>();
  // tslint:disable-next-line: ban-types
  connectionEstablished = new EventEmitter<Boolean>();

  private connectionIsEstablished = false;
  // tslint:disable-next-line: variable-name
  private _hubConnection: HubConnection;

  constructor() {
    this.createConnection();
    this.registerOnServerEvents();
    this.startConnection();
  }

  sendMessage(message: Message) {
    this._hubConnection.invoke('NewMessage', message);
  }

  private async createConnection() {
    let connection = this._hubConnection = new HubConnectionBuilder()
      .withUrl(environment.apiUrl + '/MessageHub')
      .build();
    await connection.start();
  }

  private startConnection(): void {
    this._hubConnection
      .start()
      .then(() => {
        this.connectionIsEstablished = true;
        console.log('Hub connection started');
        this.connectionEstablished.emit(true);
      })
      .catch(err => {
        console.log('Error while establishing connection, retrying...');
        setTimeout(function() { this.startConnection(); }, 5000);
      });
  }

  private registerOnServerEvents(): void {
    this._hubConnection.on('MessageReceived', (data: any) => {
      this.messageReceived.emit(data);
    });
  }
}

results matching ""

    No results matching ""