Skip to content

Commit

Permalink
Removed using syncSessionId.
Browse files Browse the repository at this point in the history
  • Loading branch information
maratal committed Mar 19, 2024
1 parent 4d01584 commit ad4d653
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 22 deletions.
33 changes: 13 additions & 20 deletions Source/ARTRealtimePresence.m
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,8 @@ @implementation ARTRealtimePresenceInternal {

NSMutableDictionary<NSString *, ARTPresenceMessage *> *_members;
NSMutableDictionary<NSString *, ARTPresenceMessage *> *_internalMembers; // RTP17h

NSMutableDictionary<NSString *, ARTPresenceMessage *> *_beforeSyncMembers; // RTP19
}

- (instancetype)initWithChannel:(ARTRealtimeChannelInternal *)channel logger:(ARTInternalLog *)logger {
Expand Down Expand Up @@ -785,7 +787,7 @@ - (void)processMember:(ARTPresenceMessage *)message {
case ARTPresenceUpdate:
case ARTPresencePresent:
messageCopy.action = ARTPresencePresent;
[self addInternalMember:messageCopy withSessionId:1];
[self addInternalMember:messageCopy];
break;
case ARTPresenceLeave:
if (!message.isSynthesized) {
Expand All @@ -803,7 +805,7 @@ - (void)processMember:(ARTPresenceMessage *)message {
case ARTPresenceUpdate:
case ARTPresencePresent:
messageCopy.action = ARTPresencePresent;
memberUpdated = [self addMember:messageCopy withSessionId:1];
memberUpdated = [self addMember:messageCopy];
break;
case ARTPresenceLeave:
messageCopy.action = ARTPresenceAbsent; // RTP2f
Expand All @@ -814,29 +816,28 @@ - (void)processMember:(ARTPresenceMessage *)message {
}

if (memberUpdated) {
[_beforeSyncMembers removeObjectForKey:message.memberKey]; // RTP19
[self broadcast:message];
}
else {
ARTLogDebug(_logger, @"Presence member \"%@\" with action %@ has been ignored", message.memberKey, ARTPresenceActionToStr(message.action));
}
}

- (BOOL)addMember:(ARTPresenceMessage *)message withSessionId:(NSUInteger)sessionId {
- (BOOL)addMember:(ARTPresenceMessage *)message {
ARTPresenceMessage *existing = [_members objectForKey:message.memberKey];
if (existing && [existing isNewerThan:message]) {
return false;
}
message.syncSessionId = sessionId;
_members[message.memberKey] = message;
return true;
}

- (BOOL)addInternalMember:(ARTPresenceMessage *)message withSessionId:(NSUInteger)sessionId {
- (BOOL)addInternalMember:(ARTPresenceMessage *)message {
ARTPresenceMessage *existing = [_internalMembers objectForKey:message.clientId];
if (existing && [existing isNewerThan:message]) {
return false;
}
message.syncSessionId = sessionId;
_internalMembers[message.clientId] = message;
ARTLogDebug(_logger, @"local member %@ with action %@ has been added", message.clientId, ARTPresenceActionToStr(message.action).uppercaseString);
return true;
Expand Down Expand Up @@ -870,21 +871,13 @@ - (void)cleanUpAbsentMembers {
}
}

- (void)prepareMembersForSync {
for (ARTPresenceMessage *member in [_members allValues]) {
member.syncSessionId = 0;
}
}

- (void)leaveMembersNotPresentInSync {
ARTLogDebug(_logger, @"%p leaving members not present in sync...", self);
for (ARTPresenceMessage *member in [_members allValues]) {
if (member.syncSessionId == 0) {
// Handle members that have not been added or updated in the PresenceMap during the sync process
ARTPresenceMessage *leave = [member copy];
[self removeMember:member];
[self didRemovedMemberNoLongerPresent:leave];
}
for (ARTPresenceMessage *member in [_beforeSyncMembers allValues]) {
// Handle members that have not been added or updated in the PresenceMap during the sync process
ARTPresenceMessage *leave = [member copy];
[self removeMember:member];
[self didRemovedMemberNoLongerPresent:leave];
}
}

Expand All @@ -895,7 +888,7 @@ - (void)reset {

- (void)startSync {
ARTLogDebug(_logger, @"%p PresenceMap sync started", self);
[self prepareMembersForSync];
_beforeSyncMembers = [_members mutableCopy];
_syncState = ARTPresenceSyncStarted;
[_syncEventEmitter emit:[ARTEvent newWithPresenceSyncState:_syncState] with:nil];
}
Expand Down
4 changes: 2 additions & 2 deletions Source/PrivateHeaders/Ably/ARTRealtimePresence+Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ NS_ASSUME_NONNULL_BEGIN
- (void)onceSyncEnds:(void (^)(NSArray<ARTPresenceMessage *> *))callback;
- (void)onceSyncFails:(ARTCallback)callback;

- (BOOL)addMember:(ARTPresenceMessage *)message withSessionId:(NSUInteger)sessionId;
- (BOOL)addInternalMember:(ARTPresenceMessage *)message withSessionId:(NSUInteger)sessionId;
- (BOOL)addMember:(ARTPresenceMessage *)message;
- (BOOL)addInternalMember:(ARTPresenceMessage *)message;

- (BOOL)removeMember:(ARTPresenceMessage *)message;
- (BOOL)removeInternalMember:(ARTPresenceMessage *)message;
Expand Down

0 comments on commit ad4d653

Please sign in to comment.