Add 1st PTC Hotel APP codes
This commit is contained in:
sysadmin
2022-04-21 10:46:16 +09:00
parent a88c85f95e
commit ff2a3c305b
383 changed files with 154315 additions and 0 deletions

View File

@@ -0,0 +1,291 @@
/**
* Copyright (c) 2020
*
* CENTIRM HotelTV Background service module javascript.
*
* @summary short description for the file
* @author Joel <joel.kim@centirm.com>
*
* Created at : 2020-11-26 02:21:56
* Last modified : 2020-11-26 15:31:40
*/
// importScripts('./lib/hoteltv.js');
// importScripts('./lib/hoteltv.api.js');
const g_config = {};
var g_port = null;
var g_tmrHndl = null;
var g_tm_prev = {
"news": null,
"epg": null,
"weather": null,
"flight": null,
"report": null,
};
//// 비공개 매써드
/**
* API Wrapper Function::>
*/
function __svcfxn_get_base_url() {
var sz_base_url = "http://" + g_config.svrinfo.ipaddr + ":" + g_config.svrinfo.port;
return sz_base_url;
}
/**
* API Wrapper Function::>
* @param {string} api_type api type.
* @param {callback} callback is callback object
*/
function __svcfxn_get_api_url(api_type) {
var dic_api_url = {
"get_news": __svcfxn_get_base_url() + "/api/" + g_config.token.version + "/assets/" + g_config.dev_family + "/" + g_config.dev_snum + "/news",
"get_epg": __svcfxn_get_base_url() + "/api/" + g_config.token.version + "/assets/" + g_config.dev_family + "/" + g_config.dev_snum + "/epg",
"get_weather": __svcfxn_get_base_url() + "/api/" + g_config.token.version + "/assets/" + g_config.dev_family + "/" + g_config.dev_snum + "/weather",
"get_flight": __svcfxn_get_base_url() + "/api/" + g_config.token.version + "/assets/" + g_config.dev_family + "/" + g_config.dev_snum + "/flight",
}
if (api_type in dic_api_url) {
return dic_api_url[api_type];
}
return null;
}
/**
* API Wrapper Function::> HOTELTV API
* @param {string} sz_url is API URL
* @param {string} api_type is API TYPE
* @param {dictionary} dic_param is PARAMETERs
*/
function __svcfxn_CallCmsApi(sz_url, api_type, dic_param) {
return new Promise((resolve, reject) => {
let isPostMsg = false;
let xhr = new XMLHttpRequest();
let formData = new FormData();
let _ret = { type: api_type, error: true, reason: null, data: null };
//xhr.timeout = 500;
if (dic_param !== null) {
isPostMsg = true;
for (_key in dic_param) {
formData.append(_key.toString(), dic_param[_key]);
}
}
xhr.onload = function() {
if (xhr.status === 200 || xhr.status === 201) {
_ret.error = false;
_ret.data = xhr.response;
resolve(_ret);
} else {
reject(_ret);
}
};
xhr.ontimeout = function(e) {
// XMLHttpRequest timed out. Do something here.
_ret.reason = "TIMEOUT";
reject(_ret);
};
xhr.onerror = function() {
_ret.reason = "FATAL";
reject(_ret);
}
if (isPostMsg) {
//console.log("Given api url is POST message")
xhr.open('POST', sz_url);
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.setRequestHeader("Authorization", "Bearer " + g_config.token.apikey);
xhr.send(formData); // 폼 데이터 객체 전송
} else {
//console.log("Given api url is GET message")
xhr.open('GET', sz_url, true);
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.setRequestHeader("Authorization", "Bearer " + g_config.token.apikey);
xhr.send(null);
}
});
}
/**
* HCAP Wrapper Function::> Get Device Properties(Realted HCAP API:hcap.property.getProperty)
* @param {string} sz_key property key name.
* @param {callback} callback is callback object
*/
async function sworker_service(args) {
return new Promise((resolve, reject) => {
let _bNeed_Update = {
"epg": false,
"news": false,
"flight": false,
"weather": false,
"report": false,
};
let _tm_cur = new Date();
// CHECK EPG INFORMATION UPDATE
if (g_tm_prev.epg == null) {
g_tm_prev.epg = new Date();
_bNeed_Update.epg = true;
} else {
let _tm_diff_ms = _tm_cur.getTime() - g_tm_prev.epg.getTime();
let _tm_diff_s = Math.floor(_tm_diff_ms / 1000);
//EPG정보는 매 30분 마다 한번씩 업데이트
if (_tm_diff_s > 1800) {
//if (_tm_diff_s > 60) {
g_tm_prev.epg = _tm_cur;
_bNeed_Update.epg = true;
}
}
// CHECK NEWS INFORMATION UPDATE
if (g_tm_prev.news == null) {
g_tm_prev.news = new Date();
_bNeed_Update.news = true;
} else {
let _tm_diff_ms = _tm_cur.getTime() - g_tm_prev.news.getTime();
let _tm_diff_s = Math.floor(_tm_diff_ms / 1000);
//NEWS정보는 매 20분 마다 한번씩 업데이트
if (_tm_diff_s > 1200) {
g_tm_prev.news = _tm_cur;
_bNeed_Update.news = true;
}
}
// CHECK FLIGHT INFORMATION UPDATE
if (g_tm_prev.flight == null) {
g_tm_prev.flight = new Date();
_bNeed_Update.flight = true;
} else {
let _tm_diff_ms = _tm_cur.getTime() - g_tm_prev.flight.getTime();
let _tm_diff_s = Math.floor(_tm_diff_ms / 1000);
//FLIGHT정보는 매 60분 마다 한번씩 업데이트
if (_tm_diff_s > 3600) {
g_tm_prev.flight = _tm_cur;
_bNeed_Update.flight = true;
}
}
// CHECK WEATHER INFORMATION UPDATE
if (g_tm_prev.weather == null) {
g_tm_prev.weather = new Date();
_bNeed_Update.weather = true;
} else {
let _tm_diff_ms = _tm_cur.getTime() - g_tm_prev.weather.getTime();
let _tm_diff_s = Math.floor(_tm_diff_ms / 1000);
//NEWS정보는 매 2시간 마다 한번씩 업데이트
if (_tm_diff_s > 7200) {
g_tm_prev.weather = _tm_cur;
_bNeed_Update.weather = true;
}
}
// CHECK REPORT INFORMATION UPDATE
if (g_tm_prev.report == null) {
g_tm_prev.report = new Date();
_bNeed_Update.report = true;
} else {
let _tm_diff_ms = _tm_cur.getTime() - g_tm_prev.report.getTime();
let _tm_diff_s = Math.floor(_tm_diff_ms / 1000);
//REPORT는 매 5초 마다 한번씩 업데이트
if (_tm_diff_s > 5) {
g_tm_prev.report = _tm_cur;
_bNeed_Update.report = true;
}
}
// 후처리(실제 데이터 가져오고 부모에세 메시지로 안내)
if (_bNeed_Update.epg === true) {
let sz_api_url = __svcfxn_get_api_url("get_epg");
__svcfxn_CallCmsApi(sz_api_url, "GetEpg", null).then(_result => {
g_port.postMessage({ "event": "update_epg", "ret": "OK", "data": JSON.parse(_result.data) });
}).catch(_error => {
g_port.postMessage({ "event": "update_epg", "ret": "ERROR", "data": null });
});
}
if (_bNeed_Update.news === true) {
let sz_api_url = __svcfxn_get_api_url("get_news");
__svcfxn_CallCmsApi(sz_api_url, "GetNews", null).then(_result => {
g_port.postMessage({ "event": "update_news", "ret": "OK", "data": JSON.parse(_result.data) });
}).catch(_error => {
g_port.postMessage({ "event": "update_news", "ret": "ERROR", "data": null });
});
}
if (_bNeed_Update.flight == true) {
let sz_api_url = __svcfxn_get_api_url("get_flight");
__svcfxn_CallCmsApi(sz_api_url, "GetFlight", null).then(_result => {
g_port.postMessage({ "event": "update_flight", "ret": "OK", "data": JSON.parse(_result.data) });
}).catch(_error => {
g_port.postMessage({ "event": "update_flight", "ret": "ERROR", "data": null });
});
}
if (_bNeed_Update.weather == true) {
g_port.postMessage({ "event": "update_weather", "ret": "OK", "data": _bNeed_Update.weather });
}
if (_bNeed_Update.report == true) {
g_port.postMessage({ "event": "update_report", "ret": "OK", "data": _bNeed_Update.report });
}
resolve();
});
};
onconnect = function(e) {
if (g_port != null) {
return;
}
g_port = e.ports[0];
g_port.addEventListener('message', function(e) {
let recvMsg = e.data;
if (recvMsg.cmd === "start_service") {
let _param = recvMsg.param;
g_config.token = _param.token;
g_config.dev_family = _param.dev_family;
g_config.dev_snum = _param.dev_snum;
g_config.svrinfo = _param.svrinfo;
//Periodic polling HotelTV API service
if (g_tmrHndl == null) {
g_tmrHndl = setTimeout(async function svcTask() {
await sworker_service();
g_tmrHndl = setTimeout(svcTask, 1000);
}, 0);
}
}
});
g_port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
}