コード例 #1
0
 /**
  * Hängt zusätzliche Informationen an jeden Response an
  * @param Dragon_Json_Server_Request_Http $request
  * @param Dragon_Json_Server_Response_Http $response
  */
 public function postDispatch(Dragon_Json_Server_Request_Http $request, Dragon_Json_Server_Response_Http $response)
 {
     $lastResponse = $request->getOptionalParam('timestamp');
     if (isset($lastResponse) && $lastResponse == -1) {
         return;
     }
     $actualResponse = time();
     $messages = array();
     if (isset($lastResponse)) {
         $pluginregistry = Zend_Registry::get('Dragon_Plugin_Registry');
         $plugins = $pluginregistry->getPlugins('DragonX_Clientmessage_Plugin_Source_Interface');
         foreach ($plugins as $plugin) {
             $list = $plugin->getClientmessages($lastResponse, $actualResponse);
             foreach ($list as $record) {
                 if (!isset($messages[$record->key])) {
                     $messages[$record->key] = array();
                 }
                 try {
                     $record->result = Zend_Json::decode($record->result);
                 } catch (Exception $exception) {
                 }
                 $messages[$record->key][] = array('created' => $record->created, 'result' => $record->result);
             }
         }
         foreach ($messages as $key => &$submessages) {
             usort($submessages, array($this, '_compareMessages'));
         }
         unset($submessages);
     }
     $response->setResult(array('result' => $response->getResult(), 'timestamp' => $actualResponse) + $messages);
 }
コード例 #2
0
 /**
  * Prüft bei jedem Request die Authentifizierung
  * @param Dragon_Json_Server_Request_Http $request
  */
 public function preDispatch(Dragon_Json_Server_Request_Http $request)
 {
     list($classname, $methodname) = $request->parseMethod();
     if (!$this->_authenticateRequired($classname, $methodname)) {
         return;
     }
     $params = $request->getRequiredParams(array('sessionhash'));
     $logicSession = new DragonX_Account_Logic_Session();
     $recordAccount = $logicSession->getAccount($params['sessionhash']);
     $logicAccount = new DragonX_Account_Logic_Account();
     $logicAccount->requestAccount($recordAccount);
     Zend_Registry::get('Dragon_Plugin_Registry')->invoke('DragonX_Account_Plugin_LoadAccount_Interface', array($recordAccount));
     Zend_Registry::set('recordAccount', $recordAccount);
 }
コード例 #3
0
 /**
  * Sendet den übergebenen Request zum Server und gibt das Result zurück
  * @param Dragon_Json_Server_Request_Http $request
  * @return array
  */
 public function send(Dragon_Json_Server_Request_Http $request)
 {
     $request->addParam(-1, 'timestamp');
     $body = $this->_httpclient->setRawData($request->toJson())->request('POST')->getBody();
     try {
         $response = Zend_Json::decode($body);
     } catch (Exception $exception) {
         throw new Dragon_Application_Exception_System('decoding failed', array('message' => $exception->getMessage(), 'body' => $body));
     }
     if (!is_array($response) || !array_key_exists('id', $response)) {
         throw new Dragon_Application_Exception_System('invalid response', array('response' => $response, 'body' => $body));
     }
     if (array_key_exists('error', $response)) {
         throw new Dragon_Application_Exception_System($response['error']['message'], array('error' => $response['error']));
     }
     if (!array_key_exists('result', $response)) {
         throw new Dragon_Application_Exception_System('invalid response', array('response' => $response, 'body' => $body));
     }
     return $response['result'];
 }
コード例 #4
0
 /**
  * Prüft bei jedem Request ist die Authentifizierung
  * @param Dragon_Json_Server_Request_Http $request
  */
 public function preDispatch(Dragon_Json_Server_Request_Http $request)
 {
     try {
         list($classname, $methodname) = $request->parseMethod();
         $reflectionClass = new Zend_Reflection_Class($classname);
         $tagResource = $reflectionClass->getMethod($methodname)->getDocblock()->getTag('dragonx_acl_resource');
         if (!$tagResource) {
             return;
         }
         $resource = $tagResource->getDescription();
     } catch (Exception $exception) {
         return;
     }
     $resources = array();
     if (Zend_Registry::isRegistered('recordAccount')) {
         $logicAcl = new DragonX_Acl_Logic_Acl();
         $resources = $logicAcl->getResources(Zend_Registry::get('recordAccount'));
     }
     if (!in_array($resource, $resources)) {
         throw new Dragon_Application_Exception_System('missing resource', array('resource' => $resource));
     }
 }
コード例 #5
0
 /**
  * Loggt vor jedem Request die Requestparameter und den Requesttimestamp
  * @param Dragon_Json_Server_Request_Http $request
  */
 public function preDispatch(Dragon_Json_Server_Request_Http $request)
 {
     $logicRequest = new DragonX_Log_Logic_Request();
     $logicRequest->request($request->getMethod(), $request->getId(), $request->getVersion(), $request->getParams());
 }