log .= $message."\n"; } public function Run() { $this->log("------------------"); $this->log("Start request", 1, true); $data = array(); try { $result = $this->Call(); $data["result"][$this->func] = $result; } catch (WebException $e) { $data["error"]["code"] = $e->getCode(); $data["error"]["name"] = $e->getName(); $data["error"]["reason"] = $e->getMessage(); $this->log(sprintf("Failure : [%s] %s", $e->getCode(), $e->getName())); } catch (Exception $e) { $data["unexpected error"]["message"] = $e->getMessage(); $this->log(sprintf("Unexpected exception : %s", $e->getMessage())); } $this->Send($data); $this->log("Request finished", 1, true); $this->log("------------------\n\n"); if(Configuration::get('log.verbosity') > 0) { file_put_contents(Configuration::get('log.file'), $this->log, FILE_APPEND | LOCK_EX); } } private function Call() { ob_start(); session_save_path(Configuration::get('session.save_path')); session_start(); $params = empty($_GET) ? $_POST : $_GET; if (empty($params)) { throw new WebException ("CallArgument", "arguments error", -1); } if (!array_key_exists("func", $params)) { throw new WebException ("CallArgFunction", "no 'func' specified", -2); } $this->func = $params["func"]; unset($params['func']); if (!is_callable(array($this, $this->func))) { throw new WebException ("CallFunction", "'func' method not available", -3); } $rm = new ReflectionMethod ($this, $this->func); $nbParams = count($params); $nbArgsFix = $rm->getNumberOfRequiredParameters(); $nbArgs = $rm->getNumberOfParameters(); /* Check the number of arguments. */ if ($nbArgs != $nbParams && $nbArgsFix != $nbParams) { throw new WebException ("CallArgNumber", "you must provide " . $nbArgsFix . " arguments", 4); } $this->log("Calling '".$this->func."'"); $this->log("Params: ".print_r($params, true), 2); return call_user_func_array(array($this, $this->func), $params); } private function Send(array $data) { ob_clean(); flush(); $this->log("Data: ".print_r($data, true), 2); echo json_encode($data); } }