import { MessageTransmissionBase } from "./msg.transmission.base"; import { FisMessage, MessageTransmitter as MessageTransmitterInterface, TransmissionMessage, TransmitterProfile } from '../interface/transport.interface' import { AdapterProfile, AdapterSet, AdaptorTransmissionRole, ConnectionState, TransportEvent, TransportMessage, TransportService } from "../interface/connector.interface"; import { v4 as uuidv4 } from 'uuid' import { TransmitterConnectionAdapter } from "../connector/connector.transmitter"; import { BehaviorSubject, filter, map, Observable } from "rxjs"; /* Take in all the messages that needs to be transported, and divide them accordingly. So the connector instances will do just that connectors or adapters will have their own identifier*/ export class MessageTransmissionTransmitter extends MessageTransmissionBase implements MessageTransmitterInterface { transmitterProfile!: TransmitterProfile; constructor(profile: TransmitterProfile, role: AdaptorTransmissionRole, event: Observable) { super() this.setTransmitter(profile, role) this.handleEvent(event) } setTransmitter(transmitterProfile: TransmitterProfile, role: AdaptorTransmissionRole): void { this.transmitterProfile = transmitterProfile this.transmissionRole = role } emit(message: TransmissionMessage): void { // logic here, emit based on message let adapter: AdapterProfile | undefined = this.adaptorsArray.find(obj => obj.id == message.adapterId) if(adapter) { (adapter.adapter as TransmitterConnectionAdapter).emit(message) } } private handleEvent(event: Observable): void { event.pipe( filter((obj: TransportEvent) => obj.event == `New Adapter`), map(obj => (obj as TransportEvent).data as AdapterSet) ).subscribe((adapter: AdapterSet) => { 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 }) } }