introduce server sent events services

This commit is contained in:
Sven Czarnian
2022-11-03 23:32:54 +01:00
parent 0b19c4eab1
commit 13f5862654
3 changed files with 70 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
import { Module } from '@nestjs/common';
import { EventsService } from './events.service';
@Module({
providers: [EventsService],
exports: [EventsService],
})
export class EventsModule {}

View 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();
});
});

View 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}`, {});
}
}