|
|
@@ -7,13 +7,19 @@
|
|
|
//
|
|
|
|
|
|
#import "SocketServiceHandler.h"
|
|
|
-#import <SocketRocket/SRWebSocket.h>
|
|
|
+
|
|
|
#import "Definitions.h"
|
|
|
|
|
|
+#import "JDJSONModel.h"
|
|
|
+
|
|
|
+#define MAX_RETRY_CONNECT_COUNT 1
|
|
|
+
|
|
|
@interface SocketServiceHandler() <SRWebSocketDelegate>
|
|
|
{
|
|
|
SRWebSocket *_socket;
|
|
|
NSMutableArray<NSDictionary *> *_messages;
|
|
|
+
|
|
|
+ int _retryCount;
|
|
|
}
|
|
|
@end
|
|
|
|
|
|
@@ -49,11 +55,17 @@
|
|
|
return self;
|
|
|
}
|
|
|
|
|
|
-- (void) initWithDelegate:(id<SocketServiceDelegate>) delegate
|
|
|
+- (void) initDelegate:(id<SocketServiceDelegate>) delegate
|
|
|
{
|
|
|
[self setDelegate:delegate];
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+- (SRReadyState) getSocketStatus
|
|
|
+{
|
|
|
+ return _socket.readyState;
|
|
|
+}
|
|
|
+
|
|
|
- (void) socketOpen
|
|
|
{
|
|
|
NSLog(@"socketOpen");
|
|
|
@@ -94,17 +106,19 @@
|
|
|
[_socket close];
|
|
|
_socket = nil;
|
|
|
}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (_socket != nil)
|
|
|
+ {
|
|
|
+ _socket = nil;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ _isConnected = NO;
|
|
|
}
|
|
|
|
|
|
- (void) sendData:(NSDictionary *)data
|
|
|
{
|
|
|
-// if(!_isConnected)
|
|
|
-// {
|
|
|
-// [_messages addObject:data];
|
|
|
-// [self socketOpen];
|
|
|
-// }
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
if(_socket.readyState == SR_OPEN)
|
|
|
{
|
|
|
NSError *error;
|
|
|
@@ -139,16 +153,24 @@
|
|
|
|
|
|
-(void) reConnect
|
|
|
{
|
|
|
- [self close];
|
|
|
- _socket = nil;
|
|
|
- [self socketOpen];
|
|
|
+ if(_retryCount < MAX_RETRY_CONNECT_COUNT)
|
|
|
+ {
|
|
|
+ _retryCount++;
|
|
|
+ [self close];
|
|
|
+ _socket = nil;
|
|
|
+ [self socketOpen];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ [self close];
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#pragma mark - SRWebSocketDelegate
|
|
|
- (void)webSocketDidOpen:(SRWebSocket *)webSocket
|
|
|
{
|
|
|
NSLog(@"SOCKET didOpen");
|
|
|
-
|
|
|
+ _retryCount = 0;
|
|
|
// Open이 되지 않은 상태에서 전송시도한 메세지들을 발송한다.
|
|
|
for (NSDictionary *data in _messages)
|
|
|
{
|
|
|
@@ -165,9 +187,7 @@
|
|
|
{
|
|
|
NSLog(@"SOCKET didReceiveMessage : %@", message);
|
|
|
|
|
|
- if (self.delegate && [self.delegate respondsToSelector:@selector(didReceiveMessage:)]) {
|
|
|
- [self.delegate didReceiveMessage:message];
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
NSString *errString = @"";
|
|
|
|
|
|
@@ -175,30 +195,53 @@
|
|
|
errString = @"message empty";
|
|
|
else
|
|
|
{
|
|
|
- if( [message isKindOfClass:[NSString class]] )
|
|
|
+ NSError* error = nil;
|
|
|
+ NSString *JSONString = [[NSString alloc] initWithData:message encoding:NSUTF8StringEncoding];
|
|
|
+ id rawJSON = [NSJSONSerialization JSONObjectWithData:message
|
|
|
+ options:NSJSONReadingAllowFragments
|
|
|
+ error:&error];
|
|
|
+
|
|
|
+ id JSONModel = nil;
|
|
|
+
|
|
|
+ if ([rawJSON isKindOfClass:[NSArray class]])
|
|
|
{
|
|
|
- NSError* error = nil;
|
|
|
- NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:[message dataUsingEncoding:NSUTF8StringEncoding]
|
|
|
- options:NSJSONReadingMutableContainers
|
|
|
- error:&error];
|
|
|
-
|
|
|
- if (error != nil) {
|
|
|
- NSLog(@"NSJSONSerialization JSONObject error: %@", [error localizedDescription]);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- NSInteger msgType = [jsonObj[@"type"] integerValue];
|
|
|
+ NSDictionary *JSONDic = @{@"list": rawJSON};
|
|
|
+ JSONModel = [[SocketModel alloc] initWithDictionary:JSONDic error:&error];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ JSONModel = [[SocketModel alloc] initWithString:JSONString error:&error];
|
|
|
+ }
|
|
|
+
|
|
|
+ if (self.delegate && [self.delegate respondsToSelector:@selector(socketDidReceiveMessage:)]) {
|
|
|
|
|
|
- if ( msgType == 0 ) {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- else
|
|
|
- {
|
|
|
- NSLog(@"msgType : %i",(int)msgType);
|
|
|
-
|
|
|
- }
|
|
|
+ [self.delegate socketDidReceiveMessage:JSONModel];
|
|
|
}
|
|
|
+
|
|
|
+// if( [message isKindOfClass:[NSString class]] )
|
|
|
+// {
|
|
|
+// NSError* error = nil;
|
|
|
+// NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:[message dataUsingEncoding:NSUTF8StringEncoding]
|
|
|
+// options:NSJSONReadingMutableContainers
|
|
|
+// error:&error];
|
|
|
+//
|
|
|
+// if (error != nil) {
|
|
|
+// NSLog(@"NSJSONSerialization JSONObject error: %@", [error localizedDescription]);
|
|
|
+// return;
|
|
|
+// }
|
|
|
+//
|
|
|
+// NSInteger msgType = [jsonObj[@"type"] integerValue];
|
|
|
+//
|
|
|
+// if ( msgType == 0 ) {
|
|
|
+//
|
|
|
+// }
|
|
|
+//
|
|
|
+// else
|
|
|
+// {
|
|
|
+// NSLog(@"msgType : %i",(int)msgType);
|
|
|
+//
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|
|
|
}
|
|
|
|