Explorar el Código

- WebSocket 로그인 연동 작업

KaRam Kim hace 8 años
padre
commit
278397d566

+ 3 - 1
OneCable/Classes/Handler/RequestHandler.m

@@ -29,7 +29,9 @@
 #pragma mark - URL Encoding
 - (NSString *)URLEncodedString:(NSString *)string
 {
-    return [string stringByAddingPercentEscapesUsingEncoding:NSEUCKREncoding];
+//    return [string stringByAddingPercentEscapesUsingEncoding:NSEUCKREncoding];
+    NSCharacterSet *allowedCharacterSet = [NSCharacterSet URLQueryAllowedCharacterSet];
+    return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
 
 //    NSString *encodedString = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
 //                                                                                           (CFStringRef)string,

+ 3 - 3
OneCable/Classes/Handler/SocketServiceHandler.h

@@ -8,7 +8,7 @@
 
 #import <Foundation/Foundation.h>
 
-@protocol SocketServiceHandlerDelegate <NSObject>
+@protocol SocketServiceDelegate <NSObject>
 
 @optional
 - (void) socketConnectComplete;
@@ -19,7 +19,7 @@
 
 @interface SocketServiceHandler : NSObject
 
-@property (nonatomic, assign) id<SocketServiceHandlerDelegate> delegate;
+@property (nonatomic, assign) id<SocketServiceDelegate> delegate;
 @property (readonly, nonatomic) BOOL isConnected;
 
 @property (nonatomic, strong) NSString* strSocketURL;
@@ -31,7 +31,7 @@
 
 - (void) sendData:(NSDictionary *)data;
 
-- (void) initWithDelegate:(id<SocketServiceHandlerDelegate>) delegate;
+- (void) initWithDelegate:(id<SocketServiceDelegate>) delegate;
 
 
 

+ 35 - 7
OneCable/Classes/Handler/SocketServiceHandler.m

@@ -13,7 +13,7 @@
 @interface SocketServiceHandler() <SRWebSocketDelegate>
 {
     SRWebSocket *_socket;
-    NSMutableArray<NSString *> *messages;
+    NSMutableArray<NSDictionary *> *_messages;
 }
 @end
 
@@ -36,10 +36,12 @@
     if (self) {
         
         _isConnected = NO;
-        _strSocketURL = kSocketServer;
+
+//        
+//        _socket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:_strSocketURL]];
+//        _socket.delegate = self;
         
-        _socket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:_strSocketURL]];
-        _socket.delegate = self;
+        _messages = [[NSMutableArray alloc] init];
         
         [self socketOpen];
     }
@@ -47,7 +49,7 @@
     return self;
 }
 
-- (void) initWithDelegate:(id<SocketServiceHandlerDelegate>) delegate
+- (void) initWithDelegate:(id<SocketServiceDelegate>) delegate
 {
     [self setDelegate:delegate];
 }
