|
@@ -21,25 +21,25 @@ class Supervisor {
|
|
|
|
|
|
constructor() {
|
|
|
this.event = new Subject()
|
|
|
+ // Start setting up existing transport based on .env file
|
|
|
this.sortTransportFromEnv(this.transportSet)
|
|
|
this.transportSet.forEach(transport => {
|
|
|
this.setUpTransportService(transport, this.event, this.isClient)
|
|
|
})
|
|
|
+ // once adapter manager is instantiated, it will attempt to connect to existing started transport
|
|
|
this.tieInAdapterWithExistingTransportServices(this.event)
|
|
|
|
|
|
this.transmissionManager = new MessageTransmissionManager(this.event, this.isClient)
|
|
|
this.startMessageTransmission()
|
|
|
- // testing
|
|
|
- // this.event.subscribe(event => {
|
|
|
- // this.console.log({ message: `Supervisor Event: ${event.type} && ${event.event}` })
|
|
|
- // })
|
|
|
}
|
|
|
|
|
|
private startMessageTransmission(): void {
|
|
|
+ // every new remote client connected, a new transmission object will be instantiated to allow message transmission
|
|
|
this.transmissionManager.subscribeForTransmission().pipe(
|
|
|
filter(event => event.type === `Transmission Event`),
|
|
|
filter(event => event.event === `New Transmission`)
|
|
|
).subscribe((event: GeneralEvent<TransmissionInterface>) => {
|
|
|
+ // broadcast to indicate a transmission object is ready, this signal will be received by adapter manager to instantiate the releavnt adapters to be used
|
|
|
this.event.next({
|
|
|
id: uuidv4(),
|
|
|
type: `General Event`,
|
|
@@ -49,12 +49,13 @@ class Supervisor {
|
|
|
})
|
|
|
let transmission: TransmissionInterface = event.data
|
|
|
this.console.log({ message: `Acquired transmission set for client ${transmission.clientId}` })
|
|
|
+ // updating transmission records. No logic for keeping track of client state, as that will be handled exclusively by tranmistter transmission at the moment
|
|
|
this.transmissionSets.push(transmission)
|
|
|
|
|
|
this.handleClientActivity(transmission)
|
|
|
})
|
|
|
}
|
|
|
- // only called once for each connected clients.
|
|
|
+
|
|
|
private handleClientActivity(messageTransmission: TransmissionInterface): void {
|
|
|
// start listening to incoming messages from this client
|
|
|
messageTransmission.receiver.getIncoming().subscribe((event: GeneralEvent<any>) => {
|
|
@@ -62,10 +63,12 @@ class Supervisor {
|
|
|
this.generalBus.next(event)
|
|
|
})
|
|
|
|
|
|
+ // for all the responses or messages to be emitted on the provider perspective
|
|
|
this.outgoingPipe.subscribe((message: FisMessage) => {
|
|
|
messageTransmission.transmitter.emit(message)
|
|
|
})
|
|
|
|
|
|
+ // test sample to simulate request response, but not using request response transmission
|
|
|
let request: FisMessage = {
|
|
|
header: {
|
|
|
messageID: uuidv4(),
|
|
@@ -73,12 +76,12 @@ class Supervisor {
|
|
|
},
|
|
|
data: 'Data'
|
|
|
}
|
|
|
+ // this.request(request, messageTransmission).subscribe({
|
|
|
+ // next: res => this.console.log({ message: `received ${res.header.messageID}`, details: res }),
|
|
|
+ // complete: () => this.console.log({ message: `Responses Completed for request: ${request.header.messageID}` })
|
|
|
+ // })
|
|
|
|
|
|
- this.request(request, messageTransmission).subscribe({
|
|
|
- next: res => this.console.log({ message: `received ${res.header.messageID}`, details: res }),
|
|
|
- complete: () => this.console.log({ message: `Responses Completed for request: ${request.header.messageID}` })
|
|
|
- })
|
|
|
-
|
|
|
+ // test sample to stream new messages every second
|
|
|
// this.startGeneratingRequest(1000, this.outgoingPipe)
|
|
|
}
|
|
|
|
|
@@ -113,8 +116,6 @@ class Supervisor {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- // Server to be set up as well as acquiring client information if needed. Like in the case for grpc and socket. Http not requ`ired.
|
|
|
private setUpTransportService(transportSet: TransportSet, event: Subject<GeneralEvent<any>>, isClient?: boolean): void {
|
|
|
try {
|
|
|
let transportService: TransportServiceInterface = this.instantiateTransportService(transportSet.transport, event)
|
|
@@ -152,6 +153,7 @@ class Supervisor {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // just to re-arrange the list of transport servicce from env. Of course, varying modules will have varying ways to start up their transport respectively. TO adapter later
|
|
|
private sortTransportFromEnv(transportSet: TransportSet[]): void {
|
|
|
let transportList: string[] = process.env.Transport?.split(',') || []
|
|
|
let portList: number[] = (process.env.PORT?.split(',') || []).map(port => Number(port));
|
|
@@ -161,6 +163,7 @@ class Supervisor {
|
|
|
this.console.log({ message: 'TransportSetList', details: this.transportSet })
|
|
|
}
|
|
|
|
|
|
+ // A method to broadcast avaible tranpsort to adapterManager the available transport to be connected after the adapter manager has been instantiated
|
|
|
private tieInAdapterWithExistingTransportServices(eventBus: Subject<GeneralEvent<any>>): void {
|
|
|
const subscription: Subscription = eventBus.pipe(
|
|
|
filter(event => event.type === `Adapter Event`),
|