// // SocketServiceHandler.m // OneCable // // Created by KaRam Kim on 2017. 2. 17.. // Copyright © 2017년 ntels. All rights reserved. // #import "SocketServiceHandler.h" #import #import "Definitions.h" @interface SocketServiceHandler() { SRWebSocket *_socket; } @end @implementation SocketServiceHandler + (id)sharedManager { static SocketServiceHandler *sharedSocketServiceHandler = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedSocketServiceHandler = [[self alloc] init]; }); return sharedSocketServiceHandler; } - (id) init { self = [super init]; if (self) { _isConnected = NO; _strSocketURL = kSocketServer; _socket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:_strSocketURL]]; _socket.delegate = self; [self socketOpen]; } return self; } - (void) initWithDelegate:(id) delegate { [self setDelegate:delegate]; } - (void) socketOpen { NSLog(@"socketOpen"); if( _socket != nil ) [_socket open]; else { _socket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:_strSocketURL]]; _socket.delegate = self; [_socket open]; } } - (void) connect { if( !_isConnected ) { NSString* token = @""; // if( ![[[APUserDefaultManager sharedManager] getUserDefault:UDKEY_TOKEN] isEqualToString:@""] ) // token = [[APUserDefaultManager sharedManager] getUserDefault:UDKEY_TOKEN]; NSData * jsonData = [NSJSONSerialization dataWithJSONObject:@{@"token":token} options:0 error:nil]; NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSLog(@"%@ : %ld" ,myString, (long)_socket.readyState); if( _socket.readyState == SR_OPEN ) { [_socket send:myString]; _isConnected = YES; } else if ( _socket.readyState == SR_CLOSED || _socket.readyState == SR_CLOSING ) { [self disconnect]; _socket = nil; [self socketOpen]; } } } - (void) disconnect { if( _isConnected ) { [_socket close]; _socket = nil; } } #pragma mark - SRWebSocketDelegate - (void)webSocketDidOpen:(SRWebSocket *)webSocket { NSLog(@"SOCKET didOpen"); } - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message { NSLog(@"SOCKET didReceiveMessage : %@", message); NSString *errString = @""; if( message == nil || [message isEqualToString:@""] ) errString = @"message empty"; else { 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); } } } } - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error { NSLog(@"WebSocket error: %@", error); _isConnected = NO; [_socket close]; _socket = nil; [self socketOpen]; } - (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload { NSLog(@"WebSocket Receive Pong: %@", pongPayload); } - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean { NSLog(@"WebSocket closed with code: %ld reason:%@ wasClean:%d", (long)code, reason, wasClean); _isConnected = NO; [_socket close]; _socket = nil; [self socketOpen]; } @end