Skip to content
This repository was archived by the owner on May 14, 2024. It is now read-only.

add reconnect require delegate #144

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions SocketIO.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ typedef enum {
@optional
- (void) socketIODidConnect:(SocketIO *)socket;
- (void) socketIODidDisconnect:(SocketIO *)socket disconnectedWithError:(NSError *)error;
- (void)socketIORequireReconnect:(SocketIO *)socket;
- (void) socketIO:(SocketIO *)socket didReceiveMessage:(SocketIOPacket *)packet;
- (void) socketIO:(SocketIO *)socket didReceiveJSON:(SocketIOPacket *)packet;
- (void) socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet;
Expand Down Expand Up @@ -80,6 +81,7 @@ typedef enum {
// heartbeat
NSTimeInterval _heartbeatTimeout;
dispatch_source_t _timeout;
dispatch_source_t _reconnectTimeout;

NSMutableArray *_queue;

Expand All @@ -100,6 +102,7 @@ typedef enum {
@property (nonatomic, readonly) NSTimeInterval heartbeatTimeout;
@property (nonatomic) BOOL useSecure;
@property (nonatomic, readonly) BOOL isConnected, isConnecting;
@property (nonatomic, assign) BOOL allowsReconnect;
@property (nonatomic, weak) id<SocketIODelegate> delegate;
@property (nonatomic) BOOL returnAllDataFromAck;

Expand Down
50 changes: 50 additions & 0 deletions SocketIO.m
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
static NSString* kForceDisconnectURL = @"%@://%@%@/%@/1/xhr-polling/%@?disconnect";

float const defaultConnectionTimeout = 10.0f;
float const defaultReconnectTimeout = 10.0f;

NSString* const SocketIOError = @"SocketIOError";
NSString* const SocketIOException = @"SocketIOException";
Expand All @@ -57,6 +58,7 @@ - (void) setTimeout;
- (void) onTimeout;

- (void) onConnect:(SocketIOPacket *)packet;
- (void) onReconnect;
- (void) onDisconnect:(NSError *)error;

- (void) sendDisconnect;
Expand Down Expand Up @@ -90,6 +92,7 @@ - (id) initWithDelegate:(id<SocketIODelegate>)delegate
_ackCount = 0;
_acks = [[NSMutableDictionary alloc] init];
_returnAllDataFromAck = NO;
_allowsReconnect = NO;
}
return self;
}
Expand Down Expand Up @@ -372,6 +375,18 @@ - (void) onConnect:(SocketIOPacket *)packet
[self setTimeout];
}

- (void) onReconnect
{
DEBUGLOG(@"onReconnect()");
if (_reconnectTimeout) {
dispatch_source_cancel(_reconnectTimeout);
_reconnectTimeout = NULL;
}
if ([_delegate respondsToSelector:@selector(socketIORequireReconnect:)]) {
[_delegate socketIORequireReconnect:self];
}
}

# pragma mark -
# pragma mark Acknowledge methods

Expand Down Expand Up @@ -435,6 +450,33 @@ - (void) setTimeout

}

- (void) setReconnectTimeout
{
DEBUGLOG(@"start reconnect timeout");
if (_reconnectTimeout) {
dispatch_source_cancel(_reconnectTimeout);
_timeout = NULL;
}

_reconnectTimeout = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER,
0,
0,
dispatch_get_main_queue());

dispatch_source_set_timer(_reconnectTimeout,
dispatch_time(DISPATCH_TIME_NOW, defaultReconnectTimeout * NSEC_PER_SEC),
0,
0);

__weak SocketIO *weakSelf = self;

dispatch_source_set_event_handler(_reconnectTimeout, ^{
[weakSelf onReconnect];
});

dispatch_resume(_reconnectTimeout);
}


# pragma mark -
# pragma mark Regex helper method
Expand Down Expand Up @@ -623,6 +665,10 @@ - (void) onDisconnect:(NSError *)error
[_transport close];
}

if (_allowsReconnect) {
[self setReconnectTimeout];
}

if ((wasConnected || wasConnecting)) {
if ([_delegate respondsToSelector:@selector(socketIODidDisconnect:disconnectedWithError:)]) {
[_delegate socketIODidDisconnect:self disconnectedWithError:error];
Expand Down Expand Up @@ -676,6 +722,10 @@ - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)er
_isConnected = NO;
_isConnecting = NO;

if (_allowsReconnect) {
[self setReconnectTimeout];
}

if ([_delegate respondsToSelector:@selector(socketIO:onError:)]) {
NSMutableDictionary *errorInfo = [[NSDictionary dictionaryWithObject:error
forKey:NSUnderlyingErrorKey] mutableCopy];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDESourceControlProjectFavoriteDictionaryKey</key>
<false/>
<key>IDESourceControlProjectIdentifier</key>
<string>3A14AC01-ADB6-460B-A39B-ACD3676D269B</string>
<key>IDESourceControlProjectName</key>
<string>SocketTesterARC</string>
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>1A20010B-ECBA-42CD-B4FC-3913BC1074BD</key>
<string>https://github.com/leoru/socket.IO-objc.git</string>
<key>651D8C48-124E-477C-948C-FED7E4F34E8B</key>
<string>https://github.com/stig/json-framework.git</string>
<key>96C278C3-8B4E-4D22-A1C7-497D0D2E9A29</key>
<string>https://github.com/square/SocketRocket.git</string>
</dict>
<key>IDESourceControlProjectPath</key>
<string>SocketTesterARC.xcodeproj/project.xcworkspace</string>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>1A20010B-ECBA-42CD-B4FC-3913BC1074BD</key>
<string>../..</string>
<key>651D8C48-124E-477C-948C-FED7E4F34E8B</key>
<string>../../submodules/json-framework</string>
<key>96C278C3-8B4E-4D22-A1C7-497D0D2E9A29</key>
<string>../../submodules/socket-rocket</string>
</dict>
<key>IDESourceControlProjectURL</key>
<string>https://github.com/leoru/socket.IO-objc.git</string>
<key>IDESourceControlProjectVersion</key>
<integer>110</integer>
<key>IDESourceControlProjectWCCIdentifier</key>
<string>1A20010B-ECBA-42CD-B4FC-3913BC1074BD</string>
<key>IDESourceControlProjectWCConfigurations</key>
<array>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>651D8C48-124E-477C-948C-FED7E4F34E8B</string>
<key>IDESourceControlWCCName</key>
<string>json-framework</string>
</dict>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>1A20010B-ECBA-42CD-B4FC-3913BC1074BD</string>
<key>IDESourceControlWCCName</key>
<string>socket</string>
</dict>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>96C278C3-8B4E-4D22-A1C7-497D0D2E9A29</string>
<key>IDESourceControlWCCName</key>
<string>socket-rocket</string>
</dict>
</array>
</dict>
</plist>