[Service] Move service files to service/ folder 27/260927/4 submit/tizen/20210708.160020
authorDongHyun Song <dh81.song@samsung.com>
Wed, 7 Jul 2021 05:02:54 +0000 (14:02 +0900)
committerDongHyun Song <dh81.song@samsung.com>
Thu, 8 Jul 2021 00:49:15 +0000 (00:49 +0000)
It is more proper that service*.ts are placed in service/ directory.

Change-Id: I5bd14d66d3196e4a1e32dd5af8b07eb68035ba26
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
wrt_app/common/service_manager.ts [deleted file]
wrt_app/common/service_runner.ts [deleted file]
wrt_app/service/main.ts
wrt_app/service/service_manager.ts [new file with mode: 0644]
wrt_app/service/service_runner.ts [new file with mode: 0644]

diff --git a/wrt_app/common/service_manager.ts b/wrt_app/common/service_manager.ts
deleted file mode 100644 (file)
index 66213f6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-import { Worker, isMainThread } from 'worker_threads';
-import { wrt } from '../browser/wrt';
-
-interface WorkerMap {
-  [id: string]: any;
-}
-let workers: WorkerMap = {};
-let runner: any;
-
-Object.defineProperty(global, 'serviceType', {
-  value: wrt.getServiceModel(),
-  writable: false
-});
-
-function createWorker(id: string, startService: string, filename: string) {
-  if (workers[id]) {
-    workers[id].postMessage({ type: 'wake' });
-    return;
-  }
-
-  workers[id] = new Worker(startService, {
-    workerData: {
-      id,
-      filename
-    }
-  });
-  workers[id].on('message', (message: string) => {
-    if (message === 'will-terminate') {
-      workers[id].terminate();
-    }
-  });
-  workers[id].on('exit', (code: number) => {
-    delete workers[id];
-    let runningServices = Object.keys(workers).length;
-    console.log(`exit code(${code}), remain services(${runningServices})`);
-  });
-}
-
-function terminateWorker(id: string, delay: number) {
-  if (!workers[id]) {
-    console.log(`This worker is already terminated. ${id}`);
-    return;
-  }
-  console.log(`${id} will shutdown after ${delay}ms`);
-  workers[id].postMessage({ type: 'stop', delay });
-}
-
-export function startService(id: string, filename: string) {
-  console.log(`startService - ${id}`);
-  if (global['serviceType'] === 'STANDALONE') {
-    let ids = id.split(':');
-    let serviceId = ids[0];
-    let packageId = serviceId.split('.')[0];
-    wrt.security?.dropThreadPrivilege(packageId, serviceId);
-  }
-  let startService = `${__dirname}/service_runner.js`;
-  createWorker(id, startService, filename);
-}
-
-export function stopService(id: string) {
-  console.log(`stopService - ${id}`);
-  terminateWorker(id, 500);
-}
-
-export function handleBuiltinService(serviceId: string, serviceName: string) {
-  if (!serviceName) {
-    return;
-  }
-  let need_stop = (serviceName.substr(0, 5) === 'stop_');
-  if (need_stop) {
-    console.log(`${serviceName} will be terminated.`);
-    workers[serviceId].terminate();
-  } else {
-    console.log(`Builtin service is ${serviceName}`);
-    let startService = `${__dirname}/../service/builtins/${serviceName}.js`;
-    createWorker(serviceId, startService, '');
-  }
-}
\ No newline at end of file
diff --git a/wrt_app/common/service_runner.ts b/wrt_app/common/service_runner.ts
deleted file mode 100644 (file)
index 93be76e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-import './init';
-import * as XWalkExtension from './wrt_xwalk_extension';
-import { DeviceAPIRouter } from '../service/device_api_router';
-import { isMainThread, parentPort, workerData } from 'worker_threads';
-import { wrt } from '../browser/wrt';
-
-Object.defineProperty(global, 'serviceType', {
-  value: wrt.getServiceModel(),
-  writable: false
-});
-
-function isServiceApplication() {
-  return global['serviceType'] !== 'UI';
-}
-
-function isGlobalService() {
-  return global['serviceType'] === 'GLOBAL';
-}
-function printAppControlData(id: string)  {
-  let reqAppControl = global.tizen.application.getCurrentApplication().getRequestedAppControl();
-  if (reqAppControl) {
-    console.log(`id: ${id}, appControlData operation: ${reqAppControl.appControl.operation}`);
-    let appControlData = reqAppControl.appControl.data;
-    for (let dataIndex in appControlData) {
-      for (let valueIndex in appControlData[dataIndex].value)
-        console.log(`data[${dataIndex}][${valueIndex}]: ${appControlData[dataIndex].value[valueIndex]}`);
-    }
-  }
-}
-
-function registerExtensionResolver(id: string) {
-  if (wrt.tv) {
-    let extensionResolver = (module: any, file_path: string) => {
-      console.log(`resolved path: ${file_path}`);
-      let content = (wrt.tv as NativeWRTjs.TVExtension).decryptFile(id, file_path);
-      if (content) {
-        // Remove BOM
-        if (content.charCodeAt(0) === 0xFEFF)
-          content = content.slice(1);
-        module._compile(content, file_path);
-      }
-    };
-    require.extensions['.js.spm'] = extensionResolver;
-    require.extensions['.spm'] = extensionResolver;
-  }
-}
-
-let requestStopService = (id: string) => {
-  requestStopService = (id: string) => {};
-  setTimeout(() => wrt.stopService(id), 500);
-}
-
-let app: any = null;
-let dummyTimer: any;
-let periodLauncherAlive = 20; // 2s
-
-let checkLauncherAlive = (id: string) => {
-  periodLauncherAlive--;
-  if (!periodLauncherAlive) {
-    periodLauncherAlive = 20;
-    if (!wrt.checkLauncherAlive(id)) {
-      console.log(`${id} launcher was killed.`)
-      requestStopService(id);
-      checkLauncherAlive = () => {};
-    }
-  }
-}
-
-export function start(id: string, filename: string) {
-  XWalkExtension.initialize();
-  XWalkExtension.setRuntimeMessageHandler((type, data) => {
-    if (type === 'tizen://exit') {
-      console.log(`${id} will be closed by ${type}`);
-      requestStopService(id);
-    }
-  });
-
-  console.log(`serviceType : ${global['serviceType']}`)
-  new DeviceAPIRouter(id, isGlobalService());
-
-  // this is workaround solution to make webapis singleton worker
-  // ahead of dropThreadPrivilege()
-  global.tizen.systeminfo.getPropertyValue("CPU", () => { }, () => { });
-
-  // This is for awaking up uv loop.
-  dummyTimer = setInterval(() => {
-    checkLauncherAlive(id);
-  }, 100);
-
-  if (isServiceApplication()) {
-    registerExtensionResolver(id);
-    filename = wrt.getStartServiceFile(id);
-    console.log(`start global service file: ${filename}`);
-  }
-
-  printAppControlData(id);
-
-  try {
-    let ids = id.split(':');
-    let serviceId = ids[0];
-    let packageId = global.webapis.getPackageId();
-    wrt.security?.dropThreadPrivilege(packageId, serviceId);
-
-    app = require(filename);
-    if (app.onStart !== undefined) {
-      app.onStart();
-    }
-    if (app.onRequest !== undefined) {
-      app.onRequest();
-    }
-    if (isGlobalService()) {
-      wrt.finishStartingService(id);
-    }
-  } catch (e) {
-    console.log(`exception on start: ${e}`);
-    requestStopService(id);
-  }
-}
-
-export function stop(id: string) {
-  if (dummyTimer)
-    clearInterval(dummyTimer);
-  try {
-    if (app.onStop !== undefined) {
-      app.onStop();
-    } else if (app.onExit !== undefined) {
-      app.onExit();
-    }
-  } catch (e) {
-    console.log(`exception on stop: ${e}`);
-  }
-}
-
-function run() {
-  let id = workerData.id;
-  // FIXME: this should be 'wrt.tv?.serviceMount(id)' after Tizen 6.5 release
-  (wrt.tv as any)?.serviceMount(id);
-
-  let filename = workerData.filename;
-  start(id, filename);
-
-  if (!parentPort)
-    return;
-  parentPort.on('message', (message) => {
-    console.log(`Received message type : ${message.type}`);
-    if (message.type === 'wake') {
-      app?.onRequest();
-    } else if (message.type === 'stop') {
-      stop(id);
-      setTimeout(() => {
-        XWalkExtension.cleanup();
-        parentPort?.postMessage("will-terminate");
-        (wrt.tv as any)?.serviceUmount(id);
-      }, message.delay);
-    }
-  });
-}
-
-if (!isMainThread) {
-  run();
-}
index 6e6c222bb81d08b1d1f8be892efbae87757aff1e..b0292ae8f73de8137943b3f10aebacd0cac11a2a 100755 (executable)
@@ -18,7 +18,7 @@
 
 import '../common/init';
 import { wrt } from '../browser/wrt';
