|
@@ -17,7 +17,6 @@ import { checkRxType } from "../utils/general.utils";
|
|
|
|
|
|
|
|
|
export class MessageTransmissionTransmitter<T> extends MessageTransmissionBase<T> {
|
|
|
- private internalObservable: Observable<GeneralEvent<T>> = new Observable()
|
|
|
private connectionStateEvent: BehaviorSubject<ConnectionState> = new BehaviorSubject<ConnectionState>('OFFLINE')
|
|
|
private console: ConsoleLogger = new ConsoleLogger(`MessageTransmissionTransmitter`, ['transmission'])
|
|
|
private messageToBeBuffered!: Subject<FisMessage | WrappedMessage>
|
|
@@ -39,7 +38,7 @@ export class MessageTransmissionTransmitter<T> extends MessageTransmissionBase<T
|
|
|
// Create a new Subscription to manage unsubscription
|
|
|
const subscription = (observer as Observable<any>).subscribe(message => {
|
|
|
this.emit(message);
|
|
|
- this.console.log({ message: `Message ${message.header?.messageID ?? `Undefined`} being processed... ` });
|
|
|
+ this.console.log({ message: `Message ${message.header?.messageID ?? `Undefined`} being ${this.connectionStateEvent.getValue() === `ONLINE` ? `processed...` : `buffered`}... ` });
|
|
|
});
|
|
|
|
|
|
return subscription; // Return the Subscription (Unsubscribable)
|
|
@@ -66,28 +65,37 @@ export class MessageTransmissionTransmitter<T> extends MessageTransmissionBase<T
|
|
|
map(event => { return event.data as AdapterInterface<any> })
|
|
|
).subscribe((adapter: AdapterInterface<any>) => {
|
|
|
this.adapters.push(adapter)
|
|
|
+ // Setting the first adapter as default for now
|
|
|
this.console.log({ message: `Adding new ${adapter.getAdapterProfile(`transportType`)} transmitting adapter. Current adapter length: ${this.adapters.length}` })
|
|
|
if (!this.currentAdapter) {
|
|
|
this.console.log({ message: `Setting this ${adapter.getAdapterProfile(`id`)} as current adapter.` })
|
|
|
this.currentAdapter = adapter as TransmitterAdapterInterface<T>
|
|
|
let connectionState: Observable<ConnectionState> = this.currentAdapter.getAdapterProfile('connectionState') as Observable<ConnectionState>
|
|
|
connectionState.subscribe(this.connectionStateEvent)
|
|
|
+ // new Version, adhering to actor subscribable paradigm
|
|
|
+ this.currentAdapter.subscribe(this.buffer.returnSubjectForBufferedItems().pipe(map(message => {
|
|
|
+ // have to do this because of the subsribe method
|
|
|
+ return {
|
|
|
+ selfId: this.transmissionProfile.config.source,
|
|
|
+ payload: message
|
|
|
+ }
|
|
|
+ })))
|
|
|
}
|
|
|
})
|
|
|
|
|
|
this.buffer.implementRetransmission(this.messageToBeBuffered, this.connectionStateEvent.asObservable(), true)
|
|
|
- // automatically subscribe to allow released bffered messages to be released
|
|
|
- this.buffer.returnSubjectForBufferedItems().subscribe((bufferedMessage: WrappedMessage) => {
|
|
|
- // need to work with wrapped messages
|
|
|
- this.console.log({ message: `Transmitting ${bufferedMessage.thisMessageID}` });
|
|
|
- if (this.currentAdapter) {
|
|
|
- this.currentAdapter.emit(this.transmissionProfile.config.source, bufferedMessage)
|
|
|
- } else {
|
|
|
- // just flush back the message inside the buffer, if the adapter is not ready or assigned.
|
|
|
- this.messageToBeBuffered.next(bufferedMessage)
|
|
|
- this.console.error({ message: `Adapter is not set. Please ensure adapters are ready. Message ${(bufferedMessage.payload as FisMessage).header.messageID} is flushed back into buffer.` })
|
|
|
- }
|
|
|
- })
|
|
|
+ /* Previous Version: automatically subscribe to allow released bffered messages to be released */
|
|
|
+ // this.buffer.returnSubjectForBufferedItems().subscribe((bufferedMessage: WrappedMessage) => {
|
|
|
+ // // need to work with wrapped messages
|
|
|
+ // this.console.log({ message: `Transmitting ${bufferedMessage.thisMessageID}` });
|
|
|
+ // if (this.currentAdapter) {
|
|
|
+ // this.currentAdapter.emit(this.transmissionProfile.config.source, bufferedMessage)
|
|
|
+ // } else {
|
|
|
+ // // just flush back the message inside the buffer, if the adapter is not ready or assigned.
|
|
|
+ // this.messageToBeBuffered.next(bufferedMessage)
|
|
|
+ // this.console.error({ message: `Adapter is not set. Please ensure adapters are ready. Message ${(bufferedMessage.payload as FisMessage).header.messageID} is flushed back into buffer.` })
|
|
|
+ // }
|
|
|
+ // })
|
|
|
}
|
|
|
|
|
|
}
|