Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { Injectable } from '@angular/core';
- import { Subject, Observable, Observer } from 'rxjs';
- @Injectable()
- export class WebsockService {
- constructor() {}
- private ws: WebSocket;
- private subject: Subject<MessageEvent>;
- public connect(url): Observable<MessageEvent>
- {
- if (this.subject)
- {
- this.ws.close();
- }
- this.subject = this.create(url);
- console.log('Successfully connected to: ' + url);
- return this.subject.asObservable()
- }
- public create(url): Subject<MessageEvent>
- {
- this.ws = new WebSocket(url);
- let observable = Observable.create(
- (obs: Observer<MessageEvent>) => {
- this.ws.onmessage = obs.next.bind(obs);
- this.ws.onerror = obs.error.bind(obs);
- this.ws.onclose = obs.complete.bind(obs);
- return this.ws.close.bind(this.ws);
- }
- );
- let observer = {
- next: (data: Object) => {
- if (this.ws.readyState === WebSocket.OPEN)
- {
- this.ws.send(JSON.stringify(data));
- }
- }
- };
- return Subject.create(observer, observable);
- }
- }
- @Injectable()
- export class DashSocketService {
- constructor( private wsService: WebsockService, private globals: Globals)
- {
- }
- public getDashInfoBySocket(filter_hash: string): Observable<Dash>
- {
- return this.wsService.connect(`${this.globals.WS_URL}/ws/channel/${filter_hash}`).pipe(
- map(
- res => {
- return new Dash().deserialize(JSON.parse(res.data));
- }
- )
- )
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement