| 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