Skip to content

Commit

Permalink
Change -reattachWithReason: to accept metadata object
Browse files Browse the repository at this point in the history
As described in 068814f.
  • Loading branch information
lawrence-forooghian committed Apr 3, 2023
1 parent 068814f commit 7665b51
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 7 deletions.
4 changes: 3 additions & 1 deletion Source/ARTRealtime.m
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#import "ARTErrorChecker.h"
#import "ARTConnectionStateChangeMetadata.h"
#import "ARTChannelStateChangeMetadata.h"
#import "ARTAttachRequestMetadata.h"

@interface ARTConnectionStateChange ()

Expand Down Expand Up @@ -789,7 +790,8 @@ - (void)onConnected:(ARTProtocolMessage *)message {
[self.logger warn:@"RT:%p connection \"%@\" has reconnected, but resume failed. Reattaching any attached channels", self, message.connectionId];
// Reattach all channels
for (ARTRealtimeChannelInternal *channel in self.channels.nosyncIterable) {
[channel reattachWithReason:message.error];
ARTAttachRequestMetadata *const metadata = [[ARTAttachRequestMetadata alloc] initWithReason:message.error];
[channel reattachWithMetadata:metadata];
}
_resuming = false;
}
Expand Down
12 changes: 7 additions & 5 deletions Source/ARTRealtimeChannel.m
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,8 @@ - (void)transition:(ARTRealtimeChannelState)state withMetadata:(ARTChannelStateC
if (self.realtime.shouldSendEvents) {
channelRetryListener = [self unlessStateChangesBefore:self.realtime.options.channelRetryTimeout do:^{
[self.realtime.logger debug:__FILE__ line:__LINE__ message:@"RT:%p C:%p (%@) reattach initiated by retry timeout", self->_realtime, self, self.name];
[self reattachWithReason:nil];
ARTAttachRequestMetadata *const attachMetadata = [[ARTAttachRequestMetadata alloc] initWithReason:nil];
[self reattachWithMetadata:attachMetadata];
}];
}
break;
Expand Down Expand Up @@ -737,10 +738,12 @@ - (void)setAttached:(ARTProtocolMessage *)message {
- (void)setDetached:(ARTProtocolMessage *)message {
switch (self.state_nosync) {
case ARTRealtimeChannelAttached:
case ARTRealtimeChannelSuspended:
case ARTRealtimeChannelSuspended: {
[self.realtime.logger debug:__FILE__ line:__LINE__ message:@"RT:%p C:%p (%@) reattach initiated by DETACHED message", _realtime, self, self.name];
[self reattachWithReason:message.error];
ARTAttachRequestMetadata *const metadata = [[ARTAttachRequestMetadata alloc] initWithReason:message.error];
[self reattachWithMetadata:metadata];
return;
}
case ARTRealtimeChannelAttaching: {
[self.realtime.logger debug:__FILE__ line:__LINE__ message:@"RT:%p C:%p (%@) reattach initiated by DETACHED message but it is currently attaching", _realtime, self, self.name];
const ARTState state = message.error ? ARTStateError : ARTStateOk;
Expand Down Expand Up @@ -952,10 +955,9 @@ - (void)_attach:(ARTCallback)callback {
[self internalAttach:callback metadata:metadata];
}

- (void)reattachWithReason:(ARTErrorInfo *)reason {
- (void)reattachWithMetadata:(ARTAttachRequestMetadata *)metadata {
if ([self canBeReattached]) {
[self.realtime.logger debug:__FILE__ line:__LINE__ message:@"RT:%p C:%p (%@) %@ and will reattach", _realtime, self, self.name, ARTRealtimeChannelStateToStr(self.state_nosync)];
ARTAttachRequestMetadata *const metadata = [[ARTAttachRequestMetadata alloc] initWithReason:reason];
[self internalAttach:nil metadata:metadata];
} else {
[self.realtime.logger debug:__FILE__ line:__LINE__ message:@"RT:%p C:%p (%@) %@ should not reattach", _realtime, self, self.name, ARTRealtimeChannelStateToStr(self.state_nosync)];
Expand Down
3 changes: 2 additions & 1 deletion Source/PrivateHeaders/Ably/ARTRealtimeChannel+Private.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
@class ARTProtocolMessage;
@class ARTRealtimePresenceInternal;
@class ARTChannelStateChangeMetadata;
@class ARTAttachRequestMetadata;

NS_ASSUME_NONNULL_BEGIN

Expand Down Expand Up @@ -49,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN

- (bool)isLastChannelSerial:(NSString *)channelSerial;

- (void)reattachWithReason:(nullable ARTErrorInfo *)reason;
- (void)reattachWithMetadata:(ARTAttachRequestMetadata *)metadata;

- (void)_attach:(nullable ARTCallback)callback;
- (void)_detach:(nullable ARTCallback)callback;
Expand Down

0 comments on commit 7665b51

Please sign in to comment.