MNetwork

MNetwork Framework 에 대한 필수 API 를 정의

Net API

네크워크 관련된 기능들을 제공

쿠키 제거

M.net.cookie.clear()

Changed in version 2.2.0.

  • 쿠키 정보를 제거한다.

Example:

M.net.cookie.clear();

HTTP 통신

M.net.http.send(setting)

Changed in version 2.2.0.

Arguments
  • setting (Object) – 리소스 업데이트를 위한 설정 정보

  • setting.server (String) – 타겟 서버

  • setting.path (String) – 전문 코드

  • setting.method (String) – 전송 방식 (GET, PUT, POST, DELETE)

  • setting.timeout (int) – 타임 아웃 (millisecond)

  • setting.dummy (Bool) – 더미전문 여부

  • setting.encrypt (Bool) – 데이터 암복호화 여부 (네이티브 NetworkManager에 구현이 되어있어야함)

  • setting.indicator (String) – 인디케이터 정보

  • setting.userData (Object) – 사용자 정보 셋팅 (스크립트에서 네이티브로 정보값을 전달할 때 사용, 실제 통신에는 포함되지 않음)

  • setting.success (Function) – 성공 여부에 따라 호출되는 콜백 함수

M.net.http.success(receivedData)
Arguments
  • receivedData (Object) – 실행 결과

Arguments
  • setting.error (Function) – 오류 발생 시 콜백 함수

error(errCode, errMessage)
Arguments
  • errCode (String) – 에러 코드

  • errMessage (String) – 에러 메세지

  • http 네트워크 통신을 한다.

Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들
  • reqdata = data

  • secure = encrypt

  • trcode = path

  • restAction = method

  • onsuccess = success

  • onerror = error

Example:

  • 기본 옵션

M.net.http.send({
        server: 'DEMO',
        path: 'language/translate/v2/detect',
        method: 'POST',
        timeout: 5000,
        userData: {urlInfo: 'http://www.uracle.co.kr'},
        indicator:{
                show: true,
                message: 'Loading..',
                cancelable: true
        },
        data: {
                key: 'AIzaSyDbk0nUTyd4ChyFrCkHa-XAufg6-0u-OLw',
                q: 'test'
        },
        success: function(recevedData, setting) {
                console.log( "onSuccess, " + JSON.stringify(recevedData) );
        },
        error: function(errorCode, errorMessage, setting) {
                console.log( "onError, " + errorCode + ", " + errorMessage );
        }
});
  • 기본 옵션 without Indicator

M.net.http.send({
        server: 'DEMO_SERVER',
        path:   'api/msp/sample/test',
        method: 'POST',
        userData: {urlInfo: 'http://www.uracle.co.kr'},
        indicator: {
                show: false
        },
        data:   {
                'deploy' : '0',
                'version': '000000',
                'rsp' : '0b3235695f40f279ba3bda96497b894eb457ce73f8dcd6ec4d2c39d1fa622dac7b8e4c52f9b477e759343f07969bfe1d'
        },
        onSuccess:      function(recevedData, setting) {
                M.tool.log( "onSuccess", recevedData );
                alert( "onSuccess, " + JSON.stringify(recevedData) );
        },
        "onError":      function(errorCode, errorMessage, setting) {
                M.tool.log( "onError", errorCode, errorMessage );
                alert( "onError, " + errorCode + ", " + errorMessage );
        }
});
  • 모든 옵션

M.net.http.send({
        server: 'DEMO_SERVER',
        path:   'api/msp/sample/test',
        method: 'POST',
        timeout: '1000',
        userData: {urlInfo: 'http://www.uracle.co.kr'},
        dummy: false,
        secure: false,
        indicator:{
                show: true,
                message: 'Loading..',
                cancelable: true
        },
        data:   {
                'deploy' : '0',
                'version': '000000',
                'rsp' : '0b3235695f40f279ba3bda96497b894eb457ce73f8dcd6ec4d2c39d1fa622dac7b8e4c52f9b477e759343f07969bfe1d'
        },
        onSuccess:      function(recevedData, setting) {
                M.tool.log( "onSuccess", recevedData );
                alert( "onSuccess, " + JSON.stringify(recevedData) );
        },
        "onError":      function(errorCode, errorMessage, setting) {
                M.tool.log( "onError", errorCode, errorMessage );
                alert( "onError, " + errorCode + ", " + errorMessage );
        }
});

