2 import * as XWalkExtension from './wrt_xwalk_extension';
3 import { DeviceAPIRouter } from '../service/device_api_router';
4 import { isMainThread, parentPort, workerData } from 'worker_threads';
5 import { wrt } from '../browser/wrt';
7 let serviceType: string = wrt.getServiceModel();
9 function isServiceApplication() {
10 return serviceType !== 'UI';
13 function isGloablService() {
14 return serviceType === 'DAEMON';
17 function registerExtensionResolver(id: string) {
19 let extensionResolver = (module: any, file_path: string) => {
20 console.log(`resolved path: ${file_path}`);
21 let content = (wrt.tv as NativeWRTjs.TVExtension).decryptFile(id, file_path);
24 if (content.charCodeAt(0) === 0xFEFF)
25 content = content.slice(1);
26 module._compile(content, file_path);
29 require.extensions['.js.spm'] = extensionResolver;
30 require.extensions['.spm'] = extensionResolver;
35 export function start(id: string, filename: string) {
36 XWalkExtension.initialize();
37 XWalkExtension.setRuntimeMessageHandler((type, data) => {
38 if (type === 'tizen://exit') {
39 console.log(`${id} will be closed by ${type}`);
40 setTimeout(() => wrt.stopService(id), 500);
44 console.log('serviceType : '+serviceType)
45 new DeviceAPIRouter(id, isGloablService());
47 if (isServiceApplication()) {
48 registerExtensionResolver(id);
49 filename = wrt.getStartServiceFile(id);
50 console.log(`start global service file: ${filename}`);
53 // FIXME: this is for awaking up uv loop.
54 // uv loop is sleeping for a few second with tizen webapis's aync callback
55 setInterval(() => {}, 100);
57 app = require(filename);
58 if (app.onStart !== undefined) {
61 if (app.onRequest !== undefined) {
64 if (isGloablService()) {
65 wrt.finishStartingService(id);
68 console.log(`exception on start: ${e}`);
69 setTimeout(() => wrt.stopService(id), 500);
73 export function stop(id: string) {
75 if (app.onStop !== undefined) {
77 } else if (app.onExit !== undefined) {
81 console.log(`exception on stop: ${e}`);
83 setTimeout(() => process.exit(), 500);
87 let id = workerData.id;
88 let filename = workerData.filename;
93 parentPort.on('message', (msg) => {
94 console.log(`message received : ${msg}`);
95 if (msg === 'stopService') {