SocketServiceHandler.m 4.9 KB

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