SOCKET 통신

M.net.socket.send(setting)

Changed in version 2.2.0.

Arguments
  • setting (Object) – 리소스 업데이트를 위한 설정 정보

  • setting.server (String) – 타겟 서버

  • setting.path (String) – 전문 코드

  • setting.timeout (int) – 타임 아웃 (millisecond)

  • setting.dummy (Bool) – 더미전문 여부

  • setting.encrypt (Bool) – 데이터 암복호화 여부 (네이티브 NetworkManager에 구현이 되어있어야함)

  • setting.userData (Object) – 사용자 정보 셋팅

  • setting.indicator (String) – 인디케이터 정보

  • setting.success (Function) – 성공 여부에 따라 호출되는 콜백 함수

M.net.socket.success(receivedData)
Arguments
  • receivedData (Object) – 실행 결과

Arguments
  • setting.error (Function) – 오류 발생 시 콜백 함수

error(errCode, errMessage)
Arguments
  • errCode (String) – 에러 코드

  • errMessage (String) – 에러 메세지

  • socket 네트워크 통신을 한다.

Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들
  • reqdata = data

  • secure = encrypt

  • trcode = path

  • onsuccess = success

  • onerror = error

Example:

var sendData = new DataSendingHandler();
        sendData.putHeadInfo("command","0");
        var templeteData = new DataReceivingHandler();
        M.net.socket.send({
                'server': 'TCP_TEST',
                'path': 'S14',
                'data': sendData,
                'templeteData': templeteData,
                'encrypt': false,
                'indicator': {
                        'show': false,
                        'message': '',
                        'cancelable': false
                },
                'start': function( setting ) {
                        WNLog("CJD", "socket.send.start : " + JSON.stringify(setting));
                        console.log( 'socket.send.start', setting );
                },
                'finish': function( setting ) {
                        WNLog("CJD", "socket.send.finish : " + JSON.stringify(setting));
                        console.log( 'socket.send.finish', setting );
                },
                'success': function(receivedData, trCode) {
                        WNLog("CJD", "socket.send.success");
                        console.log( 'socket.send.success' );
                        if(receivedData.length > 0){
                                var strBuff = '';
                                for(var i=0; i<receivedData.length; i++){
                                        strBuff += '<li>';
                                        strBuff += '    <div class="hbox jc">';
                                        strBuff += '            <div class="wifi_info">';
                                        strBuff += '                    <p class="name">' + receivedData[i].SSID + '</p>';
                                        strBuff += '            </div>';
                                        strBuff += '            <p class="icon_wifi ' + getWifiIcon(getWifiLevel(receivedData[i].level)) + '"></p>';
                                        strBuff += '    </div>';
                                        strBuff += '</li>';
                                }
                                $("#wifiList").html(strBuff);
                                $("#wifiList > li").on("click", function(){
                                        var $this = $(this);
                                        mPageHtml("wifi_setting", {
                                                param : {
                                                        SSID : receivedData[$this.index()].SSID
                                                }
                                        });
                                });
                        }
                },
                'error': function() {
                        WNLog("CJD", "socket.send.error");
                        console.log( 'socket.send.error' );
                        popup.confirm.create({
                                message : "목록 조회에 실패했습니다. 설정을 확인하시겠습니까?",
                                yesCB : function(){
                                        exWNMoveToWifiSetting();
                                },
                                noCB : function(){
                                        mPageBack();
                                }
                        });
                }
        });

리소스 업데이트

M.net.res.update(setting)

Changed in version 2.1.4.13.

Arguments
  • setting (Object) – 리소스 업데이트를 위한 설정 정보

  • setting.server (String) – Manifest.xml 에 설정된 서버명 [option]

  • setting.mode (String) – 배포모드 (real/mode) [option]

  • setting.finish (Function) – 리소스 업데이트 후 호출되는 콜백 함수

M.net.res.finish(status, info)
Arguments
  • status (String) – 실행 결과 코드

  • info (Object) – 공지 사항, 앱 업데이트 정보

  • info.app_version_info (Object) – 앱 업데이트 정보

  • info.notice (Object) – 공지 사항 정보 (게시 기간에 상관없는 가장 최신 정보)

  • info.notice_list (Array) – 공지 사항 정보 (게시 기간에 해당되는 공지사항 정보 array)

Arguments
  • setting.progress (Function) – 리소스 업데이트 진행 상태 콜백 함수

