========== MNetwork ========== MNetwork Framework 에 대한 필수 API 를 정의 --------- Net API --------- 네크워크 관련된 기능들을 제공 쿠키 제거 -------------- .. js:function:: M.net.cookie.clear() .. versionchanged:: 2.2.0 * 쿠키 정보를 제거한다. Example: .. code-block:: javascript M.net.cookie.clear(); HTTP 통신 -------------- .. js:function:: M.net.http.send( setting ) .. versionchanged:: 2.2.0 :param Object setting: 리소스 업데이트를 위한 설정 정보 :param String setting.server: 타겟 서버 :param String setting.path: 전문 코드 :param String setting.method: 전송 방식 (GET, PUT, POST, DELETE) :param int setting.timeout: 타임 아웃 (millisecond) :param Bool setting.dummy: 더미전문 여부 :param Bool setting.encrypt: 데이터 암복호화 여부 (네이티브 NetworkManager에 구현이 되어있어야함) :param String setting.indicator: 인디케이터 정보 :param Object setting.userData: 사용자 정보 셋팅 (스크립트에서 네이티브로 정보값을 전달할 때 사용, 실제 통신에는 포함되지 않음) :param Function setting.success: 성공 여부에 따라 호출되는 콜백 함수 .. js:function:: success(receivedData) :param Object receivedData: 실행 결과 :param Function setting.error: 오류 발생 시 콜백 함수 .. js:function:: error(errCode, errMessage) :param String errCode: 에러 코드 :param String errMessage: 에러 메세지 * http 네트워크 통신을 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 * reqdata = data * secure = encrypt * trcode = path * restAction = method * onsuccess = success * onerror = error Example: * 기본 옵션 .. code-block:: javascript 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 .. code-block:: javascript 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 ); } }); * 모든 옵션 .. code-block:: javascript 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 통신 -------------- .. js:function:: M.net.socket.send( setting ) .. versionchanged:: 2.2.0 :param Object setting: 리소스 업데이트를 위한 설정 정보 :param String setting.server: 타겟 서버 :param String setting.path: 전문 코드 :param int setting.timeout: 타임 아웃 (millisecond) :param Bool setting.dummy: 더미전문 여부 :param Bool setting.encrypt: 데이터 암복호화 여부 (네이티브 NetworkManager에 구현이 되어있어야함) :param Object setting.userData: 사용자 정보 셋팅 :param String setting.indicator: 인디케이터 정보 :param Function setting.success: 성공 여부에 따라 호출되는 콜백 함수 .. js:function:: success(receivedData) :param Object receivedData: 실행 결과 :param Function setting.error: 오류 발생 시 콜백 함수 .. js:function:: error(errCode, errMessage) :param String errCode: 에러 코드 :param String errMessage: 에러 메세지 * socket 네트워크 통신을 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 * reqdata = data * secure = encrypt * trcode = path * onsuccess = success * onerror = error Example: .. code-block:: javascript 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'; strBuff += ' '; strBuff += '

'; strBuff += ' '; strBuff += ''; } $("#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(); } }); } }); 리소스 업데이트 -------------- .. js:function:: M.net.res.update(setting ) .. versionchanged:: 2.1.4.13 :param Object setting: 리소스 업데이트를 위한 설정 정보 :param String setting.server: Manifest.xml 에 설정된 서버명 [option] :param String setting.mode: 배포모드 (real/mode) [option] :param Function setting.finish: 리소스 업데이트 후 호출되는 콜백 함수 .. js:function:: finish(status, info) :param String status: 실행 결과 코드 :param Object info: 공지 사항, 앱 업데이트 정보 :param Object info.app_version_info: 앱 업데이트 정보 :param Object info.notice: 공지 사항 정보 (게시 기간에 상관없는 가장 최신 정보) :param Array info.notice_list: 공지 사항 정보 (게시 기간에 해당되는 공지사항 정보 array) :param Function setting.progress: 리소스 업데이트 진행 상태 콜백 함수 .. js:function:: progress(totalSize, readSize, remainingSize, percentage) :param String totalSize: 리소스 총 파일 크기 :param String readSize: 현재까지 받은 크기 :param String remainingSize: 남은 크기 :param String percentage: 현재까지 받은 크기 백분율 :param Function setting.error: 리소스 업데이트 오류 발생 시 콜백 함수 .. js:function:: error(errCode, errMessage) :param String errCode: 에러 코드 :param String errMessage: 에러 메세지 * 리소스 동적 업데이트를 한다. Surrogate Keys: 위 옵션키들과 같은 하위 버전 호환을 위한 대체 옵션 값들 * onprogress = progress * onfinish = finish * onerror = error Example [Default]: .. code-block:: javascript 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]: .. code-block:: javascript 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(); } } }); } }); 리소스 업데이트 가능 여부 확인 ---------------- .. js:function:: M.net.res.check(setting) .. versionchanged:: 2.1.4.13 :param Object setting: 리소스 서버 정보 :param String setting.server: Manifest.xml 에 설정된 서버명 [option] :param String setting.mode: 배포모드 (real/mode) [option] :param Function setting.callback: 체크 후 호출되는 콜백 함수 .. js:function:: callback(status, info) :param String status: 실행 결과 코드 (성공: IS_RESOURCE_UPDATE, 실패: FAIL_RESOURCE_UPDATE) :param Object info: 앱 업데이트 정보 :param String info.client_app_version: 클라이언트 앱 버전 :param String info.current_app_version: 현재 앱 버전 :param String info.download_market_url: 다운로드 url :param String info.download_res_version: 다운로드 리소스 버전 :param String info.required_app_version: 필수 앱 버전 :param Int info.total_file_size: 리소스 다운로드 파일 크기 :param Bool info.update: 업데이트 가능 여부 Example: .. code-block:: javascript 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'); } } }); 다운로드 리소스 초기화 -------------- .. js:function:: M.net.res.reset() .. versionchanged:: 2.1.4.13 * 다운로드 된 리소스 정보를 초기화 한다. [버전이 초기화 되며, 실제 리소스는 제거 되지 않음]. Example: .. code-block:: javascript M.net.res.reset(); 통신 에러 코드(for Android) ---------------- ======= ====================================== CODE Description ======= ====================================== 9994 네트워크 URL Error 9995 네트워크 통신중 취소처리 9996 네트워크 연결 에러 9997 통신중 에러 / 통신 내부 에러 9998 네트워크 응답시간 초과 에러 9999 서버에서 리턴된 에러 404 Not found(네트워크 연결 실패) ======= ======================================