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; }
/** * 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; }