SocketServiceHandler.m 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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) connect
  55. {
  56. if( !_isConnected )
  57. {
  58. NSString* token = @"";
  59. // if( ![[[APUserDefaultManager sharedManager] getUserDefault:UDKEY_TOKEN] isEqualToString:@""] )
  60. // token = [[APUserDefaultManager sharedManager] getUserDefault:UDKEY_TOKEN];
  61. NSData * jsonData = [NSJSONSerialization dataWithJSONObject:@{@"token":token} options:0 error:nil];
  62. NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  63. NSLog(@"%@ : %ld" ,myString, (long)_socket.readyState);
  64. if( _socket.readyState == SR_OPEN )
  65. {
  66. [_socket send:myString];
  67. _isConnected = YES;
  68. }
  69. else if ( _socket.readyState == SR_CLOSED || _socket.readyState == SR_CLOSING )
  70. {
  71. [self disconnect];
  72. _socket = nil;
  73. [self socketOpen];
  74. }
  75. }
  76. }
  77. - (void) disconnect
  78. {
  79. if( _isConnected )
  80. {
  81. [_socket close];
  82. _socket = nil;
  83. }
  84. }
  85. #pragma mark - SRWebSocketDelegate
  86. - (void)webSocketDidOpen:(SRWebSocket *)webSocket
  87. {
  88. NSLog(@"SOCKET didOpen");
  89. }
  90. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message
  91. {
  92. NSLog(@"SOCKET didReceiveMessage : %@", message);
  93. NSString *errString = @"";
  94. if( message == nil || [message isEqualToString:@""] )
  95. errString = @"message empty";
  96. else
  97. {
  98. if( [message isKindOfClass:[NSString class]] )
  99. {
  100. NSError* error = nil;
  101. NSDictionary *jsonObj = [NSJSONSerialization JSONObjectWithData:[message dataUsingEncoding:NSUTF8StringEncoding]
  102. options:NSJSONReadingMutableContainers
  103. error:&error];
  104. if (error != nil) {
  105. NSLog(@"NSJSONSerialization JSONObject error: %@", [error localizedDescription]);
  106. return;
  107. }
  108. NSInteger msgType = [jsonObj[@"type"] integerValue];
  109. if ( msgType == 0 ) {
  110. }
  111. else
  112. {
  113. NSLog(@"msgType : %i",(int)msgType);
  114. }
  115. }
  116. }
  117. }
  118. - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error
  119. {
  120. NSLog(@"WebSocket error: %@", error);
  121. _isConnected = NO;
  122. [_socket close];
  123. _socket = nil;
  124. [self socketOpen];
  125. }
  126. - (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload
  127. {
  128. NSLog(@"WebSocket Receive Pong: %@", pongPayload);
  129. }
  130. - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean
  131. {
  132. NSLog(@"WebSocket closed with code: %ld reason:%@ wasClean:%d",
  133. (long)code, reason, wasClean);
  134. _isConnected = NO;
  135. [_socket close];
  136. _socket = nil;
  137. [self socketOpen];
  138. }
  139. @end