Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d0f20e7

Browse files
committed
+ added published message sequence number to publish API call (this information arrive as message envelope and used for issues debugging) [#130084461]
1 parent d6524fd commit d0f20e7

59 files changed

Lines changed: 1577 additions & 1225 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Example/PubNub Mac Example/AppDelegate.m

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,6 @@ - (void)applicationWillTerminate:(NSNotification *)aNotification {
7575

7676
- (void)pubNubInit {
7777

78-
[PNLog enabled:YES];
79-
[PNLog dumpToFile:YES];
80-
[PNLog setMaximumLogFileSize:(10 * 1024 * 1024)];
81-
[PNLog setMaximumNumberOfLogFiles:10];
82-
8378
// Initialize PubNub client.
8479
self.myConfig = [PNConfiguration configurationWithPublishKey:_pubKey subscribeKey:_subKey];
8580

@@ -89,6 +84,13 @@ - (void)pubNubInit {
8984
// Bind config
9085
self.client = [PubNub clientWithConfiguration:self.myConfig];
9186

87+
// Configure logger
88+
self.client.logger.enabled = YES;
89+
self.client.logger.writeToFile = YES;
90+
self.client.logger.maximumLogFileSize = (10 * 1024 * 1024);
91+
self.client.logger.maximumNumberOfLogFiles = 10;
92+
[self.client.logger setLogLevel:PNVerboseLogLevel];
93+
9294
// Bind didReceiveMessage, didReceiveStatus, and didReceivePresenceEvent 'listeners' to this delegate
9395
// just be sure the target has implemented the PNObjectEventListener extension
9496
[self.client addListener:self];
@@ -506,7 +508,7 @@ - (void)client:(PubNub *)client didReceiveMessage:(PNMessageResult *)message {
506508
if (message) {
507509

508510
NSLog(@"Received message: %@ on channel %@ at %@", message.data.message,
509-
message.data.subscribedChannel, message.data.timetoken);
511+
message.data.channel, message.data.timetoken);
510512
}
511513
}
512514

@@ -566,7 +568,7 @@ - (void)handleErrorStatus:(PNErrorStatus *)status {
566568
if (status.operation == PNSubscribeOperation) {
567569

568570
NSLog(@"Decryption failed for message from channel: %@",
569-
((PNMessageData *)status.associatedObject).subscribedChannel);
571+
((PNMessageData *)status.associatedObject).channel);
570572
}
571573
}
572574
else if (status.category == PNMalformedFilterExpressionCategory) {

Framework/PubNub Framework.xcodeproj/project.pbxproj

Lines changed: 80 additions & 26 deletions
Large diffs are not rendered by default.

PubNub/Core/PubNub+Core.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ @interface PubNub () <PN_CORE_PROTOCOLS>
6464
@property (nonatomic, strong) dispatch_queue_t callbackQueue;
6565
@property (nonatomic, copy) PNConfiguration *configuration;
6666
@property (nonatomic, strong) PNSubscriber *subscriberManager;
67+
@property (nonatomic, strong) PNPublishSequence *sequenceManager;
6768
@property (nonatomic, strong) PNClientState *clientStateManager;
6869
@property (nonatomic, strong) PNStateListener *listenersManager;
6970
@property (nonatomic, strong) PNHeartbeat *heartbeatManager;
@@ -226,6 +227,7 @@ - (instancetype)initWithConfiguration:(PNConfiguration *)configuration
226227
[self prepareNetworkManagers];
227228

228229
_subscriberManager = [PNSubscriber subscriberForClient:self];
230+
_sequenceManager = [PNPublishSequence sequenceForClient:self];
229231
_clientStateManager = [PNClientState stateForClient:self];
230232
_listenersManager = [PNStateListener stateListenerForClient:self];
231233
_heartbeatManager = [PNHeartbeat heartbeatForClient:self];

PubNub/Core/PubNub+CorePrivate.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#import "PubNub+Core.h"
2+
#import "PNPublishSequence.h"
23
#import "PNStateListener.h"
34
#import "PNClientState.h"
45
#import "PNSubscriber.h"
@@ -8,8 +9,7 @@
89

910
#pragma mark Class forward
1011

11-
@class PNRequestParameters, PNConfiguration, PNClientState, PNStateListener, PNSubscriber,
12-
PNHeartbeat, PNResult, PNStatus;
12+
@class PNRequestParameters, PNConfiguration, PNResult, PNStatus;
1313

1414

1515
NS_ASSUME_NONNULL_BEGIN
@@ -46,6 +46,13 @@ NS_ASSUME_NONNULL_BEGIN
4646
*/
4747
@property (nonatomic, readonly, strong) PNSubscriber *subscriberManager;
4848

49+
/**
50+
@brief Stores reference on instance which manage currently published message sequence number.
51+
52+
@since 4.5.2
53+
*/
54+
@property (nonatomic, readonly, strong) PNPublishSequence *sequenceManager;
55+
4956
/**
5057
@brief Stores reference on instance which is responsible for cached client state management.
5158

PubNub/Core/PubNub+Publish.m

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,16 @@ @interface PubNub (PublishPrivate)
3131
@param shouldStore Whether message should be stored in history storage or not.
3232
@param metadata JSON representation of \b NSDictionary with values which should be used by \b PubNub
3333
service to filter messages.
34+
@param sequenceNumber Next published message sequence number which should be used.
3435
3536
@return Configured and ready to use request parameters instance.
3637
3738
@since 4.0
3839
*/
3940
- (PNRequestParameters *)requestParametersForMessage:(NSString *)message toChannel:(NSString *)channel
4041
compressed:(BOOL)compressMessage storeInHistory:(BOOL)shouldStore
41-
metadata:(nullable NSString *)metadata;
42+
metadata:(nullable NSString *)metadata
43+
sequenceNumber:(NSUInteger)sequenceNumber;
4244

4345
/**
4446
@brief Merge user-specified message with push payloads into single message which will be processed on
@@ -199,6 +201,9 @@ - (void) publish:(id)message toChannel:(NSString *)channel
199201
mobilePushPayload:(NSDictionary<NSString *, id> *)payloads storeInHistory:(BOOL)shouldStore
200202
compressed:(BOOL)compressed withMetadata:(NSDictionary<NSString *, id> *)metadata
201203
completion:(PNPublishCompletionBlock)block {
204+
205+
// Get next published message sequence number and update stored data.
206+
NSUInteger nextSequenceNumber = [self.sequenceManager nextSequenceNumber:YES];
202207

203208
// Push further code execution on secondary queue to make service queue responsive during
204209
// JSON serialization and encryption process.
@@ -232,9 +237,12 @@ - (void) publish:(id)message toChannel:(NSString *)channel
232237
messageForPublish = [PNJSON JSONStringFrom:mergedData withError:&publishError];
233238
}
234239
PNRequestParameters *parameters = [strongSelf requestParametersForMessage:messageForPublish
235-
toChannel:channel compressed:compressed
240+
toChannel:channel
241+
compressed:compressed
236242
storeInHistory:shouldStore
237-
metadata:metadataForPublish];
243+
metadata:metadataForPublish
244+
sequenceNumber:nextSequenceNumber];
245+
238246
NSData *publishData = nil;
239247
if (compressed) {
240248

@@ -334,6 +342,9 @@ - (void)sizeOfMessage:(id)message toChannel:(NSString *)channel compressed:(BOOL
334342

335343
if (block) {
336344

345+
// Get next published message sequence number.
346+
NSUInteger nextSequenceNumber = [self.sequenceManager nextSequenceNumber:NO];
347+
337348
// Push further code execution on secondary queue to make service queue responsive during
338349
// JSON serialization and encryption process.
339350
__weak __typeof(self) weakSelf = self;
@@ -364,7 +375,8 @@ - (void)sizeOfMessage:(id)message toChannel:(NSString *)channel compressed:(BOOL
364375
toChannel:channel
365376
compressed:compressMessage
366377
storeInHistory:shouldStore
367-
metadata:metadataForPublish];
378+
metadata:metadataForPublish
379+
sequenceNumber:nextSequenceNumber];
368380
NSData *publishData = nil;
369381
if (compressMessage) {
370382

@@ -387,7 +399,9 @@ - (void)sizeOfMessage:(id)message toChannel:(NSString *)channel compressed:(BOOL
387399
#pragma mark - Misc
388400

389401
- (PNRequestParameters *)requestParametersForMessage:(NSString *)message toChannel:(NSString *)channel
390-
compressed:(BOOL)compressMessage storeInHistory:(BOOL)shouldStore metadata:(NSString *)metadata {
402+
compressed:(BOOL)compressMessage storeInHistory:(BOOL)shouldStore
403+
metadata:(nullable NSString *)metadata
404+
sequenceNumber:(NSUInteger)sequenceNumber {
391405

392406
PNRequestParameters *parameters = [PNRequestParameters new];
393407
if (channel.length) {
@@ -400,11 +414,14 @@ - (PNRequestParameters *)requestParametersForMessage:(NSString *)message toChann
400414
[parameters addPathComponent:(!compressMessage ? [PNString percentEscapedString:message] : @"")
401415
forPlaceholder:@"{message}"];
402416
}
417+
403418
if ([metadata isKindOfClass:[NSString class]] && metadata.length) {
404419

405420
[parameters addQueryParameter:[PNString percentEscapedString:metadata] forFieldName:@"meta"];
406421
}
407422

423+
[parameters addQueryParameter:@(sequenceNumber).stringValue forFieldName:@"seqn"];
424+
408425
return parameters;
409426
}
410427

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#import <Foundation/Foundation.h>
2+
3+
4+
#pragma mark Class forward
5+
6+
@class PubNub;
7+
8+
9+
NS_ASSUME_NONNULL_BEGIN
10+
11+
/**
12+
@brief Published messages sequence tracking manager.
13+
@discussion \b PubNub client allow to assign for each published messages it's sequence number. Manager allow
14+
to keep track on published sequence number even after application restart.
15+
16+
@author Sergey Mamontov
17+
@since 4.5.2
18+
@copyright © 2009-2016 PubNub, Inc.
19+
*/
20+
@interface PNPublishSequence : NSObject
21+
22+
23+
///------------------------------------------------
24+
/// @name Information
25+
///------------------------------------------------
26+
27+
/**
28+
@brief Stores reference on sequence number which has been used for recent message publish API usage.
29+
30+
@since 4.5.2
31+
*/
32+
@property (nonatomic, readonly, assign) NSUInteger sequenceNumber;
33+
34+
/**
35+
@brief Retrieve sequence number for next message and update current value if requested.
36+
37+
@param shouldUpdateCurrent Whether current value should be set to the one which is returned by this method.
38+
39+
@return Next published message sequence number.
40+
41+
@since 4.5.2
42+
*/
43+
- (NSUInteger)nextSequenceNumber:(BOOL)shouldUpdateCurrent;
44+
45+
46+
///------------------------------------------------
47+
/// @name Initialization and Configuration
48+
///------------------------------------------------
49+
50+
/**
51+
@brief Create and configure published messages sequence manager.
52+
@discussion If instance for same publish key already created it will be reused.
53+
54+
@param client Reference on client for which published messages sequence manager should be created.
55+
56+
@return Configured and ready to use client published messages sequence manager.
57+
58+
@since 4.5.2
59+
*/
60+
+ (instancetype)sequenceForClient:(PubNub *)client;
61+
62+
/**
63+
@brief Reset all information which is related to publish message sequence.
64+
@discussion All data will be reset and removed from \b Keychain.
65+
*/
66+
- (void)reset;
67+
68+
#pragma mark -
69+
70+
71+
@end
72+
73+
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)