public function __construct($msg)
 {
     parent::__construct();
     $msg_as_array = json_decode($msg, true);
     $this->id = $msg_as_array['id'];
     $this->application_id = $msg_as_array['applicationId'];
     $this->app_version_id = $msg_as_array['appVersionId'];
     $this->event_id = $msg_as_array['eventId'];
     $this->arguments = $msg_as_array['arguments'];
     $this->target = $msg_as_array['target'];
     $this->timeout = $msg_as_array['timeout'];
     $this->async = $msg_as_array['async'];
     $this->decoded_arguments = null;
     if (GlobalState::$TYPE === 'CLOUD') {
         $this->relative_path = $msg_as_array['relativePath'];
         Config::$RELATIVE_PATH = $msg_as_array['relativePath'];
         Config::$TASK_APPLICATION_ID = $msg_as_array['applicationId'];
         ClassManager::analyze();
     }
 }
 protected function RequestServiceInvocation($msg)
 {
     /// invoke hosted servise action
     $rsi = new RequestServiceInvocation($msg);
     Log::writeInfo("Received RSI:" . $rsi, $target = 'file');
     if (GlobalState::$TYPE == 'CLOUD' && time() * 1000 - $rsi->getTimestamp() > $this->timeout) {
         Log::writeError("RSI ignored by timeout" . $rsi, $target = 'file');
         return;
     }
     if (GlobalState::$TYPE === 'CLOUD') {
         Config::$RELATIVE_PATH = $msg['relativePath'];
         Config::$TASK_APPLICATION_ID = $msg['applicationId'];
         //ClassManager::analyze( PathBuilder::getClasses() );
         ClassManager::analyze(PathBuilder::getHostedService($rsi->getAppVersionId(), $rsi->getRelativePath()));
     }
     $executor = $this->executor_holder->getCodeExecutor($rsi->getApplicationId(), $rsi->getAppVersionId());
     $executor->invokeService($rsi);
 }