Source: common/worker_utils.js

/**
 *  MIT License (MIT)
 *
 *  Copyright (c) <2014> <Rapp Project EU>
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in
 *  all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *  THE SOFTWARE.
 *
 *
 *  Authors: Konstantinos Panayiotou
 *  Contact: klpanagi@gmail.com
 *
 */

/**
 * @module
 * @description Server-side worker thread utility functions.
 */


var path = require('path');
var util = require('util');

var webService = require(path.join(__dirname, '../webService/webService.js'));


/**
 * @function setWorkerName
 * @description Sets worker's name in global scope object.
 *
 * @param wName - Worker's name to assign;
 */
var setWorkerName = function(wName) {
  if( ! wName ){
    throw new Error("Invalid set of Arguments. Missing wName!");
  }
  global.WORKER = global.WORKER || {name: wName, services: []};
};


/**
 * @function launchSvcAll
 * @description Launch all services registered to the worker thread calling
 * this method
 */
var launchSvcAll = function(){
  var workerSvc = ENV.WORKERS[ WORKER.name ].services;
  var workerDir = path.dirname(path.join(
    ENV.PATHS.PKG_DIR, ENV.WORKERS[ WORKER.name ].path));

  for( var i in workerSvc ){
    var svcParams = ENV.SERVICES[ workerSvc[i] ];
    if( svcParams.launch ){
      var srcPath = '';

      if( svcParams.path ){
        srcPath = path.join(
          ENV.PATHS.SERVICES_DIR, svcParams.path);
      }
      else{
        srcPath = path.join(
          ENV.PATHS.SERVICES_DIR,
          svcParams.name, 'svc.js'
        );
      }

      var svcImpl = require(srcPath);

      var options = {
        name:       svcParams.name,
        urlName:    svcParams.url_name,
        workerName: WORKER.name,
        anonymous:  svcParams.anonymous,
        namespace:  svcParams.namespace,
        timeout:    svcParams.timeout,
        rosSrvName: svcParams.ros_srv_name || "",
        ros_bridge: svcParams.ros_bridge || false,
        auth:       svcParams.authentication || false
      };

      var svc = new webService(svcImpl, options);
      // Register this service to the service handler
      svc.register();
    }
  }
};


// Global worker thread space hack!!
global.ENV = require( path.join(__dirname, '../..', 'env.js') );


exports.setWorkerName = setWorkerName;
exports.launchSvcAll = launchSvcAll;