Skip to content

Instantly share code, notes, and snippets.

/wsocket.ts
Created Dec 6, 2017

Embed
What would you like to do?
import { Injectable } from '@angular/core';
import { ConnectableObservable, Observable, Observer, Subject, ReplaySubject } from 'rxjs';
@Injectable()
export class WSocketService {
constructor() {}
private msocket: Subject<MessageEvent>;
public connect(url) : Subject<MessageEvent> {
if (!this.msocket) {
this.msocket = this.create(url)
}
return this.msocket;
}
private create(url): Subject<MessageEvent> {
let ws = new WebSocket(url);
let observable = Observable.create(
(obs: Observer<MessageEvent>) => {
ws.onmessage = obs.next.bind(obs);
ws.onerror = obs.error.bind(obs);
ws.onclose = obs.complete.bind(obs);
return ws.close.bind(ws);
}
);
let observer = {
next: (data: JSON) => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify(data));
}
},
};
return Subject.create(observer, observable);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.