How to send message with websocket

Viewed 382

I'm trying to send messages in WebSocket to 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);
      });
    });
  }
}

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

ERROR TypeError: Cannot read property 'emit' of undefined

Is that how it should be done?

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

I call my functions like this :

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

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

When I test this in 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 put in my code :

Property 'pnotify' does not exist on type '(search: string) => ElementFinder'
0 Answers
Related