4.사용 예제

Edit

런처 실행 스크립트를 어떻게 구현하는지 간략한 예제를 설명합니다. 예제는 자바스크립트로 구현되었으며 사용하는 환경에 맞게 수정해 사용할 수 있습니다.

아래 예제는 구글 크롬 브라우저에서 넥사크로플랫폼 앱이 동작하는 예제입니다. IE 브라우저에서 동작하는 예제는 전체 코드를 참조해주세요.

엑스플랫폼 또는 마이플랫폼 애플리케이션의 동작 방식도 같습니다. platform 항목값이나 필수 속성값은 제품에 맞게 설정해주어야 합니다.

4.1신규 id 요청

platform, action 요소 항목값을 채우고 신규 id를 요청합니다.

function start()
{
    objNexacro.platform = 'nexacro';
    objNexacro.action = 'create';
    sendData(true, true, createProcess);
}

function sendData(openpost, is_create, resultCallback) 
{
    delete xhrCreateObject;
    xhrCreateObject = null; 
    
    var sendObj = null;
    sendObj = new XMLHttpRequest();
    sendObj.reqType = 1;

    xhrCreateObject = sendObj;
    sendObj.onreadystatechange = resultCallback;
    var jsonData;
    jsonData = JSON.stringify(objNexacro);
    var timestamp = "/" + new Date().getTime();
    var send_url = openurl + ":" + openport + openurl_add + timestamp;
    console.log(send_url);

    sendObj.open("POST", send_url, "true");
    sendObj.send(jsonData);
    console.log(jsonData);    
    return sendObj;
}

function createProcess()
{
    if ( xhrCreateObject.readyState == 4 || xhrCreateObject.reqType == 2)  {
        console.log(xhrCreateObject.responseText);
    }          
}

요청되는 jsonDate 항목은 아래와 같습니다. 요소 항목만 채워서 전송됩니다.

{"platform":"nexacro","action":"create"}

런처 서비스에서 요청을 받고 id를 할당해 반환합니다. id 항목과 result 항목을 확인합니다. id값은 이후 요청 시 활용하게 됩니다.

{"action":"create","id":"1522821857","platform":"nexacro","result":"success"}

4.2필수 속성 설정

예제에서 [property setting(basic)] 버튼 클릭 시 동작하는 기능입니다. 속성 중에서 key, bjson, enginesetupkey 항목값을 채웁니다.

function do_property(test_action, action_sub)
{
    objNexacro.action = 'setproperty';
    objNexacro.value = { "key": "LauncherService", "bjson": "http://127.0.0.1:8080/start.json", "enginesetupkey":enginesetupkey};
    sendData(true, false, resultProcess);
}

넥사크로플랫폼 앱 배포 시 Local 설정으로 배포한 경우에는 start.json 경로를 로컬 주소로 지정해야 합니다. 이런 경우에는 아래와 같이 지정합니다.

function do_property(test_action, action_sub)
{
    objNexacro.action = 'setproperty';
    objNexacro.value = { "key": "LauncherService", "bjson": "D:\\nexacro\\17\\start.json", "enginesetupkey":enginesetupkey};
    sendData(true, false, resultProcess);
}

요청되는 jsonDate 항목은 아래와 같습니다. 이전 단계에서 확인된 id값을 설정하고 key, bjson, enginesetupkey 항목값이 채워져 있습니다.

{"action":"setproperty","id":"1522822903","platform":"nexacro","result":null,"value":{"key":"LauncherService","bjson":"http://127.0.0.1:8080/start.json","enginesetupkey":"{94FAAFF5-0E54-4539-AA67-*******}"}

런처 서비스에서 필수 속성값을 저장하고 성공 여부("result":"success")를 반환합니다.

{"action":"setproperty","id":"1522823068","platform":"nexacro","result":"success","value":{"bjson":"http://127.0.0.1:8080/start.json","enginesetupkey":"{94FAAFF5-0E54-4539-AA67-*******}","key":"LauncherService"}}

4.3메소드 실행

예제에서 [launch] 버튼 클릭 시 동작하는 기능입니다.

function do_method(test_action) {
    objNexacro.action = 'method';
    objNexacro.value = {"launch": null};
    sendData(true, false, resultProcess);
}

이전 단계에서 key, bjson, enginesetupkey 항목값을 전송했고 런처 서비스에서 해당하는 값을 저장하고 있습니다. id값을 키값으로 값을 저장하고 있기 때문에 이후 메소드를 실행하거나 다른 동작을 할때는 id값을 기준으로 동작하게 됩니다.

{"action":"method","id":"1522823068","platform":"nexacro","result":null,"value":{"launch":null}}

런처 서비스에서 메소드를 실행하고 성공 여부("result":"success")를 반환합니다. 정상적으로 메소드가 실행되었다면 운영체제에 설치된 앱이 실행됩니다.

{"action":"method","id":"1522823068","platform":"nexacro","result":"success","value":{"launch":null}}

4.4전체 코드

아래 링크에서 사용 예제 코드를 내려받을 수 있습니다.

localtest_nexacro_sample.html

예제 코드 내에는 아래와 같은 문제 처리 방법이 포함되어 있습니다.

if (window.XMLHttpRequest) {
    sendObj = new XMLHttpRequest();
    sendObj.reqType = 1;
} else if (window.XDomainRequest) {
    sendObj = new XDomainRequest();
    sendObj.reqType = 2; 
}
function http_onerror()
{
    if (objNexacro.action == 'create') {
        if (findport == false) {
            if ( setport > 0) {
                setport = 0;
                openport = parseInt(getCookie("tplsvcopenport"), 10) | 0;
                if (openport > 0) {
                    sendData(true, true, createProcess);
                    return;
                }
            }
            openport = 7895;
        } else {
            openport++;
        }
        findport = true;
                
        if (openport <= 7935) //신규 런처는 7895 ~ 7935 사이 하나의 port를 open 함; 
            sendData(true, true, createProcess);
        else
            alert("런처 서비스가 설치되지 않았거나 동작이 멈춰있는지 확인 바랍니다.");          
    }     
}