From a1349f225c39ccfb2922479d65c04be840f66d10 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Thu, 2 Jan 2020 23:49:01 -0800 Subject: [PATCH] [M76 Migration][Service][Global] Support multiple connections This supports multiple connections between ui apps and service apps. Reference: https://review.tizen.org/gerrit/221517/ Change-Id: I383592399b89a8eef22d7a06aadb08c5ca27f736 Signed-off-by: Youngsoo Choi --- wrt_app/service/main.js | 60 ++++++++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/wrt_app/service/main.js b/wrt_app/service/main.js index f6350de..a37e977 100755 --- a/wrt_app/service/main.js +++ b/wrt_app/service/main.js @@ -24,26 +24,26 @@ const XWalkExtension = require('../common/wrt_xwalk_extension'); var sandbox = []; var sandbox_count = 0; +var service_source = []; -wrt.on('start-service', (event, app_id, permissions) => { - console.log('start service app : ' + app_id + ', permissions : ' + permissions); - new XWalkExtension(); - if (sandbox[app_id] === undefined) { +wrt.on('start-service', (event, internal_id, permissions) => { + console.log('start service app : ' + internal_id + ', permissions : ' + permissions); + if (sandbox[internal_id] === undefined) { if (sandbox_count === 0) { new XWalkExtension(); } sandbox_count++; const Module = require('module'); - sandbox[app_id] = { + sandbox[internal_id] = { console: console, module: new Module, require: require, tizen: tizen, }; - let access_control_manager = new AccessControlManager(permissions, sandbox[app_id]); + let access_control_manager = new AccessControlManager(permissions, sandbox[internal_id]); access_control_manager.initialize(); - for(let key in global) { - sandbox[app_id][key] = global[key]; + for (let key in global) { + sandbox[internal_id][key] = global[key]; } let standard_object_list = [ Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError, Number, BigInt, Math, Date, @@ -56,36 +56,44 @@ wrt.on('start-service', (event, app_id, permissions) => { WebAssembly.Table, WebAssembly.CompileError, WebAssembly.LinkError, WebAssembly.RuntimeError, Boolean, Function, Object, Symbol ]; for (let idx in standard_object_list) { - sandbox[app_id][standard_object_list[idx].name] = standard_object_list[idx]; + sandbox[internal_id][standard_object_list[idx].name] = standard_object_list[idx]; } - let options = { filename: app_id }; - vm.runInNewContext(wrt.readService(app_id), sandbox[app_id], options); + let options = { filename: internal_id }; + let service_id = internal_id.substr(0, internal_id.indexOf(":")); + let terminate_service_client_process = false; + if (service_source[service_id] === undefined) { + service_source[service_id] = wrt.readService(internal_id); + terminate_service_client_process = true; + } + vm.runInNewContext(service_source[service_id], sandbox[internal_id], options); - if (!wrt.terminateClient(app_id)) { - console.log('Failed to terminate client process'); + if (terminate_service_client_process) { + if (!wrt.terminateServiceClientProcess(internal_id)) { + console.log('Failed to terminate client process'); + } } } - if (sandbox[app_id]['started'] === undefined) { - sandbox[app_id]['started'] = true; - sandbox[app_id]['stopped'] = undefined; + if (sandbox[internal_id]['started'] === undefined) { + sandbox[internal_id]['started'] = true; + sandbox[internal_id]['stopped'] = undefined; const start_callback_string = 'if (module.exports.onStart !== undefined) { module.exports.onStart(); }'; - vm.runInContext(start_callback_string, sandbox[app_id]); + vm.runInContext(start_callback_string, sandbox[internal_id]); } const request_callback_string = 'if (module.exports.onRequest !== undefined) { module.exports.onRequest(); }'; - vm.runInContext(request_callback_string, sandbox[app_id]); + vm.runInContext(request_callback_string, sandbox[internal_id]); }); -wrt.on('stop-service', (event, app_id) => { - if (sandbox[app_id]['stopped'] === undefined) { +wrt.on('stop-service', (event, internal_id) => { + if (sandbox[internal_id]['stopped'] === undefined) { sandbox_count--; - sandbox[app_id]['stopped'] = true; - sandbox[app_id]['started'] = undefined; + sandbox[internal_id]['stopped'] = true; + sandbox[internal_id]['started'] = undefined; const stop_callback_string = 'if (module.exports.onStop !== undefined) { module.exports.onStop(); }'; - vm.runInContext(stop_callback_string, sandbox[app_id]); - for(let key in sandbox[app_id]) { - delete sandbox[app_id][key]; + vm.runInContext(stop_callback_string, sandbox[internal_id]); + for(let key in sandbox[internal_id]) { + delete sandbox[internal_id][key]; } - delete sandbox[app_id]; + delete sandbox[internal_id]; if (sandbox_count === 0) { tizen = null; } -- 2.7.4