@@ -83,9 +83,9 @@ public async Task<TopicPublishResponse> Publish(string cacheName, string topicNa
8383 }
8484
8585 public async Task < TopicSubscribeResponse > Subscribe ( string cacheName , string topicName ,
86- ulong ? resumeAtTopicSequenceNumber = null )
86+ ulong ? resumeAtTopicSequenceNumber = null , ulong ? resumeAtTopicSequencePage = null )
8787 {
88- return await SendSubscribe ( cacheName , topicName , resumeAtTopicSequenceNumber ) ;
88+ return await SendSubscribe ( cacheName , topicName , resumeAtTopicSequenceNumber , resumeAtTopicSequencePage ) ;
8989 }
9090
9191 private const string RequestTypeTopicPublish = "TOPIC_PUBLISH" ;
@@ -116,23 +116,14 @@ private async Task<TopicPublishResponse> SendPublish(string cacheName, string to
116116 }
117117
118118 private async Task < TopicSubscribeResponse > SendSubscribe ( string cacheName , string topicName ,
119- ulong ? resumeAtTopicSequenceNumber )
119+ ulong ? resumeAtTopicSequenceNumber , ulong ? resumeAtTopicSequencePage )
120120 {
121- var request = new _SubscriptionRequest
122- {
123- CacheName = cacheName ,
124- Topic = topicName
125- } ;
126- if ( resumeAtTopicSequenceNumber != null )
127- {
128- request . ResumeAtTopicSequenceNumber = resumeAtTopicSequenceNumber . Value ;
129- }
130-
131121 SubscriptionWrapper subscriptionWrapper ;
132122 try
133123 {
134124 _logger . LogTraceExecutingTopicRequest ( RequestTypeTopicSubscribe , cacheName , topicName ) ;
135- subscriptionWrapper = new SubscriptionWrapper ( grpcManager , cacheName , topicName , _exceptionMapper , _logger ) ;
125+ subscriptionWrapper = new SubscriptionWrapper ( grpcManager , cacheName , topicName ,
126+ resumeAtTopicSequenceNumber , resumeAtTopicSequencePage , _exceptionMapper , _logger ) ;
136127 await subscriptionWrapper . Subscribe ( ) ;
137128 }
138129 catch ( Exception e )
@@ -157,15 +148,19 @@ private class SubscriptionWrapper : IDisposable
157148 private readonly ILogger _logger ;
158149
159150 private AsyncServerStreamingCall < _SubscriptionItem > ? _subscription ;
160- private ulong ? _lastSequenceNumber ;
151+ private ulong _lastSequenceNumber ;
152+ private ulong _lastSequencePage ;
161153 private bool _subscribed ;
162154
163155 public SubscriptionWrapper ( TopicGrpcManager grpcManager , string cacheName ,
164- string topicName , CacheExceptionMapper exceptionMapper , ILogger logger )
156+ string topicName , ulong ? resumeAtTopicSequenceNumber , ulong ? resumeAtTopicSequencePage ,
157+ CacheExceptionMapper exceptionMapper , ILogger logger )
165158 {
166159 _grpcManager = grpcManager ;
167160 _cacheName = cacheName ;
168161 _topicName = topicName ;
162+ _lastSequenceNumber = resumeAtTopicSequenceNumber ?? 0 ;
163+ _lastSequencePage = resumeAtTopicSequencePage ?? 0 ;
169164 _exceptionMapper = exceptionMapper ;
170165 _logger = logger ;
171166 }
@@ -177,10 +172,9 @@ public async Task Subscribe()
177172 CacheName = _cacheName ,
178173 Topic = _topicName
179174 } ;
180- if ( _lastSequenceNumber != null )
181- {
182- request . ResumeAtTopicSequenceNumber = _lastSequenceNumber . Value ;
183- }
175+
176+ request . ResumeAtTopicSequenceNumber = _lastSequenceNumber ;
177+ request . SequencePage = _lastSequencePage ;
184178
185179 _logger . LogTraceExecutingTopicRequest ( RequestTypeTopicSubscribe , _cacheName , _topicName ) ;
186180 var subscription = _grpcManager . Client . subscribe ( request , new CallOptions ( ) ) ;
@@ -247,14 +241,16 @@ public async Task Subscribe()
247241 {
248242 case _SubscriptionItem . KindOneofCase . Item :
249243 _lastSequenceNumber = message . Item . TopicSequenceNumber ;
244+ _lastSequencePage = message . Item . SequencePage ;
245+
250246 switch ( message . Item . Value . KindCase )
251247 {
252248 case _TopicValue . KindOneofCase . Text :
253249 _logger . LogTraceTopicMessageReceived ( "text" , _cacheName , _topicName ) ;
254- return new TopicMessage . Text ( message . Item . Value , checked ( ( long ) _lastSequenceNumber ) , message . Item . PublisherId == "" ? null : message . Item . PublisherId ) ;
250+ return new TopicMessage . Text ( message . Item . Value , _lastSequenceNumber , _lastSequencePage , message . Item . PublisherId == "" ? null : message . Item . PublisherId ) ;
255251 case _TopicValue . KindOneofCase . Binary :
256252 _logger . LogTraceTopicMessageReceived ( "binary" , _cacheName , _topicName ) ;
257- return new TopicMessage . Binary ( message . Item . Value , checked ( ( long ) _lastSequenceNumber ) , message . Item . PublisherId == "" ? null : message . Item . PublisherId ) ;
253+ return new TopicMessage . Binary ( message . Item . Value , _lastSequenceNumber , _lastSequencePage , message . Item . PublisherId == "" ? null : message . Item . PublisherId ) ;
258254 case _TopicValue . KindOneofCase . None :
259255 default :
260256 _logger . LogTraceTopicMessageReceived ( "unknown" , _cacheName , _topicName ) ;
@@ -264,10 +260,12 @@ public async Task Subscribe()
264260 break ;
265261 case _SubscriptionItem . KindOneofCase . Discontinuity :
266262 _logger . LogTraceTopicDiscontinuityReceived ( _cacheName , _topicName ,
267- message . Discontinuity . LastTopicSequence , message . Discontinuity . NewTopicSequence ) ;
263+ message . Discontinuity . LastTopicSequence , message . Discontinuity . NewTopicSequence , message . Discontinuity . NewSequencePage ) ;
268264 _lastSequenceNumber = message . Discontinuity . NewTopicSequence ;
269- return new TopicSystemEvent . Discontinuity ( checked ( ( long ) message . Discontinuity . LastTopicSequence ) ,
270- checked ( ( long ) message . Discontinuity . NewTopicSequence ) ) ;
265+ _lastSequencePage = message . Discontinuity . NewSequencePage ;
266+ return new TopicSystemEvent . Discontinuity ( message . Discontinuity . LastTopicSequence ,
267+ message . Discontinuity . NewTopicSequence ,
268+ message . Discontinuity . NewSequencePage ) ;
271269 case _SubscriptionItem . KindOneofCase . Heartbeat :
272270 _logger . LogTraceTopicMessageReceived ( "heartbeat" , _cacheName , _topicName ) ;
273271 return new TopicSystemEvent . Heartbeat ( ) ;
0 commit comments