@@ -4,10 +4,17 @@ import { inspect } from "util"
44import { Compression , CompressionType , GzipCompression , NoneCompression } from "./compression"
55import { Connection , ConnectionInfo , ConnectionParams , errorMessageOf } from "./connection"
66import { ConnectionPool , ConnectionPurpose } from "./connection_pool"
7- import { Consumer , ConsumerFunc , ConsumerUpdateListener , StreamConsumer , computeExtendedConsumerId } from "./consumer"
7+ import {
8+ Consumer ,
9+ ConsumerFunc ,
10+ ConsumerUpdateListener ,
11+ StreamConsumer ,
12+ PrivateConsumer ,
13+ computeExtendedConsumerId ,
14+ } from "./consumer"
815import { STREAM_ALREADY_EXISTS_ERROR_CODE } from "./error_codes"
916import { Logger , NullLogger } from "./logger"
10- import { FilterFunc , Message , Publisher , StreamPublisher } from "./publisher"
17+ import { FilterFunc , Message , Publisher , PrivatePublisher , StreamPublisher } from "./publisher"
1118import { ConsumerUpdateResponse } from "./requests/consumer_update_response"
1219import { CreateStreamArguments , CreateStreamRequest } from "./requests/create_stream_request"
1320import { CreateSuperStreamRequest } from "./requests/create_super_stream_request"
@@ -48,10 +55,10 @@ export type ConnectionClosedListener = (hadError: boolean) => void
4855
4956export type ClosingParams = { closingCode : number ; closingReason : string ; manuallyClose ?: boolean }
5057
51- type ConsumerMappedValue = { connection : Connection ; consumer : StreamConsumer ; params : DeclareConsumerParams }
58+ type ConsumerMappedValue = { connection : Connection ; consumer : PrivateConsumer ; params : DeclareConsumerParams }
5259type PublisherMappedValue = {
5360 connection : Connection
54- publisher : StreamPublisher
61+ publisher : PrivatePublisher
5562 params : DeclarePublisherParams
5663 filter : FilterFunc | undefined
5764}
@@ -154,7 +161,7 @@ export class Client {
154161 publisherRef : streamPublisherParams . publisherRef ,
155162 } )
156163 }
157- const publisher = new StreamPublisher ( this . pool , streamPublisherParams , lastPublishingId , filter )
164+ const publisher = new PrivatePublisher ( this . pool , streamPublisherParams , lastPublishingId , filter )
158165 connection . registerForClosePublisher ( publisher . extendedId , params . stream , async ( ) => {
159166 await publisher . close ( false )
160167 this . publishers . delete ( publisher . extendedId )
@@ -163,7 +170,7 @@ export class Client {
163170 this . logger . info (
164171 `New publisher created with stream name ${ params . stream } , publisher id ${ publisherId } and publisher reference ${ params . publisherRef } `
165172 )
166- return publisher
173+ return new StreamPublisher ( publisher )
167174 }
168175
169176 public async deletePublisher ( extendedPublisherId : string ) {
@@ -194,7 +201,7 @@ export class Client {
194201 throw new Error ( `Broker does not support message filtering.` )
195202 }
196203
197- const consumer = new StreamConsumer (
204+ const consumer = new PrivateConsumer (
198205 this . pool ,
199206 handle ,
200207 {
@@ -211,20 +218,24 @@ export class Client {
211218 params . filter
212219 )
213220 connection . registerForCloseConsumer ( consumer . extendedId , params . stream , async ( ) => {
214- if ( params . connectionClosedListener ) {
215- params . connectionClosedListener ( false )
216- }
217- await this . closeConsumer ( consumer . extendedId )
221+ const activeConsumer = await this . prepareCloseConsumer ( consumer . extendedId )
222+ await this . closing ( activeConsumer . consumer , consumer . extendedId , false )
218223 } )
219224 this . consumers . set ( consumer . extendedId , { connection, consumer, params } )
220225 await this . declareConsumerOnConnection ( params , consumerId , connection , superStreamConsumer ?. superStream )
221226 this . logger . info (
222227 `New consumer created with stream name ${ params . stream } , consumer id ${ consumerId } and offset ${ params . offset . type } `
223228 )
224- return consumer
229+ return new StreamConsumer ( consumer )
225230 }
226231
227232 public async closeConsumer ( extendedConsumerId : string ) {
233+ const activeConsumer = await this . prepareCloseConsumer ( extendedConsumerId )
234+ await this . closing ( activeConsumer . consumer , extendedConsumerId , true )
235+ return true
236+ }
237+
238+ private async prepareCloseConsumer ( extendedConsumerId : string ) {
228239 const activeConsumer = this . consumers . get ( extendedConsumerId )
229240 if ( ! activeConsumer ) {
230241 this . logger . error ( "Consumer does not exist" )
@@ -238,8 +249,7 @@ export class Client {
238249 if ( streamInfos . length > 0 && streamExists ( streamInfos [ 0 ] ) ) {
239250 await this . unsubscribe ( activeConsumer . connection , consumerId )
240251 }
241- await this . closing ( activeConsumer . consumer , extendedConsumerId )
242- return true
252+ return activeConsumer
243253 }
244254
245255 public async declareSuperStreamConsumer (
@@ -275,7 +285,7 @@ export class Client {
275285 }
276286
277287 private async closeAllConsumers ( ) {
278- await Promise . all ( [ ...this . consumers . values ( ) ] . map ( ( { consumer } ) => consumer . close ( ) ) )
288+ await Promise . all ( [ ...this . consumers . values ( ) ] . map ( ( { consumer } ) => consumer . close ( true ) ) )
279289 this . consumers = new Map < string , ConsumerMappedValue > ( )
280290 }
281291
@@ -593,7 +603,7 @@ export class Client {
593603 }
594604 }
595605
596- private async getConsumerOrServerSavedOffset ( consumer : StreamConsumer ) {
606+ private async getConsumerOrServerSavedOffset ( consumer : PrivateConsumer ) {
597607 if ( consumer . isSingleActive && consumer . consumerRef && consumer . consumerUpdateListener ) {
598608 try {
599609 const offset = await consumer . consumerUpdateListener ( consumer . consumerRef , consumer . streamName )
@@ -721,8 +731,8 @@ export class Client {
721731 return res
722732 }
723733
724- private async closing ( consumer : StreamConsumer , extendedConsumerId : string ) {
725- await consumer . close ( )
734+ private async closing ( consumer : PrivateConsumer , extendedConsumerId : string , manuallyClose : boolean ) {
735+ await consumer . close ( manuallyClose )
726736 this . consumers . delete ( extendedConsumerId )
727737 this . logger . info ( `Closed consumer with id: ${ extendedConsumerId } ` )
728738 }
0 commit comments