[DeviceHome] Refactors EventSource handler 15/274115/8
authorDongHyun Song <dh81.song@samsung.com>
Thu, 21 Apr 2022 11:21:51 +0000 (20:21 +0900)
committerSangYong Park <sy302.park@samsung.com>
Thu, 28 Apr 2022 06:11:48 +0000 (06:11 +0000)
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 <dh81.song@samsung.com>
device_home/client/js/myApps.js
device_home/service/service.js [changed mode: 0755->0644]

index 869db93..8eebe74 100644 (file)
@@ -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;
old mode 100755 (executable)
new mode 100644 (file)
index 1bedb6f..d73de5a
@@ -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`);
 };