@@ -55,6 +57,8 @@
 - (void) socketOpen
 {
     NSLog(@"socketOpen");
+    _strSocketURL = [NSString stringWithFormat:@"%@%@", kSocketServer, API_ROOT_PATH];
+    NSLog(@"socketURL : %@", _strSocketURL);
     
     if( _socket != nil )
         [_socket open];
@@ -94,6 +98,13 @@
 
 - (void) sendData:(NSDictionary *)data
 {
+//    if(!_isConnected)
+//    {
+//        [_messages addObject:data];
+//        [self socketOpen];
+//    }
+    
+    
     if(_socket.readyState == SR_OPEN)
     {
         NSError *error;
@@ -101,9 +112,12 @@
                                                            options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                              error:&error];
         
-        if (! jsonData) {
+        if (!jsonData)
+        {
             NSLog(@"Got an error: %@", error);
-        } else {
+        }
+        else
+        {
             NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
             NSLog(@"Socket Send Data : %@", jsonString);
             [_socket send:jsonString];
@@ -111,8 +125,15 @@
     }
     else if ( _socket.readyState == SR_CLOSED || _socket.readyState == SR_CLOSING )
     {
+        // TODO : 미전송 메세지 저장하고 있기
+        [_messages addObject:data];
         [self reConnect];
     }
+    else
+    {
+        [_messages addObject:data];
+    }
+
 }
 
 
@@ -128,6 +149,13 @@
 {
     NSLog(@"SOCKET didOpen");
     
+    // Open이 되지 않은 상태에서 전송시도한 메세지들을 발송한다.
+    for (NSDictionary *data in _messages)
+    {
+        [self sendData:data];
+        [_messages removeObject:data];
+    }
+    
     if (self.delegate && [self.delegate respondsToSelector:@selector(socketConnectComplete)]) {
         [self.delegate socketConnectComplete];
     }

+ 1 - 0
OneCable/Classes/Model/LoginModel.m

@@ -183,6 +183,7 @@
 }
 
 - (BOOL)hasHomeHub {
+    NSLog(@"HomeHubDevice ID : %@", _homehubDeviceId);
     return _homehubDeviceId && ![_homehubDeviceId isEmptyString];
 }
 

+ 1 - 3
OneCable/Classes/ViewControllers/JDViewController.h

@@ -8,7 +8,7 @@
 #import "JDObject.h"
 #import "KNTableViewCell.h"
 #import "KNView.h"
-//#import "MoreButtonDelegate.h"
+
 
 @class CustomTableView;
 
@@ -31,8 +31,6 @@
 
 - (void)toggleOptionsWithArray:(id)sender btnArray:(NSMutableArray *)btnArray;
 
-- (void)returnMoreButton:(UIButton *)moreBtn;
-
 - (void)toggleOptions:(id)sender;
 - (void)resetOptions;
 - (void)dismissOptionPopOver:(void (^)(void))completion;

+ 6 - 2
OneCable/Classes/ViewControllers/JDViewController.m

@@ -13,7 +13,9 @@
 #import "HomeMemberViewController.h"
 #import "MorePopOverViewController.h"
 
-@interface JDViewController () <WYPopoverControllerDelegate, UITableViewDataSource, UITableViewDelegate, MoreButtonDelegate> {
+
+
+@interface JDViewController () <WYPopoverControllerDelegate, UITableViewDataSource, UITableViewDelegate, MoreButtonDelegate, SocketServiceDelegate> {
     WYPopoverController *_poc;
     OptionPopOverViewController *_ovc;
     MorePopOverViewController *_MoreVc;
@@ -199,6 +201,8 @@
 #pragma mark - Main Logic
 
 
+
+
 #pragma mark - UITableView DataSource & Delegate
 
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
@@ -227,7 +231,7 @@
 
 #pragma mark - UI Events
 
-
+#pragma mark - MoreButtonDelegate Delegate
 
 #pragma mark - MemoryWarning
 - (void)didReceiveMemoryWarning

+ 40 - 46
OneCable/Classes/ViewControllers/MainScreens/LoginViewController.m

@@ -69,10 +69,10 @@
     _txtPasswd.customTextFieldSuperview = CustomTextFieldSuperviewIsScrollView;
     _txtPasswd.secureTextEntry = YES;
 
-    _txtEmail.keyboardType = UIKeyboardTypeEmailAddress;
+    _txtEmail.keyboardType = UIKeyboardTypeDefault;
     _txtPasswd.keyboardType = UIKeyboardTypeDefault;
 
-    _txtEmail.returnKeyType = UIReturnKeyDone;
+    _txtEmail.returnKeyType = UIReturnKeyNext;
     _txtPasswd.returnKeyType = UIReturnKeyDone;
 
     _txtPasswd.delegate = self;
@@ -110,40 +110,42 @@
 #pragma mark - Main Logic
 
 - (void)requestLogin {
-    NSDictionary *param = @{@"email_id": _txtEmail.text,
+    NSDictionary *param = @{@"member_id": _txtEmail.text,
                             @"password": _txtPasswd.text,
-                            @"service_id": MOBILE_SERVICE_ID,
+//                            @"service_id": MOBILE_SERVICE_ID,
                             @"os_type": MOBILE_DEVICE_TYPE,
-                            @"device_sn": [JDFacade facade].deviceUUID,
-                            @"device_name": [CommonUtil deviceName],
+//                            @"device_sn": [JDFacade facade].deviceUUID,
+//                            @"device_name": [CommonUtil deviceName],
                             @"device_token": [JDFacade facade].APNSToken ? [JDFacade facade].APNSToken : ksEmptyString,
-                            @"device_hostname": [JDFacade facade].deviceHostName ? [JDFacade facade].deviceHostName : ksEmptyString};
+                            @"message_type": @"auth"};
     
-    [[RequestHandler handler] sendAsyncPostRequestAPIPath:API_POST_SIGN_IN parameters:param modelClass:[LoginModel class] completion:^(id responseObject) {
-        if (!responseObject) {//응답결과가 잘못되었거나 없을 경우,
-            return;
-        }
-
-        LoginModel *loginInfo = (LoginModel *)responseObject;
-        NSLog(@"%@", loginInfo);
-
-        if (loginInfo) {//API 성공 ,함
-            [self actionForLoginSucceed:loginInfo];
-
-        }
-    } failure:^(id errorObject) {
-        JDErrorModel *error = (JDErrorModel *)errorObject;
-
-        if ([error.errorCode isEqualToString:API_RESPONSE_UNAUTHORIZED_EMAIL]) {//이메일 아이디 인증이 안 된 계정
-            [self actionForWaiting];
-        } else if ([error.errorCode isEqualToString:API_RESPONSE_UNAUTHORIZED_DEVICE]) {//새로운 단말 인증 필요
-            [self actionForNeedsRegisteringNewDevice:error.nickname];
-        } else if ([error.errorCode isEqualToString:API_RESPONSE_MOBILES_OVER]) {//단말 초과
-            [self actionForMobilesOver:error.deviceList];
-        } else {
-            [[JDFacade facade] alert:error.errorMessage];
-        }
-    }];
+    [[SocketServiceHandler sharedManager] sendData:param];
+    
+//    [[RequestHandler handler] sendAsyncPostRequestAPIPath:API_POST_SIGN_IN parameters:param modelClass:[LoginModel class] completion:^(id responseObject) {
+//        if (!responseObject) {//응답결과가 잘못되었거나 없을 경우,
+//            return;
+//        }
+//
+//        LoginModel *loginInfo = (LoginModel *)responseObject;
+//        NSLog(@"%@", loginInfo);
+//
+//        if (loginInfo) {//API 성공 ,함
+//            [self actionForLoginSucceed:loginInfo];
+//
+//        }
+//    } failure:^(id errorObject) {
+//        JDErrorModel *error = (JDErrorModel *)errorObject;
+//
+//        if ([error.errorCode isEqualToString:API_RESPONSE_UNAUTHORIZED_EMAIL]) {//이메일 아이디 인증이 안 된 계정
+//            [self actionForWaiting];
+//        } else if ([error.errorCode isEqualToString:API_RESPONSE_UNAUTHORIZED_DEVICE]) {//새로운 단말 인증 필요
+//            [self actionForNeedsRegisteringNewDevice:error.nickname];
+//        } else if ([error.errorCode isEqualToString:API_RESPONSE_MOBILES_OVER]) {//단말 초과
+//            [self actionForMobilesOver:error.deviceList];
+//        } else {
+//            [[JDFacade facade] alert:error.errorMessage];
+//        }
+//    }];
 }
 
 //자동로그인 요청
@@ -329,28 +331,20 @@
 #pragma mark - UI Events
 - (IBAction)btnLogInTouched:(id)sender {
 
-//    CustomAlertView *alert = [[CustomAlertView alloc] initWithTitle:@"알림" message:@"테스트 메세지" delegate:nil OKButtonTitle:@"예" cancelButtonTitle:@"아니오"];
-//    [alert showWithCompletion:^(CustomAlertView *alertView, NSInteger buttonIndex) {
-//        if (buttonIndex == 0) {//OK - 이전화면으로
-//            
-//            return;
-//        }
-//    }];
-//    
-//    return;
 #ifdef DEBUG_MODE
     if ([_txtEmail.text isEmptyString]) {
-        _txtEmail.text = @"asura77@ncomz.com";
+        _txtEmail.text = @"asura77";
     }
 
     if ([_txtPasswd.text isEmptyString]) {
-        _txtPasswd.text = @"";
+        _txtPasswd.text = @"09767955";
     }
 #endif
 
-    if (![ValidateUtil validateTextfiled:_txtEmail type:ValidateTypeEmail title:@"이메일" ]) {
-        return;
-    }
+    // TODO : 아이디 형식 검사할것
+//    if (![ValidateUtil validateTextfiled:_txtEmail type:ValidateTypeEmail title:@"이메일" ]) {
+//        return;
+//    }
 
     if (![ValidateUtil validateTextfiled:_txtEmail type:ValidateTypeNull title:@"비밀번호" ]) {
         return;

+ 2 - 2
OneCable/Classes/ViewControllers/MainScreens/MainViewController.m

@@ -27,9 +27,9 @@
 #import "CustomImageView.h"
 #import "PwdPopupView.h"
 
-#import "SocketServiceHandler.h"
 
-@interface MainViewController () <ImageUtilDelegate, SocketServiceHandlerDelegate> {
+
+@interface MainViewController () <ImageUtilDelegate> {
     
     RulesViewController *_rvc;
     HomeMemberViewController *_mvc;

+ 1 - 0
OneCable/Prefix.pch

@@ -17,6 +17,7 @@
     #import <Foundation/Foundation.h>
     #import "CocoaLumberjack.h"
     #import "Common.h"
+    #import "SocketServiceHandler.h"
 #endif
 
 #endif