@@ -66,7 +66,7 @@ type dcp struct {
6666 version * couchbase.Version
6767 bucketInfo * couchbase.BucketInfo
6868 healthCheck couchbase.HealthCheck
69- listener models.Listener
69+ consumer models.Consumer
7070 readyCh chan struct {}
7171 cancelCh chan os.Signal
7272 stopCh chan struct {}
@@ -125,7 +125,7 @@ func (s *dcp) Start() {
125125
126126 s .stream = stream .NewStream (
127127 s .client , s .metadata , s .config , s .version , s .bucketInfo , s .vBucketDiscovery ,
128- s .listener , collectionIDs , s .stopCh , s .bus , s .eventHandler ,
128+ s .consumer , collectionIDs , s .stopCh , s .bus , s .eventHandler ,
129129 tc ,
130130 )
131131
@@ -245,7 +245,7 @@ func (s *dcp) GetVersion() *couchbase.Version {
245245 return s .version
246246}
247247
248- func newDcp (config * config.Dcp , listener models.Listener ) (Dcp , error ) {
248+ func newDcp (config * config.Dcp , consumer models.Consumer ) (Dcp , error ) {
249249 config .ApplyDefaults ()
250250 copyOfConfig := config
251251 printConfiguration (* copyOfConfig )
@@ -292,7 +292,7 @@ func newDcp(config *config.Dcp, listener models.Listener) (Dcp, error) {
292292
293293 return & dcp {
294294 client : client ,
295- listener : listener ,
295+ consumer : consumer ,
296296 config : config ,
297297 version : version ,
298298 bucketInfo : bucketInfo ,
@@ -306,29 +306,60 @@ func newDcp(config *config.Dcp, listener models.Listener) (Dcp, error) {
306306 }, nil
307307}
308308
309+ type simplifiedConsumer struct {
310+ listener models.Listener
311+ }
312+
313+ func NewSimpleConsumer (listener models.Listener ) models.Consumer {
314+ return & simplifiedConsumer {listener : listener }
315+ }
316+
317+ func (s * simplifiedConsumer ) ConsumeEvent (ctx * models.ListenerContext ) {
318+ s .listener (ctx )
319+ }
320+
321+ func (s * simplifiedConsumer ) TrackOffset (vbID uint16 , offset * models.Offset ) {}
322+
323+ // NewExtendedDcp creates a new Dcp client
324+ //
325+ // config: path to a configuration file or a configuration struct
326+ // consumer must implement models.Consumer interface containing both ConsumeEvent and TrackOffset methods
327+ func NewExtendedDcp (cfg any , consumer models.Consumer ) (Dcp , error ) {
328+ switch v := cfg .(type ) {
329+ case * config.Dcp :
330+ return newDcp (v , consumer )
331+ case config.Dcp :
332+ return newDcp (& v , consumer )
333+ case string :
334+ return newDcpWithPath (v , consumer )
335+ default :
336+ return nil , errors .New ("invalid config" )
337+ }
338+ }
339+
309340// NewDcp creates a new Dcp client
310341//
311342// config: path to a configuration file or a configuration struct
312343// listener is a callback function that will be called when a mutation, deletion or expiration event occurs
313344func NewDcp (cfg any , listener models.Listener ) (Dcp , error ) {
314345 switch v := cfg .(type ) {
315346 case * config.Dcp :
316- return newDcp (v , listener )
347+ return newDcp (v , NewSimpleConsumer ( listener ) )
317348 case config.Dcp :
318- return newDcp (& v , listener )
349+ return newDcp (& v , NewSimpleConsumer ( listener ) )
319350 case string :
320- return newDcpWithPath (v , listener )
351+ return newDcpWithPath (v , NewSimpleConsumer ( listener ) )
321352 default :
322353 return nil , errors .New ("invalid config" )
323354 }
324355}
325356
326- func newDcpWithPath (path string , listener models.Listener ) (Dcp , error ) {
357+ func newDcpWithPath (path string , consumer models.Consumer ) (Dcp , error ) {
327358 c , err := newDcpConfig (path )
328359 if err != nil {
329360 return nil , err
330361 }
331- return newDcp (& c , listener )
362+ return newDcp (& c , consumer )
332363}
333364
334365func newDcpConfig (path string ) (config.Dcp , error ) {
0 commit comments