import { ConnectionManager as ConnectionManagerInterface, AdapterSet, TransportService, TransportEvent, Transport } from "../interface/connector.interface" import { TransmitterConnectionAdapter } from './connector.transmitter' import { ReceiverConnectionAdapter } from './connector.receiver' import { RequestResponseConnectionAdapter } from './connector.request.response' import { v4 as uuidv4 } from 'uuid' import { Subject } from "rxjs" export class ConnectionManager implements ConnectionManagerInterface { private adapterSet: AdapterSet[] = [] private event!: Subject constructor(event: Subject) { this.event = event console.log(`Connection Manager: Contructing ConnectionManager....`) } getAdapter(clientId: string, transportService: TransportService): AdapterSet { let transportType: Transport = transportService.getInfo() let adapterId: string = clientId let transmitterAdapter: TransmitterConnectionAdapter = new TransmitterConnectionAdapter(adapterId, transportType, transportService) let receiverAdapter: ReceiverConnectionAdapter = new ReceiverConnectionAdapter(adapterId, transportType, transportService) let adapterSet: AdapterSet = { id: adapterId, dateCreated: new Date(), transmitterAdapter: transmitterAdapter, receiverAdapter: receiverAdapter, requestResponsAdapter: new RequestResponseConnectionAdapter(transmitterAdapter, receiverAdapter) } this.adapterSet.push(adapterSet) this.event.next({ id: uuidv4(), event: 'New Adapter', data: adapterId } as TransportEvent) return adapterSet } }