-import * as ServiceManager from '../common/service_manager';
+import * as ServiceManager from './service_manager';
 
 wrt.on('start-service', (event: any, internal_id: string) => {
   console.log(`start service app : ${internal_id}`);
diff --git a/wrt_app/service/service_manager.ts b/wrt_app/service/service_manager.ts
new file mode 100644 (file)
index 0000000..66213f6
--- /dev/null
@@ -0,0 +1,78 @@
+import { Worker, isMainThread } from 'worker_threads';
+import { wrt } from '../browser/wrt';
+
+interface WorkerMap {
+  [id: string]: any;
+}
+let workers: WorkerMap = {};
+let runner: any;
+
+Object.defineProperty(global, 'serviceType', {
+  value: wrt.getServiceModel(),
+  writable: false
+});
+
+function createWorker(id: string, startService: string, filename: string) {
+  if (workers[id]) {
+    workers[id].postMessage({ type: 'wake' });
+    return;
+  }
+
+  workers[id] = new Worker(startService, {
+    workerData: {
+      id,
+      filename
+    }
+  });
+  workers[id].on('message', (message: string) => {
+    if (message === 'will-terminate') {
+      workers[id].terminate();
+    }
+  });
+  workers[id].on('exit', (code: number) => {
+    delete workers[id];
+    let runningServices = Object.keys(workers).length;
+    console.log(`exit code(${code}), remain services(${runningServices})`);
+  });
+}
+
+function terminateWorker(id: string, delay: number) {
+  if (!workers[id]) {
+    console.log(`This worker is already terminated. ${id}`);
+    return;
+  }
+  console.log(`${id} will shutdown after ${delay}ms`);
+  workers[id].postMessage({ type: 'stop', delay });
+}
+
+export function startService(id: string, filename: string) {
+  console.log(`startService - ${id}`);
+  if (global['serviceType'] === 'STANDALONE') {
+    let ids = id.split(':');
+    let serviceId = ids[0];
+    let packageId = serviceId.split('.')[0];
+    wrt.security?.dropThreadPrivilege(packageId, serviceId);
+  }
+  let startService = `${__dirname}/service_runner.js`;
+  createWorker(id, startService, filename);
+}
+
+export function stopService(id: string) {
+  console.log(`stopService - ${id}`);
+  terminateWorker(id, 500);
+}
+
+export function handleBuiltinService(serviceId: string, serviceName: string) {
+  if (!serviceName) {
+    return;
+  }
+  let need_stop = (serviceName.substr(0, 5) === 'stop_');
+  if (need_stop) {
+    console.log(`${serviceName} will be terminated.`);
+    workers[serviceId].terminate();
+  } else {
+    console.log(`Builtin service is ${serviceName}`);
+    let startService = `${__dirname}/../service/builtins/${serviceName}.js`;
+    createWorker(serviceId, startService, '');
+  }
+}
\ No newline at end of file
diff --git a/wrt_app/service/service_runner.ts b/wrt_app/service/service_runner.ts
new file mode 100644 (file)
index 0000000..c028e03
--- /dev/null
@@ -0,0 +1,161 @@
+import '../common/init';
+import * as XWalkExtension from '../common/wrt_xwalk_extension';
+import { DeviceAPIRouter } from './device_api_router';
+import { isMainThread, parentPort, workerData } from 'worker_threads';
+import { wrt } from '../browser/wrt';
+
+Object.defineProperty(global, 'serviceType', {
+  value: wrt.getServiceModel(),
+  writable: false
+});
+
+function isServiceApplication() {
+  return global['serviceType'] !== 'UI';
+}
+
+function isGlobalService() {
+  return global['serviceType'] === 'GLOBAL';
+}
+function printAppControlData(id: string)  {
+  let reqAppControl = global.tizen.application.getCurrentApplication().getRequestedAppControl();
+  if (reqAppControl) {
+    console.log(`id: ${id}, appControlData operation: ${reqAppControl.appControl.operation}`);
+    let appControlData = reqAppControl.appControl.data;
+    for (let dataIndex in appControlData) {
+      for (let valueIndex in appControlData[dataIndex].value)
+        console.log(`data[${dataIndex}][${valueIndex}]: ${appControlData[dataIndex].value[valueIndex]}`);
+    }
+  }
+}
+
+function registerExtensionResolver(id: string) {
+  if (wrt.tv) {
+    let extensionResolver = (module: any, file_path: string) => {
+      console.log(`resolved path: ${file_path}`);
+      let content = (wrt.tv as NativeWRTjs.TVExtension).decryptFile(id, file_path);
+      if (content) {
+        // Remove BOM
+        if (content.charCodeAt(0) === 0xFEFF)
+          content = content.slice(1);
+        module._compile(content, file_path);
+      }
+    };
+    require.extensions['.js.spm'] = extensionResolver;
+    require.extensions['.spm'] = extensionResolver;
+  }
+}
+
+let requestStopService = (id: string) => {
+  requestStopService = (id: string) => {};
+  setTimeout(() => wrt.stopService(id), 500);
+}
+
+let app: any = null;
+let dummyTimer: any;
+let periodLauncherAlive = 20; // 2s
+
+let checkLauncherAlive = (id: string) => {
+  periodLauncherAlive--;
+  if (!periodLauncherAlive) {
+    periodLauncherAlive = 20;
+    if (!wrt.checkLauncherAlive(id)) {
+      console.log(`${id} launcher was killed.`)
+      requestStopService(id);
+      checkLauncherAlive = () => {};
+    }
+  }
+}
+
+export function start(id: string, filename: string) {
+  XWalkExtension.initialize();
+  XWalkExtension.setRuntimeMessageHandler((type, data) => {
+    if (type === 'tizen://exit') {
+      console.log(`${id} will be closed by ${type}`);
+      requestStopService(id);
+    }
+  });
+
+  console.log(`serviceType : ${global['serviceType']}`)
+  new DeviceAPIRouter(id, isGlobalService());
+
+  // this is workaround solution to make webapis singleton worker
+  // ahead of dropThreadPrivilege()
+  global.tizen.systeminfo.getPropertyValue("CPU", () => { }, () => { });
+
+  // This is for awaking up uv loop.
+  dummyTimer = setInterval(() => {
+    checkLauncherAlive(id);
+  }, 100);
+
+  if (isServiceApplication()) {
+    registerExtensionResolver(id);
+    filename = wrt.getStartServiceFile(id);
+    console.log(`start global service file: ${filename}`);
+  }
+
+  printAppControlData(id);
+
+  try {
+    let ids = id.split(':');
+    let serviceId = ids[0];
+    let packageId = global.webapis.getPackageId();
+    wrt.security?.dropThreadPrivilege(packageId, serviceId);
+
+    app = require(filename);
+    if (app.onStart !== undefined) {
+      app.onStart();
+    }
+    if (app.onRequest !== undefined) {
+      app.onRequest();
+    }
+    if (isGlobalService()) {
+      wrt.finishStartingService(id);
+    }
+  } catch (e) {
+    console.log(`exception on start: ${e}`);
+    requestStopService(id);
+  }
+}
+
+export function stop(id: string) {
+  if (dummyTimer)
+    clearInterval(dummyTimer);
+  try {
+    if (app.onStop !== undefined) {
+      app.onStop();
+    } else if (app.onExit !== undefined) {
+      app.onExit();
+    }
+  } catch (e) {
+    console.log(`exception on stop: ${e}`);
+  }
+}
+
+function run() {
+  let id = workerData.id;
+  // FIXME: this should be 'wrt.tv?.serviceMount(id)' after Tizen 6.5 release
+  (wrt.tv as any)?.serviceMount(id);
+
+  let filename = workerData.filename;
+  start(id, filename);
+
+  if (!parentPort)
+    return;
+  parentPort.on('message', (message) => {
+    console.log(`Received message type : ${message.type}`);
+    if (message.type === 'wake') {
+      app?.onRequest();
+    } else if (message.type === 'stop') {
+      stop(id);
+      setTimeout(() => {
+        XWalkExtension.cleanup();
+        parentPort?.postMessage("will-terminate");
+        (wrt.tv as any)?.serviceUmount(id);
+      }, message.delay);
+    }
+  });
+}
+
+if (!isMainThread) {
+  run();
+}