Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. import { Injectable } from '@angular/core';
  2. import { Subject, Observable, Observer } from 'rxjs';
  3.  
  4. @Injectable()
  5. export class WebsockService {
  6.  
  7. constructor() {}
  8. private ws: WebSocket;
  9.  
  10. private subject: Subject<MessageEvent>;
  11.  
  12. public connect(url): Observable<MessageEvent>
  13. {
  14. if (this.subject)
  15. {
  16. this.ws.close();
  17. }
  18. this.subject = this.create(url);
  19. console.log('Successfully connected to: ' + url);
  20. return this.subject.asObservable()
  21. }
  22.  
  23. public create(url): Subject<MessageEvent>
  24. {
  25. this.ws = new WebSocket(url);
  26.  
  27. let observable = Observable.create(
  28. (obs: Observer<MessageEvent>) => {
  29. this.ws.onmessage = obs.next.bind(obs);
  30. this.ws.onerror = obs.error.bind(obs);
  31. this.ws.onclose = obs.complete.bind(obs);
  32.  
  33. return this.ws.close.bind(this.ws);
  34. }
  35. );
  36.  
  37. let observer = {
  38. next: (data: Object) => {
  39. if (this.ws.readyState === WebSocket.OPEN)
  40. {
  41. this.ws.send(JSON.stringify(data));
  42. }
  43. }
  44. };
  45. return Subject.create(observer, observable);
  46. }
  47. }
  48.  
  49. @Injectable()
  50. export class DashSocketService {
  51.  
  52. constructor( private wsService: WebsockService, private globals: Globals)
  53. {
  54.  
  55. }
  56.  
  57. public getDashInfoBySocket(filter_hash: string): Observable<Dash>
  58. {
  59. return this.wsService.connect(`${this.globals.WS_URL}/ws/channel/${filter_hash}`).pipe(
  60. map(
  61. res => {
  62. return new Dash().deserialize(JSON.parse(res.data));
  63. }
  64. )
  65. )
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement