/** * Copyright (c) 2020 * * CENTIRM HotelTV Core javascript. * * @summary short description for the file * @author Joel * * Created at : 2020-11-26 02:21:56 * Last modified : 2020-11-26 15:31:40 */ var HotelTV = HotelTV || { 'devinfo': {}, 'svrinfo': {}, 'services': {}, 'settings': {}, 'hotelinfo': {}, 'guestinfo': {}, 'opening': {}, 'flight': {}, 'weather': {}, 'epg': {}, 'news': {}, 'tvguide': {}, 'message': {}, 'translation': {}, 'state': { 'lang': 'kr', 'menu': { 'stage': null, 'main': { 'cnt': 0, 'cur': null, 'prev': null, }, }, 'media': { 'playing': false, }, 'hotkey': { "mm": {} }, 'token': null }, 'carts': { 'amenity': { }, 'roomservice': { } }, 'orders': { 'amenity': { }, 'roomservice': { } }, 'dbginfo': { 'en': false, 'emulator': false, //PC 브라우저를 이용할때, true로 설정, 타겟 셋트에서는 false로 설정할것 'hcap_ipc': false, 'output': 'osd' }, 'media_hndl': null, }; HotelTV.namespace = function(ns_string) { var parts = ns_string.split('.'), parent = HotelTV, i; // 처음에 중복되는 전역 객체명은 제거한다. if (parts[0] == 'HotelTV') { parts = parts.slice(1); } for (i = 0; i < parts.length; i += 1) { if (typeof parent[parts[i]] == 'undefined') { parent[parts[i]] = {}; } parent = parent[parts[i]]; } return parent; }; //// 비공개 매써드 /** * HCAP Wrapper Function::> Get ProCentric Server Info(Realted HCAP API:hcap.system.getHotelMode) * @param {string} sz_key property key name. * @param {callback} callback is callback object */ function __fxn_Set_DebugOpt() { HotelTV.dbginfo['en'] = true; HotelTV.dbginfo['output'] = 'native'; HotelTV.hcap.Init(); /** Develop Mode definitions */ console.log("OPT" + navigator.appVersion); if (navigator.appVersion.includes("Web0S") == true) { HotelTV.dbginfo['emulator'] = false; } else { HotelTV.dbginfo['emulator'] = true; } if (HotelTV.dbginfo['output'] == 'osd') { if (HotelTV.dbginfo['en'] == true) { (function() { var old = console.log; var logger = document.getElementById('debugwin'); var dateNow = new Date(); var hours = dateNow.getHours(); var minutes = dateNow.getMinutes(); var seconds = dateNow.getSeconds(); if (hours < 10) { hours = "0" + hours; } if (minutes < 10) { minutes = "0" + minutes; } if (seconds < 10) { seconds = "0" + seconds; } console.log = function(logmsg) { var _dispMsg = hours + ":" + minutes + ":" + seconds + "-> "; if (typeof logmsg == 'object') { _dispMsg += (JSON && JSON.stringify ? JSON.stringify(logmsg) : logmsg) + '
'; } else { _dispMsg += logmsg + '
'; } _dispMsg += logger.innerHTML; logger.innerHTML = _dispMsg; } })(); } } else { /** Set HCAP Debug Options */ if (HotelTV.dbginfo['emulator'] == false) { //Enable/Disable browser debug mode HotelTV.hcap.SetBrowserDebug(HotelTV.dbginfo['hcap_ipc'], HotelTV.dbginfo['en']); } else { //Below for Non WebOS } } }; HotelTV.Init = async function() { console.log("Start Initialization:: "); //STEP#01::> Shutdown Channel HotelTV.hcap.ChannelShutDown(); //SETP#02::> Set Debug Options __fxn_Set_DebugOpt(); //STEP#03::> Get Device Info HotelTV.ui_utils.SetBusy(true); try { await HotelTV.hcap.GetDevInfo(); //await HotelTV.hcap.ShowDevInfo(); } catch (_error) { console.log("Fail to get device information"); } //STEP#04::> API Module INIT await HotelTV.api.Init(HotelTV.svrinfo.ipaddr, HotelTV.svrinfo.port, HotelTV.devinfo.model_name.substring(2, HotelTV.devinfo.model_name.length - 1), HotelTV.devinfo.serial_number); try { let __apiRet = await HotelTV.api.CheckRegistration(); HotelTV.state['registration'] = await HotelTV.api.CheckRegistration(); } catch (_error) { console.log("Display Error page for check registration"); } if (HotelTV.state['registration'].registered != true) { console.log("Show up and unregistered device"); } //STEP05::> CHECK HOTELTV LICENSE if (HotelTV.state['registration'].license == 'hotel-full') { // FULL LICENSE MODE try { HotelTV.settings = await HotelTV.api.GetSettings(); let need_reboot = await HotelTV.hcap.SetDevice(HotelTV.settings); if (need_reboot == true) { console.log("System Need to Reboot"); HotelTV.ui_utils.SetBusy(false); HotelTV.ui_utils.ShowErrMsg(true, "", ""); setTimeout(HotelTV.hcap.Reboot(), 3000); return; } } catch (_error) { console.log("Display Error page for get stttings"); } try { HotelTV.hotelinfo = await HotelTV.api.GetHotelInfo(); } catch (_error) { console.log("Display Error page for get hotel info"); } try { HotelTV.guestinfo = await HotelTV.api.GetGuestInfo(); } catch (_error) { console.log("Display Error page for get Guest info"); } try { HotelTV.opening = await HotelTV.api.GetOpeningCtz(); } catch (_error) { console.log("Display Error page for get Opening Contents"); } try { HotelTV.weather = await HotelTV.api.GetWeather(); } catch (_error) { console.log("Display Error page for get Weather info"); } try { HotelTV.flight = await HotelTV.api.GetFlight(); } catch (_error) { console.log("Display Error page for get flight info"); } try { HotelTV.tvguide = await HotelTV.api.GetProgramCtz(); } catch (_error) { console.log("Display Error page for get tvguide info"); } try { HotelTV.news = await HotelTV.api.GetNews(); } catch (_error) { console.log("Display Error page for get news info"); } try { HotelTV.message = await HotelTV.api.GetMessage(); } catch (_error) { console.log("Display Error page for get news info"); } try { HotelTV.translation = await HotelTV.api.GetTranslation(); } catch (_error) { console.log("Display Error page for get translation info"); } //Save to Session sessionStorage.setItem("devinfo", JSON.stringify(HotelTV.devinfo)); sessionStorage.setItem("svrinfo", JSON.stringify(HotelTV.svrinfo)); sessionStorage.setItem("settings", JSON.stringify(HotelTV.settings)); sessionStorage.setItem("state", JSON.stringify(HotelTV.state)); sessionStorage.setItem("hotelinfo", JSON.stringify(HotelTV.hotelinfo)); sessionStorage.setItem("guestinfo", JSON.stringify(HotelTV.guestinfo)); sessionStorage.setItem("opening", JSON.stringify(HotelTV.opening)); sessionStorage.setItem("flight", JSON.stringify(HotelTV.flight)); sessionStorage.setItem("weather", JSON.stringify(HotelTV.weather)); sessionStorage.setItem("tvguide", JSON.stringify(HotelTV.tvguide)); sessionStorage.setItem("news", JSON.stringify(HotelTV.news)); sessionStorage.setItem("message", JSON.stringify(HotelTV.message)); sessionStorage.setItem("translation", JSON.stringify(HotelTV.translation)); //Now Switch Over Welcome page if (HotelTV.opening != null) { $(".startup").fadeOut(1000, function() { window.location.replace('./wellcome.html'); }); } else { if (HotelTV.state['registration'].license == 'hotel-full') { setTimeout(function() { window.location.replace('./app_hoteltv_full.html'); }, 1000); } } } else { console.log("Display Error page for invalid license type."); } console.log("Initialization:: Done"); HotelTV.ui_utils.SetBusy(false); SpatialNavigation.init(); }; HotelTV.LoadWelCome = async function() { HotelTV.devinfo = await JSON.parse(sessionStorage.getItem("devinfo")); HotelTV.svrinfo = await JSON.parse(sessionStorage.getItem("svrinfo")); HotelTV.state = await JSON.parse(sessionStorage.getItem("state")); //STEP#03:API Module INIT await HotelTV.api.Init(HotelTV.svrinfo.ipaddr, HotelTV.svrinfo.port, HotelTV.devinfo.model_name.substring(2, HotelTV.devinfo.model_name.length - 1), HotelTV.devinfo.serial_number); HotelTV.settings = await JSON.parse(sessionStorage.getItem("settings")); HotelTV.guestinfo = await JSON.parse(sessionStorage.getItem("guestinfo")); HotelTV.hotelinfo = await JSON.parse(sessionStorage.getItem("hotelinfo")); HotelTV.opening = await JSON.parse(sessionStorage.getItem("opening")); HotelTV.tvguide = await JSON.parse(sessionStorage.getItem("tvguide")); try { HotelTV.services = await HotelTV.api.GetServiceInfo(); sessionStorage.setItem("services", JSON.stringify(HotelTV.services)); } catch (_error) { console.log("Display Error page for get service info"); } //HotelTV.translation = await JSON.parse(sessionStorage.getItem("translation")); try { HotelTV.translation = await HotelTV.api.GetTranslation(); } catch (_error) { console.log("Display Error page for get translation info"); } //Set checkined guest language HotelTV.state.lang = HotelTV.guestinfo.language; let _res = HotelTV.devinfo.display_resolution.split("x"); HotelTV.ui_welcome.Init(_res[0], _res[1]); //await HotelTV.hcap.ShowDevInfo(); HotelTV.ui_welcome.Show(); } HotelTV.UnloadWelCome = async function() { sessionStorage.setItem("state", JSON.stringify(HotelTV.state)); HotelTV.ui_welcome.Close(); if (HotelTV.state['registration'].license == 'hotel-full') { setTimeout(function() { window.location.replace('./app_hoteltv_full.html'); }, 1000); } } HotelTV.LoadAppFull = async function() { HotelTV.ui_utils.SetBusy(true); //STEP#01: Load session info HotelTV.devinfo = await JSON.parse(sessionStorage.getItem("devinfo")); HotelTV.svrinfo = await JSON.parse(sessionStorage.getItem("svrinfo")); HotelTV.services = await JSON.parse(sessionStorage.getItem("services")); HotelTV.state = await JSON.parse(sessionStorage.getItem("state")); //STEP#02: Init HotelTV API await HotelTV.api.Init(HotelTV.svrinfo.ipaddr, HotelTV.svrinfo.port, HotelTV.devinfo.model_name.substring(2, HotelTV.devinfo.model_name.length - 1), HotelTV.devinfo.serial_number); HotelTV.settings = await JSON.parse(sessionStorage.getItem("settings")); HotelTV.guestinfo = await JSON.parse(sessionStorage.getItem("guestinfo")); HotelTV.hotelinfo = await JSON.parse(sessionStorage.getItem("hotelinfo")); HotelTV.weather = await JSON.parse(sessionStorage.getItem("weather")); HotelTV.opening = await JSON.parse(sessionStorage.getItem("opening")); HotelTV.tvguide = await JSON.parse(sessionStorage.getItem("tvguide")); HotelTV.flight = await JSON.parse(sessionStorage.getItem("flight")); HotelTV.news = await JSON.parse(sessionStorage.getItem("news")); HotelTV.message = await JSON.parse(sessionStorage.getItem("message")); try { HotelTV.epg = await HotelTV.api.GetEpg(); } catch (_error) { console.log("Display Error page for get epg info"); } try { HotelTV.carts.amenity = await HotelTV.api.GetAmenityCarts(null); } catch (_error) { console.log("Display Error page for get amenity carts info"); } try { HotelTV.carts.roomservice = await HotelTV.api.GetRoomserviceCarts(); } catch (_error) { console.log("Display Error page for get roomservicec carts info"); } try { HotelTV.orders.amenity = await HotelTV.api.GetAmenityOrders(null); } catch (_error) { console.log("Display Error page for get amenity order info"); } try { HotelTV.orders.roomservice = await HotelTV.api.GetRoomserviceOrders(null); } catch (_error) { console.log("Display Error page for get roomservice order info"); } try { HotelTV.translation = await HotelTV.api.GetTranslation(); } catch (_error) { console.log("Display Error page for get translation info"); } //HotelTV.translation = await JSON.parse(sessionStorage.getItem("translation")); //STEP#03: INIT HCAP for HotelTV FullAPP try { let siAppToken = null; let siAppName = null; // siApp Token Authentication let _progam = HotelTV.tvguide.program; for (let _i = 1; _i <= _progam.length; _i++) { if (_progam[_i].type == "application" && _progam[_i].service == "netflix") { siAppToken = await HotelTV.api.DownloadData(_progam[_i].license.file.download); siAppName = _progam[_i].service; //siAppToken = _progam[_i].service; if (siAppName && siAppToken) { HotelTV.hcap.siAppAuth(siAppName, siAppToken, false); } } } } catch (_error) { console.log("Display Error page for get siApp Auth"); } //STEP#05: Set Display size let _res = HotelTV.devinfo.display_resolution.split("x"); HotelTV.ui_appfull.Init(_res[0], _res[1]); HotelTV.hcap.PreAppGetInfo(false); //STEP#06; Show UI //await HotelTV.hcap.ShowDevInfo(); HotelTV.ui_appfull.Show(); //STEP#06 Register Service web worker if (window.SharedWorker) { const myWorker = new SharedWorker("./lib/hoteltv.service.js"); myWorker.port.postMessage({ 'cmd': "start_service", "param": { "token": HotelTV.state.token, "dev_family": HotelTV.devinfo.model_name.substring(2, HotelTV.devinfo.model_name.length - 1), "dev_snum": HotelTV.devinfo.serial_number, "svrinfo": HotelTV.svrinfo, }, }); myWorker.port.onmessage = function(e) { let recvMsg = e.data; //console.log(`Recv Msg[${recvMsg.event}]::> ${recvMsg.ret} ::> ${recvMsg.data}`); //console.log(`Recv Msg[${recvMsg.event}]::> ${recvMsg.ret}`); // if (recvMsg.event == "update_epg") { // if (recvMsg.ret === "OK") { // HotelTV.epg = recvMsg.data; // HotelTV.ui_appfull.UpdateEpg(); // } // } else if (recvMsg.event == "update_news") { // if (recvMsg.ret === "OK") { // HotelTV.news = recvMsg.data; // } // } else if (recvMsg.event == "update_flight") { // if (recvMsg.ret === "OK") { // let x2js = new X2JS(); // _rspJson = x2js.xml2json($.parseXML(recvMsg.data)); // HotelTV.flight = { "count": Number(_rspJson.response.body.totalCount), "info": _rspJson.response.body.items.item }; // } // } else if (recvMsg.event == "update_weather") { // } else if (recvMsg.event == "update_report") { // // HotelTV.hcap.GetUptime(); // // HotelTV.hcap.GetDeviceUsage().then(_usage => { // // //console.log(`USAGE::> CPU[${_usage.cpu}%] RAM[${_usage.mem}%]`); // // //HotelTV.api.ReportBrief(HotelTV.devinfo, HotelTV.guestinfo, _usage); // // }); // } else if (recvMsg.event == "mqtt_events") { // console.log(`MQTTMSG::> ${recvMsg.data}`); // } } } else { console.log('Your browser doesn\'t support web workers.') } //STEP#07 MQTT Service if (HotelTV.services) { if (HotelTV.services.mqtt) { let _mqttSvcInfo = HotelTV.services.mqtt; if (_mqttSvcInfo.protocol == "ws") { var client = mqtt.connect( //'ws://' + HotelTV.svrinfo.ipaddr + ':9001', 'ws://' + _mqttSvcInfo.host + ':' + _mqttSvcInfo.port, { clean: true, // retain session connectTimeout: 4000, // Timeout period username: _mqttSvcInfo.username, password: _mqttSvcInfo.password, clientId: 'mqtt_sid_' + HotelTV.devinfo.serial_number.substring(0, 12) } ); client.on('connect', function() { // let sz_topic = ['ctlxb0_' + HotelTV.devinfo.serial_number + '/topic', 'ctlxb0_all/topic']; // client.subscribe(sz_topic[0], function(err) { // if (err) { // console.log(`Fail to subscribe::TOPIC[${sz_topic[0]}]`); // } // }); // client.subscribe(sz_topic[1], function(err) { // if (err) { // console.log(`Fail to subscribe::TOPIC[${sz_topic[1]}]`); // } // }) client.subscribe(_mqttSvcInfo.topic, function(err) { if (err) { console.log(`Fail to subscribe::TOPIC[${_mqttSvcInfo.topic}]`); } else { console.log(`Success to subscribe::TOPIC[${_mqttSvcInfo.topic}]`); } }); }) client.on('message', function(topic, message) { let szMsg = message.toString(); HotelTV.ui_appfull.MqttEvent(szMsg); //MQTT메시지 종료 하려면 아래 end호출 //client.end() }) client.on('error', function(error) { // message is Buffer console.log(error.toString()); //client.end() }) } } } // HotelTV.hcap.Test(); } HotelTV.UnloadAppFull = async function() { } HotelTV.Deinit = function() { console.log("Start De-Initialization:: "); //HotelTV.service.Deinit(); }