|
1 | 1 | import { Inject, Injectable, OnDestroy } from '@angular/core'; |
2 | | -import { Observable, Subject } from 'rxjs'; |
3 | | -import { filter, map, take } from 'rxjs/operators'; |
| 2 | +import { fromEvent, Observable } from 'rxjs'; |
| 3 | +import { FromEventTarget } from 'rxjs/internal/observable/fromEvent'; |
| 4 | +import { take } from 'rxjs/operators'; |
4 | 5 | import { io, Manager, Socket } from 'socket.io-client'; |
5 | 6 | import { SocketioConfig } from './socketio.interface'; |
6 | 7 | import { SOCKETIO_CONFIG } from './socketio.token'; |
7 | 8 |
|
8 | 9 | @Injectable() |
9 | 10 | export class Socketio implements OnDestroy { |
10 | | - private subject: Subject<{ eventName: string, args: any[] }> = new Subject(); |
11 | 11 | private socket: Socket; |
12 | 12 |
|
13 | 13 | /** |
@@ -40,14 +40,10 @@ export class Socketio implements OnDestroy { |
40 | 40 | @Inject(SOCKETIO_CONFIG) { url, options }: SocketioConfig |
41 | 41 | ) { |
42 | 42 | this.socket = io(url, options); |
43 | | - this.socket.onAny((eventName: string, ...args: any[]) => { |
44 | | - this.subject.next({ eventName, args }); |
45 | | - }); |
46 | 43 | } |
47 | 44 |
|
48 | 45 | ngOnDestroy(): void { |
49 | 46 | this.socket.offAny(); |
50 | | - this.subject.complete(); |
51 | 47 | } |
52 | 48 |
|
53 | 49 | /** |
@@ -82,30 +78,11 @@ export class Socketio implements OnDestroy { |
82 | 78 | return this; |
83 | 79 | } |
84 | 80 |
|
85 | | - /** |
86 | | - * @see {@link Socket.onAny} |
87 | | - */ |
88 | | - on<T>(): Observable<{ eventName: string, args: T }> |
89 | 81 | /** |
90 | 82 | * @see {@link Socket.on} |
91 | 83 | */ |
92 | | - on<T>(eventName?: string): Observable<T> |
93 | | - on<T extends any>(eventName?: string): Observable<T> | Observable<{ eventName: string, args: T }> { |
94 | | - const observable = this.subject.asObservable(); |
95 | | - |
96 | | - if (!eventName) { |
97 | | - return observable.pipe( |
98 | | - map(({ eventName, args }) => ({ |
99 | | - eventName, |
100 | | - args: (args.length === 1 ? args[0] : args) as T |
101 | | - })) |
102 | | - ); |
103 | | - } |
104 | | - |
105 | | - return observable.pipe( |
106 | | - filter(o => o.eventName === eventName), |
107 | | - map(({ args }) => (args.length === 1 ? args[0] : args) as T) |
108 | | - ); |
| 84 | + on<T>(eventName: string): Observable<T> { |
| 85 | + return fromEvent<T>(this.socket as FromEventTarget<T>, eventName); |
109 | 86 | } |
110 | 87 |
|
111 | 88 | /** |
|
0 commit comments