connector.transmitter.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import dotenv from 'dotenv';
  2. import { FisAppActor, FisMessage, TransmissionMessage } from "../interface/transport.interface";
  3. import { ConnectionAdapter } from "./connector.base";
  4. import { AdaptorTransmissionRole, ConnectionState, TransmitterConnectionAdapter as TransmitterConnectionAdapterInterface, Transport, TransportEvent, TransportMessage, TransportService } from '../interface/connector.interface';
  5. import { BehaviorSubject, Observable, Observer, Subject } from 'rxjs';
  6. import { v4 as uuidv4 } from 'uuid'
  7. dotenv.config();
  8. /* This transport manager will be instantiating the necessary transport to deal with tranmission and receiving from different receivers
  9. So how?: */
  10. export class TransmitterConnectionAdapter extends ConnectionAdapter implements TransmitterConnectionAdapterInterface {
  11. connectionStateBus: BehaviorSubject<ConnectionState> = new BehaviorSubject('OFFLINE' as ConnectionState) // this cannot work, because there will be alot of clients connected presumably
  12. constructor(transportService: TransportService, adapterId: string, event: Subject<TransportEvent>) {
  13. super()
  14. // logic here
  15. this.event = event
  16. this.connector = transportService
  17. this.setAdapterProfile(adapterId)
  18. }
  19. setAdapterProfile(adapterId: string): void {
  20. this.connectorProfile = {
  21. id: adapterId,
  22. connectionState: this.connectionStateBus,
  23. adapter: this.connector
  24. }
  25. }
  26. emitStream(message: TransmissionMessage): void {
  27. throw new Error('Method not implemented.');
  28. }
  29. emit(message: TransmissionMessage): void {
  30. (this.connector as TransportService).emit({
  31. id: uuidv4(),
  32. dateCreated: new Date(),
  33. transport: Transport.Websocket,
  34. target: message.receiverId,
  35. payload: message.payload
  36. } as TransportMessage)
  37. }
  38. }