introduce server sent events services
This commit is contained in:
		
							
								
								
									
										8
									
								
								src/events/events.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/events/events.module.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| import { Module } from '@nestjs/common'; | ||||
| import { EventsService } from './events.service'; | ||||
|  | ||||
| @Module({ | ||||
|   providers: [EventsService], | ||||
|   exports: [EventsService], | ||||
| }) | ||||
| export class EventsModule {} | ||||
							
								
								
									
										18
									
								
								src/events/events.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/events/events.service.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| import { Test, TestingModule } from '@nestjs/testing'; | ||||
| import { EventsService } from './events.service'; | ||||
|  | ||||
| describe('EventsService', () => { | ||||
|   let service: EventsService; | ||||
|  | ||||
|   beforeEach(async () => { | ||||
|     const module: TestingModule = await Test.createTestingModule({ | ||||
|       providers: [EventsService], | ||||
|     }).compile(); | ||||
|  | ||||
|     service = module.get<EventsService>(EventsService); | ||||
|   }); | ||||
|  | ||||
|   it('should be defined', () => { | ||||
|     expect(service).toBeDefined(); | ||||
|   }); | ||||
| }); | ||||
							
								
								
									
										44
									
								
								src/events/events.service.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/events/events.service.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| import { Injectable } from '@nestjs/common'; | ||||
| import { EventEmitter } from 'events'; | ||||
| import { fromEvent, Observable } from 'rxjs'; | ||||
|  | ||||
| @Injectable() | ||||
| export class EventsService { | ||||
|   private readonly emitter: EventEmitter; | ||||
|  | ||||
|   constructor() { | ||||
|     this.emitter = new EventEmitter(); | ||||
|   } | ||||
|  | ||||
|   private subscribe(event: string): Observable<unknown> { | ||||
|     return fromEvent(this.emitter, event); | ||||
|   } | ||||
|  | ||||
|   private emit(event: string, data: any): void { | ||||
|     this.emitter.emit(event, data); | ||||
|   } | ||||
|  | ||||
|   subscribeUserPrivilegeUpdate(vatsimId: string): Observable<unknown> { | ||||
|     return this.subscribe(`/users/${vatsimId}`); | ||||
|   } | ||||
|  | ||||
|   emitUserPrivilegeUpdate(vatsimId: string): void { | ||||
|     this.emit(`/users/${vatsimId}`, {}); | ||||
|   } | ||||
|  | ||||
|   subscribeAirportRenew(): Observable<unknown> { | ||||
|     return this.subscribe('/airports/renew'); | ||||
|   } | ||||
|  | ||||
|   emitAirportRenew(): void { | ||||
|     this.emit('/airports/renew', {}); | ||||
|   } | ||||
|  | ||||
|   subscribeArrivalSequenceUpdate(icao: string): Observable<unknown> { | ||||
|     return this.subscribe(`/airports/arrival/${icao}`); | ||||
|   } | ||||
|  | ||||
|   emitArrivalSequenceUpdate(icao: string): void { | ||||
|     this.emit(`/airports/arrival/${icao}`, {}); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user