Пример #1
0
    public function getUsers($nick)
    {
        $connection = $this->getConnection();
        $now = time();
        $sqlQuery = '
			UPDATE
				`' . XOAD_CHAT_USERS_TABLE_NAME . '`
			SET
				`time` = ' . $now . '
			WHERE
				`nick` = \'' . $this->escapeString($nick, $connection) . '\'
		';
        mysql_query($sqlQuery, $connection);
        $sqlQuery = '
			SELECT
				`nick`
			FROM
				`' . XOAD_CHAT_USERS_TABLE_NAME . '`
			WHERE
				`time` < ' . ($now - 30) . '
			ORDER BY
				`time` ASC,
				`nick` ASC
		';
        $sqlResult = mysql_query($sqlQuery);
        $oldUsers = array();
        while (($row = mysql_fetch_assoc($sqlResult)) != false) {
            $oldUsers[] = $row['nick'];
        }
        mysql_free_result($sqlResult);
        $sqlQuery = '
			DELETE FROM
				`' . XOAD_CHAT_USERS_TABLE_NAME . '`
			WHERE
				`time` < ' . ($now - 30) . '
		';
        mysql_query($sqlQuery);
        $sqlQuery = '
			SELECT
				`nick`
			FROM
				`' . XOAD_CHAT_USERS_TABLE_NAME . '`
			ORDER BY
				`nick` ASC
		';
        $sqlResult = mysql_query($sqlQuery, $connection);
        $users = array();
        while (($row = mysql_fetch_assoc($sqlResult)) != false) {
            $users[] = $row['nick'];
        }
        mysql_free_result($sqlResult);
        $storage =& XOAD_Events_Storage::getStorage();
        foreach ($oldUsers as $nick) {
            $storage->postEvent('onUserLeave', 'ChatClient', null, $nick);
        }
        $this->closeConnection($connection);
        return $users;
    }
Пример #2
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;
 }