Browse Source

introduce server sent events services

Sven Czarnian 2 years ago
parent
commit
13f5862654
3 changed files with 70 additions and 0 deletions
  1. 8 0
      src/events/events.module.ts
  2. 18 0
      src/events/events.service.spec.ts
  3. 44 0
      src/events/events.service.ts

+ 8 - 0
src/events/events.module.ts

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

+ 18 - 0
src/events/events.service.spec.ts

@@ -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 - 0
src/events/events.service.ts

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