|
"use strict"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.InterceptingListenerImpl = void 0; |
|
exports.isInterceptingListener = isInterceptingListener; |
|
function isInterceptingListener(listener) { |
|
return (listener.onReceiveMetadata !== undefined && |
|
listener.onReceiveMetadata.length === 1); |
|
} |
|
class InterceptingListenerImpl { |
|
constructor(listener, nextListener) { |
|
this.listener = listener; |
|
this.nextListener = nextListener; |
|
this.processingMetadata = false; |
|
this.hasPendingMessage = false; |
|
this.processingMessage = false; |
|
this.pendingStatus = null; |
|
} |
|
processPendingMessage() { |
|
if (this.hasPendingMessage) { |
|
this.nextListener.onReceiveMessage(this.pendingMessage); |
|
this.pendingMessage = null; |
|
this.hasPendingMessage = false; |
|
} |
|
} |
|
processPendingStatus() { |
|
if (this.pendingStatus) { |
|
this.nextListener.onReceiveStatus(this.pendingStatus); |
|
} |
|
} |
|
onReceiveMetadata(metadata) { |
|
this.processingMetadata = true; |
|
this.listener.onReceiveMetadata(metadata, metadata => { |
|
this.processingMetadata = false; |
|
this.nextListener.onReceiveMetadata(metadata); |
|
this.processPendingMessage(); |
|
this.processPendingStatus(); |
|
}); |
|
} |
|
|
|
onReceiveMessage(message) { |
|
|
|
|
|
this.processingMessage = true; |
|
this.listener.onReceiveMessage(message, msg => { |
|
this.processingMessage = false; |
|
if (this.processingMetadata) { |
|
this.pendingMessage = msg; |
|
this.hasPendingMessage = true; |
|
} |
|
else { |
|
this.nextListener.onReceiveMessage(msg); |
|
this.processPendingStatus(); |
|
} |
|
}); |
|
} |
|
onReceiveStatus(status) { |
|
this.listener.onReceiveStatus(status, processedStatus => { |
|
if (this.processingMetadata || this.processingMessage) { |
|
this.pendingStatus = processedStatus; |
|
} |
|
else { |
|
this.nextListener.onReceiveStatus(processedStatus); |
|
} |
|
}); |
|
} |
|
} |
|
exports.InterceptingListenerImpl = InterceptingListenerImpl; |
|
|