From: DongHyun Song Date: Thu, 21 Apr 2022 11:21:51 +0000 (+0900) Subject: [DeviceHome] Refactors EventSource handler X-Git-Tag: submit/tizen/20220428.160021~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a31ba581183ca1ee6bd8143cfb5a517d43f59dfd;p=platform%2Fframework%2Fweb%2Fwrtjs.git [DeviceHome] Refactors EventSource handler Refactors EventSource handlers for multiple purpose. - updateapp-list: update app list when install/uninstall - redirect-url: request to open the URL - remote-message: 'remotemessage' CustomEvent - ime-event: handle for remote input Change-Id: I637bcdc17ed8fd3ed7b69b93d50a5c431a385d35 Signed-off-by: DongHyun Song --- diff --git a/device_home/client/js/myApps.js b/device_home/client/js/myApps.js index 869db93..8eebe74 100644 --- a/device_home/client/js/myApps.js +++ b/device_home/client/js/myApps.js @@ -176,11 +176,28 @@ const myappsmodule = {}; }) } - function init() { - var eventSource = new EventSource(serverURL + ':' + serverPort + '/updateAppList'); + function initEventSource() { + const eventSource = new EventSource(serverURL + ':' + serverPort + '/listenMessage'); eventSource.addEventListener('message', evt => { - showListView(JSON.parse(evt.data)); - UpdateWebClip(JSON.parse(evt.data)); + console.log(`evt.data : ${evt.data}`); + const message = JSON.parse(evt.data); + switch (message.type) { + case 'updateapp-list': + showListView(message.body); + UpdateWebClip(message.body); + break; + case 'redirect-url': + const body = JSON.parse(message.body); + window.open(body.url, '_blank'); + break; + case 'remote-message': + document.dispatchEvent(new CustomEvent('remotemessage', message.body)); + break; + case 'ime-event': + break; + default: + console.log(`no matched case : ${message.type}`); + } }, false); eventSource.addEventListener('open', evt => { console.log("Connected to..."); @@ -192,6 +209,10 @@ const myappsmodule = {}; console.log('Connecting to...'); } }, false); + } + + function init() { + initEventSource(); showList(); } window.onload = init; diff --git a/device_home/service/service.js b/device_home/service/service.js old mode 100755 new mode 100644 index 1bedb6f..d73de5a --- a/device_home/service/service.js +++ b/device_home/service/service.js @@ -19,7 +19,8 @@ const sessionMiddleware = session({ cookie: { httpOnly: true, secure: false, -}}); + } +}); const PUBLIC_DOMAIN = 'https://devicehome.net'; const TAG = '[DeviceHome][service.js]' @@ -213,10 +214,10 @@ function setPackageInfoEventListener() { }); console.log(`${TAG} Emit app list`); // for both companion and webclip - evtEmit.emit('updateapplist', 'message', dataApps); + evtEmit.emit('updateapp-list', 'message', dataApps); relayServer(httpserver, dataApps, sessionMiddleware, clientPublicKeys, packageInfo.id); } else { - evtEmit.emit('updateapplist', 'message', dataApps); + evtEmit.emit('updateapp-list', 'message', dataApps); } }, onupdated: function(packageInfo) { @@ -233,12 +234,24 @@ function setPackageInfoEventListener() { } console.log(`${TAG} The package ${packageId} is uninstalled`); removeD2Ddata(packageId); - evtEmit.emit('updateapplist', 'message', dataApps); + evtEmit.emit('updateapp-list', 'message', dataApps); } }; tizen.package.setPackageInfoEventListener(packageEventCallback); } +function registerWrtMessagePort() { + let localPort = tizen.messageport.requestLocalMessagePort('wrt.message.port'); + localPort.addMessagePortListener((data, remotePort) => { + try { + evtEmit.emit(data[0]['key'], 'message', data[0]['value']); + } catch (e) { + console.log('wrt.message.port has exception' + e); + } + }); +} +} + function unsetPackageInfoEventListener() { tizen.package.unsetPackageInfoEventListener(); } @@ -485,11 +498,25 @@ var HTTPserverStart = function() { 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); - evtEmit.on('updateapplist', (event, data) => { + evtEmit.on('updateapp-list', (event, data) => { res.write('event: ' + String(event) + '\n' + 'data: ' + JSON.stringify(data) + '\n\n'); }); }); + app.get('/listenMessage', (req, res) => { + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive' + }); + const eventTypes = ['updateapp-list', 'redirect-url', 'remote-message', 'ime-event']; + for (const type of eventTypes) { + evtEmit.on(type, (event, data) => { + res.write(`event: ${event}\ndata: { "type": "${type}", "body": ${JSON.stringify(data)}}\n\n`); + }); + } + }); + app.get('/pincode/publicKey', async (req, res) => { tryCount = 0; await displayPincode(req); @@ -581,7 +608,7 @@ module.exports.onStop = function() { console.log(`${TAG} Server Terminated`); } unsetPackageInfoEventListener(); - evtEmit.off('updateapplist'); + evtEmit.off('updateapp-list'); console.log(`${TAG} onStop is called in DNS Resolver`); };