let internal_handler: ContextOption = {};
let service_type: string = wrt.getServiceModel?.() ?? 'UI';
-function callFunctionInContext(name: string, sandbox: vm.Context) {
- const script = `if (typeof ${name} === 'function') { ${name}(); }`;
- vm.runInContext(script, sandbox);
+function requestStopService(id: string) {
+ console.log(`${id} will be closed`);
+ setTimeout(() => wrt.stopService(id), 500);
+}
+
+function callFunctionInContext(name: string, id: string) {
+ try {
+ const script = `if (typeof ${name} === 'function') { ${name}(); }`;
+ vm.runInContext(script, sandbox[id]);
+ } catch (e) {
+ console.log(`${name} has exception: ${e}`);
+ if (wrt.tv) {
+ requestStopService(id);
+ }
+ }
}
export function startService(id: string, filename?: string) {
if (sandbox[id] === undefined) {
XWalkExtension.initialize();
XWalkExtension.setRuntimeMessageHandler((type, data) => {
- if (type === 'tizen://exit')
- setTimeout(() => {wrt.stopService(id)}, 500);
+ if (type === 'tizen://exit') {
+ requestStopService(id);
+ }
});
sandbox[id] = {
console: console,
tizen: global.tizen,
};
sandbox[id].module.exports.onStop = () => {
- callFunctionInContext('module.exports.onExit', sandbox[id]);
+ callFunctionInContext('module.exports.onExit', id);
};
let service_id = id.split(':')[0];
sandbox[id].webapis = wrt.tv ? global.webapis : {};
if (sandbox[id]['started'] === undefined) {
sandbox[id]['started'] = true;
sandbox[id]['stopped'] = undefined;
- callFunctionInContext('app.onStart', sandbox[id]);
+ callFunctionInContext('app.onStart', id);
if (service_type !== 'UI')
wrt.finishStartingService(id);
} else {
console.log(id + ' service has been started.');
}
-
- callFunctionInContext('app.onRequest', sandbox[id]);
+ callFunctionInContext('app.onRequest', id);
}
export function stopService(id: string) {
sandbox[id]['stopped'] = true;
sandbox[id]['started'] = undefined;
- callFunctionInContext('app.onStop', sandbox[id]);
+ callFunctionInContext('app.onStop', id);
internal_handler[id].timer_manager.releaseRemainingTimers();
for (let key in sandbox[id])