SocketServiceHandler.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. //
  2. // SocketServiceHandler.m
  3. // OneCable
  4. //
  5. // Created by KaRam Kim on 2017. 2. 17..
  6. // Copyright © 2017년 ntels. All rights reserved.
  7. //
  8. #import "SocketServiceHandler.h"
  9. #import <SocketRocket/SRWebSocket.h>
  10. #import "Definitions.h"
  11. @interface SocketServiceHandler() <SRWebSocketDelegate>
  12. {
  13. SRWebSocket *_socket;
  14. }
  15. @end
  16. @implementation SocketServiceHandler
  17. + (id)sharedManager
  18. {
  19. static SocketServiceHandler *sharedSocketServiceHandler = nil;
  20. static dispatch_once_t onceToken;
  21. dispatch_once(&onceToken, ^{
  22. sharedSocketServiceHandler = [[self alloc] init];
  23. });
  24. return sharedSocketServiceHandler;
  25. }
  26. - (id) init
  27. {
  28. self = [super init];
  29. if (self) {
  30. _isConnected = NO;
  31. _strSocketURL = kSocketServer;
  32. _socket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:_strSocketURL]];
  33. _socket.delegate = self;
  34. [self socketOpen];
  35. }
  36. return self;
  37. }
  38. - (void) initWithDelegate:(id<SocketServiceHandlerDelegate>) delegate
  39. {
  40. [self setDelegate:delegate];
  41. }
  42. - (void) socketOpen
  43. {
  44. NSLog(@"socketOpen");
  45. if( _socket != nil )
  46. [_socket open];
  47. else
  48. {
  49. _socket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:_strSocketURL]];
  50. _socket.delegate = self;
  51. [_socket open];
  52. }
  53. }
  54. - (void) connectServer
  55. {
  56. if( !_isConnected )
  57. {
  58. // NSString* token = @"";
  59. //
  60. //// if( ![[[APUserDefaultManager sharedManager] getUserDefault:UDKEY_TOKEN] isEqualToString:@""] )
  61. //// token = [[APUserDefaultManager sharedManager] getUserDefault:UDKEY_TOKEN];
  62. //
  63. // NSData * jsonData = [NSJSONSerialization dataWithJSONObject:@{@"token":token} options:0 error:nil];
  64. // NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  65. // NSLog(@"%@ : %ld" ,myString, (long)_socket.readyState);
  66. if( _socket.readyState == SR_OPEN )
  67. {
  68. // [_socket send:myString];
  69. _isConnected = YES;
  70. }
  71. else if ( _socket.readyState == SR_CLOSED || _socket.readyState == SR_CLOSING )
  72. {
  73. [self disconnect];
  74. _socket = nil;
  75. [self socketOpen];
  76. }
  77. }
  78. }
  79. - (void) disconnect
  80. {
  81. if( _isConnected )
  82. {
  83. [_socket close];
  84. _socket = nil;
  85. }
  86. }
  87. - (void) sendData:(NSDictionary *)data
  88. {
  89. if(_socket.readyState == SR_OPEN)
  90. {
  91. NSError *error;
  92. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data
  93. options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
  94. error:&error];
  95. if (! jsonData) {
  96. NSLog(@"Got an error: %@", error);
  97. } else {
  98. NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  99. NSLog(@"Socket Send Data : %@", jsonString);
  100. [_socket send:jsonString];
  101. }
  102. }
  103. else if ( _socket.readyState == SR_CLOSED || _socket.readyState == SR_CLOSING )
  104. {
  105. [self reConnect];
  106. }
  107. }
  108. -(void) reConnect
  109. {
  110. [self disconnect];
  111. _socket = nil;
  112. [self socketOpen];
  113. }
  114. #pragma mark - SRWebSocketDelegate
  115. - (void)webSocketDidOpen:(SRWebSocket *)webSocket
  116. {
  117. NSLog(@"SOCKET didOpen");
  118. if (self.delegate && [self.delegate respondsToSelector:@selector(socketConnectComplete)]) {
  119. [self.delegate socketConnectComplete];
  120. }
  121. }
  122. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message
  123. {
  124. NSLog(@"SOCKET didReceiveMessage : %@", message);
  125. if (self.delegate && [self.delegate respondsToSelector:@selector(didReceiveMessage:)]) {
  126. [self.delegate didReceiveMessage:message];
  127. }
  128. NSString *errString = @"";
  129. if( message == nil || [message isEqualToString:@""] )
  130. errString = @"message empty";
  131. else
  132. {
  133. if( [message isKindOfClass:[NSString class]] )
  134. {
  135. NSError* error = nil;
  136. NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:[message dataUsingEncoding:NSUTF8StringEncoding]
  137. options:NSJSONReadingMutableContainers
  138. error:&error];
  139. if (error != nil) {
  140. NSLog(@"NSJSONSerialization JSONObject error: %@", [error localizedDescription]);
  141. return;
  142. }
  143. NSInteger msgType = [jsonObj[@"type"] integerValue];
  144. if ( msgType == 0 ) {
  145. }
  146. else
  147. {
  148. NSLog(@"msgType : %i",(int)msgType);
  149. }
  150. }
  151. }
  152. }
  153. - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error
  154. {
  155. NSLog(@"WebSocket error: %@", error);
  156. _isConnected = NO;
  157. [self reConnect];
  158. }
  159. - (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload
  160. {
  161. NSLog(@"WebSocket Receive Pong: %@", pongPayload);
  162. }
  163. - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean
  164. {
  165. NSLog(@"WebSocket closed with code: %ld reason:%@ wasClean:%d",
  166. (long)code, reason, wasClean);
  167. _isConnected = NO;
  168. [self reConnect];
  169. }
  170. @end