How to send a message using websocket

I am trying to send messages to WebSocket on TypeScript. I created a Socket service with two functions: .onMessage () and .emit (message):

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Message } from '../message/message.model';

import * as socketIo from 'socket.io-client';

const SERVER_URL = 'http://localhost:8080';

@Injectable()
export class SocketService {
  private socket;

  public initSocket(): void {
    this.socket = socketIo(SERVER_URL);
  }

  public send(message?: Message): void {
    this.socket.emit('displayHello', { to: 'flo@NXS_DEV_FLO2', from: 'flo@NXS_DEV_FLO2', name: 'displayHello'})
  }

  public onMessage(): Observable<any> {
    return new Observable(observer => {
      this.socket.on('message', (data) => {
        observer.next(data);
      });
    });
  }
}

The My.onMessage function does not display any errors. Although my .emit (message) function displays this as an error:

ERROR TypeError: Cannot read property 'emit' of undefined

How to do it?

/////////////// EDIT ///////////////////

I call my functions as follows:

addNewMessage(newMessage: Message): void {
    this.socketService.initSocket();
    this.socketService.onMessage();
    this.socketService.send(newMessage);
}

///////////// EDIT 2 ////////////////////

When I test this on my console, it works:

public onMessage(): Observable<any> {
return new Observable(observer => {

  this.socket.on('displayHello', function(data) {
    $.pnotify({
      title: 'Hello',
      text:  data.from + ' te dis bonjour ' + data.to,
      type:  'info'
    });
  });
}

But I have this error when I tried to insert my code:

Property 'pnotify' does not exist on type '(search: string) => ElementFinder'
+4
source share

Source: https://habr.com/ru/post/1685660/


All Articles