start API를 통해서 생성한 워커 쓰레드에게 문자열 데이터를 전송한다.
Parameters | Type | Description |
---|---|---|
strData | STRING | 전송할 문자열 |
Type | Description |
---|---|
BOOL | 정상처리 여부 |
일반 문자열이 아닌, 오브젝트 데이터를 송신하기 위해서는 factory.jsonstringify API를 이용하여 JSON 오브젝트를 문자열로 변환하여 송신해야 한다.
function btnSend_on_mouseup(objInst)
{
var ret;
ret = this.worker01.postmessage("테스트 메세지");
if (ret == false) {
screen.alert("워커 컴포넌트 postmessage fail");
}
}
function btnSendJSON_on_mouseup(objInst)
{
var ret, obj_send_data;
obj_send_data = {
data: "테스트 메세지"
};
// 일반 문자열이 아닌, 오브젝트 데이터를 송신하기 위해서는
// factory.jsonstringify API를 이용하여
// JSON 오브젝트를 문자열로 변환하여 송신해야 한다.
ret = this.worker01.postmessage(factory.jsonstringify(obj_send_data));
if (ret == false) {
screen.alert("워커 컴포넌트 postmessage fail");
}
}
/**
* 워커 컴포넌트의 start 함수를 통해서 실행된 워커 쓰레드가
* 실행하는 스크립트내에서 postMessage API가 호출된 경우에 이벤트가 발생한다.
* @param objInst 워커 컴포넌트 인스턴스
* @param strMessage 워커 쓰레드가 송신한 데이터 문자열
*/
function wk_on_message(objInst, strMessage)
{
// 일반 문자열이 아닌, 오브젝트 데이터 수신시에는
// factory.jsonparse API를 이용하여
// 문자열을 JSON 오브젝트로 변환하여 사용한다.
this.fldRecvData.settext(strMessage);
}
//////////////////////////////////////////////////////////////////////////
// 아래 소스는 워커 컴포넌트 start API를 통해서 전달된
// 화면 경로에 지정된 스크립트 파일 내용임
//////////////////////////////////////////////////////////////////////////
/**
* 워커 컴포넌트를 통해서 실행되는 워커 쓰레드의 데이터 수신 이벤트 처리 함수
* 워커 컴포넌트의 postmessage API를 통해서 이벤트가 발생함
*
* Worker 쓰레드 기능
* https://developer.mozilla.org/en-US/docs/Web/API/Worker
*
* Worker 쓰레드에서 호출가능한 기능/함수
* https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/
* Functions_and_classes_available_to_workers
*
* Worker 쓰레드 스크립트에서는 window, factory, jQuery 라이브러리 사용이 불가하다.
*
* HTTP 통신을 위해서는 fetch API를 사용한다.
* https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
*/
onmessage = function(event) {
var recv_data, send_data;
// 로그는 console.log API를 통해서만 가능하며(factory.consoleprint 사용 불가),
// 로그 내용은 브라우저 개발자 콘솔에 표시됨
console.log("WorkerThread> start");
// this는 DedicatedWorkerGlobalScope 오브젝트 인스턴스
console.log(this);
// 워커 컴포넌트의 postmessage API를 통해서 전달된 데이터는 event.data에 전달됨
recv_data = event.data;
console.log("WorkerThread> Recv Data = [" + recv_data + "]");
// 오브젝트 형태의 수신 데이터를 처리하기 위해서는
// JSON.parse API를 사용하여 수신한 문자열을 오브젝트로 변환하여 사용한다.
// recv_data = JSON.parse(event.data);
// 디버거 키워드 사용 가능
// debugger;
// 스크립트내 정의된 함수를 호출하여 수신한 데이터를 처리
send_data = WorkerDataFunc(recv_data);
// 워커 컴포넌트의 on_message 이벤트로 데이터 전달
// 오브젝트 데이터를 전달하기 위해서는 JSON.stringify API를 통해서
// 문자열로 변환하여 전달해야 한다.
// send_data = JSON.stringify(send_data);
console.log("WorkerThread> Send Data = [" + send_data + "]");
postMessage(send_data);
};
function WorkerDataFunc(data)
{
console.log("WorkerDataFunc> start");
return data.toUpperCase();
}