Exemple #1
0
 /**
  * Dispatches a client callback to the server.
  *
  * @access	public
  *
  * @return	string	Outputs JavaString code that contains the result
  *					and the output of the callback.
  *
  * @static
  *
  */
 public static function dispatch()
 {
     if (empty($GLOBALS['_XOAD_SERVER_REQUEST_BODY'])) {
         return false;
     }
     $requestBody =& $GLOBALS['_XOAD_SERVER_REQUEST_BODY'];
     if (!XOAD_Server::notifyObservers('dispatchEnter', array('request' => &$requestBody))) {
         return false;
     }
     if (isset($requestBody['eventPost'])) {
         $callbackResponse = array();
         $storage =& XOAD_Events_Storage::getStorage();
         $callbackResponse['status'] = $storage->postEvent($requestBody['event'], $requestBody['className'], $requestBody['sender'], $requestBody['data'], $requestBody['filter']);
         if (XOAD_Server::notifyObservers('dispatchLeave', array('request' => &$requestBody, 'response' => &$callbackResponse))) {
             if (!empty($callbackResponse['status'])) {
                 print XOAD_Client::register($callbackResponse);
             }
         }
     } else {
         if (isset($requestBody['eventsCallback'])) {
             $eventsQuery = array();
             foreach ($requestBody['data'] as $event) {
                 $eventsQuery[] = array('event' => $event['event'], 'className' => $event['className'], 'filter' => $event['filter'], 'time' => $requestBody['time']);
             }
             $callbackResponse = array();
             $storage =& XOAD_Events_Storage::getStorage();
             $storage->cleanEvents();
             $callbackResponse['result'] = $storage->filterMultipleEvents($eventsQuery);
             if (XOAD_Server::notifyObservers('dispatchLeave', array('request' => &$requestBody, 'response' => &$callbackResponse))) {
                 if (!empty($callbackResponse['result'])) {
                     print XOAD_Client::register($callbackResponse);
                 }
             }
         } else {
             $callbackResponse = array();
             $outputBuffering = @ob_start();
             set_error_handler(array('XOAD_Server', 'handleError'));
             $callbackResponse['returnValue'] = call_user_func_array(array(&$requestBody['source'], $requestBody['method']), $requestBody['arguments']);
             if (defined('XOAD_SERVER_EXCEPTION')) {
                 if (XOAD_Server::notifyObservers('dispatchFailed', array('request' => &$requestBody, 'message' => XOAD_SERVER_EXCEPTION))) {
                     XOAD_Server::throwException(XOAD_SERVER_EXCEPTION);
                     return false;
                 }
             }
             $callbackResponse['returnObject'] =& $requestBody['source'];
             if ($outputBuffering) {
                 $output = @ob_get_contents();
                 if (!empty($output)) {
                     $callbackResponse['output'] = $output;
                 }
                 @ob_end_clean();
             }
             restore_error_handler();
             if (XOAD_Server::notifyObservers('dispatchLeave', array('request' => &$requestBody, 'response' => &$callbackResponse))) {
                 print XOAD_Client::register($callbackResponse);
             }
         }
     }
     return true;
 }