progress(totalSize, readSize, remainingSize, percentage)
Arguments
  • totalSize (String) – 리소스 총 파일 크기

  • readSize (String) – 현재까지 받은 크기

  • remainingSize (String) – 남은 크기

  • percentage (String) – 현재까지 받은 크기 백분율

Arguments
  • setting.error (Function) – 리소스 업데이트 오류 발생 시 콜백 함수

error(errCode, errMessage)
Arguments
  • errCode (String) – 에러 코드

  • errMessage (String) – 에러 메세지

  • 리소스 동적 업데이트를 한다.

Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들
  • onprogress = progress

  • onfinish = finish

  • onerror = error

Example [Default]:

var nextPage = "/www/html/common/main.html";
M.net.res.update({
    finish : function(status, info, option) {
        switch (status) {
            // 리소스 업데이트 성공
            case 'SUCCESS':
                $(".progress-bar").css("width", '100%');
                M.page.html(nextPage, {action:"CLEAR_TOP"});
                break;
            // 리소스 업데이트 성공 And Refresh
            case 'SUCCESS_AND_REFRESH':
                M.page.replace('intro.html');
                break;

            // 앱 권장 업데이트
            case 'RECOMMENDED_APP_UPDATING' :
                M.pop.alert({
                   title: '알림',
                   message: '앱 권장 업데이트가 있습니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         var appUrl = info.app_version_info.download_market_url;
                         M.apps.browser(appUrl);
                      }else{
                         M.page.html(nextPage, {action:"CLEAR_TOP", delay:600});
                      }
                   }
                });
                break;

            // 앱 강제 업데이트
            case 'FORCED_APP_UPDATING' :
                M.pop.alert({
                   title: '알림',
                   message: '앱을 업데이트해야 합니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         var appUrl = info.app_version_info.download_market_url;
                         M.apps.browser(appUrl);
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // 라이센스 체크 에러
            case 'LICENSE_IS_NOT_EXISTENCE':
            // 라이센스 무결성 회손
            case 'BROKEN_INTEGRITY_OF_LICENSE':
            // 라이센스 기간 만료
            case 'EXPIRED_LICENSE':
                M.pop.alert({
                   title: '알림',
                   message: '라이센스 에러입니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // 설치 메모리 부족
            case 'INSUFFICIENT_MEMORY':
                M.pop.alert({
                   title: '알림',
                   message: '설치 메모리가 부족합니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // 외장 메모리 카드 사용 오류
            case 'EXT_MEM_NOT_AVAIL':
                M.pop.alert({
                   title: '알림',
                   message: '외장 메모리 오류입니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // UNDEFINED ERROR
            default:
                M.pop.alert({
                   title: '알림',
                   message: '알 수 없는 오류입니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;
        }
    },

    progress : function(total, read, remain, percentage, option) {
        console.log('** progress', total, read, remain, percentage);

        var progressBarWidth = Math.max( Math.min( percentage, 100 ), 0 ) + "%";
        $(".progress-bar").css("width", progressBarWidth);
        $(".progress-percent").html( percentage + '%' );
    },

    error : function(errCode, errMsg, option) {
        M.debug.error("** error : ", errCode, errMsg);

        M.pop.alert({
           title: '알림',
           message: '알 수 없는 오류입니다.',
           buttons: ['취소', '확인'],
           callback: function(index) {
              if(index == 1){
                 M.net.res.retry();
              }else{
                 M.sys.exit();
              }
           }
        });
    }
});

Example [Option]:

var nextPage = "/www/html/common/main.html";
M.net.res.update({
    server : "RES_UPDATE",
    mode : "dev",
    finish : function(status, info, option) {
        switch (status) {
            // 리소스 업데이트 성공
            case 'SUCCESS':
                $(".progress-bar").css("width", '100%');
                M.page.html(nextPage, {action:"CLEAR_TOP"});
                break;
            // 리소스 업데이트 성공 And Refresh
            case 'SUCCESS_AND_REFRESH':
                M.page.replace('intro.html');
                break;

            // 앱 권장 업데이트
            case 'RECOMMENDED_APP_UPDATING' :
                M.pop.alert({
                   title: '알림',
                   message: '앱 권장 업데이트가 있습니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         var appUrl = info.app_version_info.download_market_url;
                         M.apps.browser(appUrl);
                      }else{
                         M.page.html(nextPage, {action:"CLEAR_TOP", delay:600});
                      }
                   }
                });
                break;

            // 앱 강제 업데이트
            case 'FORCED_APP_UPDATING' :
                M.pop.alert({
                   title: '알림',
                   message: '앱을 업데이트해야 합니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         var appUrl = info.app_version_info.download_market_url;
                         M.apps.browser(appUrl);
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // 라이센스 체크 에러
            case 'LICENSE_IS_NOT_EXISTENCE':
            // 라이센스 무결성 회손
            case 'BROKEN_INTEGRITY_OF_LICENSE':
            // 라이센스 기간 만료
            case 'EXPIRED_LICENSE':
                M.pop.alert({
                   title: '알림',
                   message: '라이센스 에러입니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // 설치 메모리 부족
            case 'INSUFFICIENT_MEMORY':
                M.pop.alert({
                   title: '알림',
                   message: '설치 메모리가 부족합니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // 외장 메모리 카드 사용 오류
            case 'EXT_MEM_NOT_AVAIL':
                M.pop.alert({
                   title: '알림',
                   message: '외장 메모리 오류입니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;

            // UNDEFINED ERROR
            default:
                M.pop.alert({
                   title: '알림',
                   message: '알 수 없는 오류입니다.',
                   buttons: ['취소', '확인'],
                   callback: function(index) {
                      if(index == 1){
                         M.net.res.retry();
                      }else{
                         M.sys.exit();
                      }
                   }
                });
                break;
        }
    },

    progress : function(total, read, remain, percentage, option) {
        console.log('** progress', total, read, remain, percentage);

        var progressBarWidth = Math.max( Math.min( percentage, 100 ), 0 ) + "%";
        $(".progress-bar").css("width", progressBarWidth);
        $(".progress-percent").html( percentage + '%' );
    },

    error : function(errCode, errMsg, option) {
        M.debug.error("** error : ", errCode, errMsg);

        M.pop.alert({
           title: '알림',
           message: '알 수 없는 오류입니다.',
           buttons: ['취소', '확인'],
           callback: function(index) {
              if(index == 1){
                 M.net.res.retry();
              }else{
                 M.sys.exit();
              }
           }
        });
    }
});

리소스 업데이트 가능 여부 확인

M.net.res.check(setting)

Changed in version 2.1.4.13.

Arguments
  • setting (Object) – 리소스 서버 정보

  • setting.server (String) – Manifest.xml 에 설정된 서버명 [option]

  • setting.mode (String) – 배포모드 (real/mode) [option]

  • setting.callback (Function) – 체크 후 호출되는 콜백 함수

M.net.res.callback(status, info)
Arguments
  • status (String) – 실행 결과 코드 (성공: IS_RESOURCE_UPDATE, 실패: FAIL_RESOURCE_UPDATE)

  • info (Object) – 앱 업데이트 정보

  • info.client_app_version (String) – 클라이언트 앱 버전

  • info.current_app_version (String) – 현재 앱 버전

  • info.download_market_url (String) – 다운로드 url

  • info.download_res_version (String) – 다운로드 리소스 버전

  • info.required_app_version (String) – 필수 앱 버전

  • info.total_file_size (Int) – 리소스 다운로드 파일 크기

  • info.update (Bool) – 업데이트 가능 여부

Example:

M.net.res.check({
        callback: function (status, info) {
                if (status !== 'IS_RESOURCE_UPDATE') {
                        return M.pop.alert('리소스 업데이트를 실패하였습니다.');
                }
                if(info.update) {
                        // 업데이트 가능한 경우
                        M.net.res.update({
                                //.. 중략
                        })
                } else {
                        // 업데이트가 없는 경우 (최신버전인 경우)
                        M.page.html('login.html');
                }
        }
});

다운로드 리소스 초기화

M.net.res.reset()

Changed in version 2.1.4.13.

  • 다운로드 된 리소스 정보를 초기화 한다. [버전이 초기화 되며, 실제 리소스는 제거 되지 않음].

Example:

M.net.res.reset();

통신 에러 코드(for Android)

CODE

Description

9994

네트워크 URL Error

9995

네트워크 통신중 취소처리

9996

네트워크 연결 에러

9997

통신중 에러 / 통신 내부 에러

9998

네트워크 응답시간 초과 에러

9999

서버에서 리턴된 에러

404

Not found(네트워크 연결 실패)