diff --git a/Source/ARTBaseMessage.m b/Source/ARTBaseMessage.m index 48676a629..7201f09e8 100644 --- a/Source/ARTBaseMessage.m +++ b/Source/ARTBaseMessage.m @@ -21,6 +21,7 @@ - (id)copyWithZone:(NSZone *)zone { message->_data = [self.data copy]; message->_connectionId = self.connectionId; message->_encoding = self.encoding; + message->_extras = self.extras; return message; } diff --git a/Source/ARTJsonLikeEncoder.m b/Source/ARTJsonLikeEncoder.m index d63c08439..b07b02b9d 100644 --- a/Source/ARTJsonLikeEncoder.m +++ b/Source/ARTJsonLikeEncoder.m @@ -275,6 +275,8 @@ - (ARTMessage *)messageFromDictionary:(NSDictionary *)input { ARTMessage *message = [[ARTMessage alloc] init]; message.id = [input artString:@"id"]; message.name = [input artString:@"name"]; + message.action = ([input artNumber:@"action"] ?: [[NSNumber alloc] initWithInt:ARTMessageActionCreate]).integerValue; + message.serial = [input artString:@"serial"]; message.clientId = [input artString:@"clientId"]; message.data = [input objectForKey:@"data"]; message.encoding = [input artString:@"encoding"];; diff --git a/Source/ARTMessage.m b/Source/ARTMessage.m index 0ebf065da..eaba86d54 100644 --- a/Source/ARTMessage.m +++ b/Source/ARTMessage.m @@ -40,7 +40,8 @@ - (NSString *)description { - (id)copyWithZone:(NSZone *)zone { ARTMessage *message = [super copyWithZone:zone]; message.name = self.name; - message.extras = self.extras; + message.action = self.action; + message.serial = self.serial; return message; } diff --git a/Source/include/Ably/ARTMessage.h b/Source/include/Ably/ARTMessage.h index 88d145170..1207f2cf1 100644 --- a/Source/include/Ably/ARTMessage.h +++ b/Source/include/Ably/ARTMessage.h @@ -4,6 +4,41 @@ #import #import +/** + * The namespace containing the different types of message actions. + */ +NS_SWIFT_SENDABLE +typedef NS_ENUM(NSUInteger, ARTMessageAction) { + /** + * Message action has not been set. + */ + ARTMessageActionUnset, + /** + * Message action for a newly created message. + */ + ARTMessageActionCreate, + /** + * Message action for an updated message. + */ + ARTMessageActionUpdate, + /** + * Message action for a deleted message. + */ + ARTMessageActionDelete, + /** + * Message action for a newly created annotation. + */ + ARTMessageActionAnnotationCreate, + /** + * Message action for a deleted annotation. + */ + ARTMessageActionAnnotationDelete, + /** + * Message action for a meta-message that contains channel occupancy information. + */ + ARTMessageActionMetaOccupancy, +}; + NS_ASSUME_NONNULL_BEGIN /** @@ -14,6 +49,12 @@ NS_ASSUME_NONNULL_BEGIN /// The event name, if available @property (nullable, readwrite, nonatomic) NSString *name; +/// The action type of the message, one of the `ARTMessageAction` enum values. +@property (readwrite, nonatomic) ARTMessageAction action; + +/// This message's unique serial. +@property (nullable, readwrite, nonatomic) NSString *serial; + /** * Construct an `ARTMessage` object with an event name and payload. *