msg.transmission.transmitter.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { MessageTransmissionBase } from "./msg.transmission.base";
  2. import { FisMessage, MessageTransmitter as MessageTransmitterInterface, TransmissionMessage, TransmitterProfile } from '../interface/transport.interface'
  3. import { AdapterProfile, AdapterSet, AdaptorTransmissionRole, ConnectionState, TransportEvent, TransportMessage, TransportService } from "../interface/connector.interface";
  4. import { v4 as uuidv4 } from 'uuid'
  5. import { TransmitterConnectionAdapter } from "../connector/connector.transmitter";
  6. import { BehaviorSubject, filter, map, Observable } from "rxjs";
  7. /* Take in all the messages that needs to be transported, and divide them accordingly. So the connector instances will do just that
  8. connectors or adapters will have their own identifier*/
  9. export class MessageTransmissionTransmitter extends MessageTransmissionBase implements MessageTransmitterInterface {
  10. transmitterProfile!: TransmitterProfile;
  11. constructor(profile: TransmitterProfile, role: AdaptorTransmissionRole, event: Observable<TransportEvent>) {
  12. super()
  13. this.setTransmitter(profile, role)
  14. this.handleEvent(event)
  15. }
  16. setTransmitter(transmitterProfile: TransmitterProfile, role: AdaptorTransmissionRole): void {
  17. this.transmitterProfile = transmitterProfile
  18. this.transmissionRole = role
  19. }
  20. emit(message: TransmissionMessage): void {
  21. // logic here, emit based on message
  22. let adapter: AdapterProfile | undefined = this.adaptorsArray.find(obj => obj.id == message.adapterId)
  23. if(adapter) {
  24. (adapter.adapter as TransmitterConnectionAdapter).emit(message)
  25. }
  26. }
  27. private handleEvent(event: Observable<TransportEvent>): void {
  28. event.pipe(
  29. filter((obj: TransportEvent) => obj.event == `New Adapter`),
  30. map(obj => (obj as TransportEvent).data as AdapterSet)
  31. ).subscribe((adapter: AdapterSet) => {
  32. this.adaptorsArray.push({ id: adapter.transmitterAdapter.getInfo().id, adapter: adapter.transmitterAdapter as TransmitterConnectionAdapter, connectionState: adapter.transmitterAdapter.connectionStateBus }) // refers to channel ID, which will be embedded in these messages that pass through
  33. })
  34. }
  35. }