drastic speedup through multicalls

This commit is contained in:
kremsy 2017-05-14 09:25:52 +02:00
parent 5d6f8d047c
commit e5c7fdbf6b
7 changed files with 33 additions and 31 deletions

View File

@ -252,10 +252,19 @@ class CallbackManager implements UsageInformationAble {
$timings[$key] = array($callback[0], microtime(true) - $time1); $timings[$key] = array($callback[0], microtime(true) - $time1);
} }
//Execute Multicalls
$this->maniaControl->getClient()->executeMulticall();
$fullTime = microtime(true) - $startTime; $fullTime = microtime(true) - $startTime;
if ($fullTime > ErrorHandler::LONG_LOOP_REPORT_TIME) { if ($fullTime > ErrorHandler::LONG_LOOP_REPORT_TIME) {
$this->maniaControl->getErrorHandler()->triggerDebugNotice(json_encode(array("Long Loop Detected: " . $fullTime, $timings))); $this->maniaControl->getErrorHandler()->triggerDebugNotice(json_encode(array("Long Loop Detected: " . $fullTime, $timings)));
} }
} }
/** /**

View File

@ -72,12 +72,11 @@ class Chat implements CallbackListener, CommunicationListener, UsageInformationA
* @param string $message * @param string $message
* @param string $login * @param string $login
* @param string|bool $prefix * @param string|bool $prefix
* @param bool $multiCall
* @return bool * @return bool
*/ */
public function sendInformation($message, $login = null, $prefix = true, $multiCall = false) { public function sendInformation($message, $login = null, $prefix = true) {
$format = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_FORMAT_INFORMATION); $format = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_FORMAT_INFORMATION);
return $this->sendChat($format . $message, $login, $prefix, $multiCall); return $this->sendChat($format . $message, $login, $prefix);
} }
/** /**
@ -86,10 +85,9 @@ class Chat implements CallbackListener, CommunicationListener, UsageInformationA
* @param string $message * @param string $message
* @param string $login * @param string $login
* @param string|bool $prefix * @param string|bool $prefix
* @param bool $multiCall
* @return bool * @return bool
*/ */
public function sendChat($message, $login = null, $prefix = true, $multiCall = false) { public function sendChat($message, $login = null, $prefix = true) {
if (!$this->maniaControl->getClient()) { if (!$this->maniaControl->getClient()) {
return false; return false;
} }
@ -102,13 +100,13 @@ class Chat implements CallbackListener, CommunicationListener, UsageInformationA
$login = Player::parseLogin($login); $login = Player::parseLogin($login);
} }
try { try {
return $this->maniaControl->getClient()->chatSendServerMessage($chatMessage, $login, $multiCall); return $this->maniaControl->getClient()->chatSendServerMessage($chatMessage, $login, true);
} catch (UnknownPlayerException $e) { } catch (UnknownPlayerException $e) {
return false; return false;
} }
} }
return $this->maniaControl->getClient()->chatSendServerMessage($chatMessage, null, $multiCall); return $this->maniaControl->getClient()->chatSendServerMessage($chatMessage, null, true);
} }
/** /**

View File

@ -241,13 +241,13 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener,
try { try {
if (!$logins) { if (!$logins) {
return $this->maniaControl->getClient()->sendDisplayManialinkPage(null, $manialinkText, $timeout, $hideOnClick); return $this->maniaControl->getClient()->sendDisplayManialinkPage(null, $manialinkText, $timeout, $hideOnClick, true);
} }
if (is_string($logins)) { if (is_string($logins)) {
return $this->maniaControl->getClient()->sendDisplayManialinkPage($logins, $manialinkText, $timeout, $hideOnClick); return $this->maniaControl->getClient()->sendDisplayManialinkPage($logins, $manialinkText, $timeout, $hideOnClick, true);
} }
if ($logins instanceof Player) { if ($logins instanceof Player) {
return $this->maniaControl->getClient()->sendDisplayManialinkPage($logins->login, $manialinkText, $timeout, $hideOnClick); return $this->maniaControl->getClient()->sendDisplayManialinkPage($logins->login, $manialinkText, $timeout, $hideOnClick, true);
} }
if (is_array($logins)) { if (is_array($logins)) {
$loginList = array(); $loginList = array();
@ -258,7 +258,7 @@ class ManialinkManager implements ManialinkPageAnswerListener, CallbackListener,
$loginList[] = $login; $loginList[] = $login;
} }
} }
return $this->maniaControl->getClient()->sendDisplayManialinkPage(implode(',', $loginList), $manialinkText, $timeout, $hideOnClick); return $this->maniaControl->getClient()->sendDisplayManialinkPage(implode(',', $loginList), $manialinkText, $timeout, $hideOnClick, true);
} }
} catch (UnknownPlayerException $e) { } catch (UnknownPlayerException $e) {
return false; return false;

View File

@ -410,7 +410,7 @@ class MapQueue implements CallbackListener, CommandListener, UsageInformationAbl
} }
try { try {
$this->maniaControl->getClient()->setNextMapIdent($map->uid); $this->maniaControl->getClient()->setNextMapIdent($map->uid, true);
} catch (NextMapException $e) { } catch (NextMapException $e) {
} catch (NotInListException $e) { } catch (NotInListException $e) {
} }

View File

@ -533,14 +533,14 @@ class ModeScriptEventManager implements UsageInformationAble {
* @param string $data * @param string $data
*/ */
public function triggerModeScriptEvent($eventName, $data = '') { public function triggerModeScriptEvent($eventName, $data = '') {
try { $this->maniaControl->getClient()->triggerModeScriptEvent($eventName, $data, function ($exception) use ($eventName) {
$this->maniaControl->getClient()->triggerModeScriptEvent($eventName, $data); if ($exception instanceof GameModeException) {
} catch (GameModeException $e) { if ($exception->getMessage() != 'Not in script mode.') {
if ($e->getMessage() != 'Not in script mode.') { throw $exception;
throw $e;
} }
Logger::logWarning($eventName . " can't be triggered because you are not in Scriptmode, start your server in Scriptmode!"); Logger::logWarning($eventName . " can't be triggered because you are not in Scriptmode, start your server in Scriptmode!");
} }
});
} }
/** /**

View File

@ -185,7 +185,7 @@ class CustomVotesPlugin implements SidebarMenuEntryRenderable, CommandListener,
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_TEAM_BALANCE, -1.); $ratioArray[] = new VoteRatio(VoteRatio::COMMAND_TEAM_BALANCE, -1.);
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_NEXT_MAP, -1.); $ratioArray[] = new VoteRatio(VoteRatio::COMMAND_NEXT_MAP, -1.);
$this->maniaControl->getClient()->setCallVoteRatios($ratioArray, false); $this->maniaControl->getClient()->setCallVoteRatios($ratioArray, false, true);
$this->constructMenu(); $this->constructMenu();
return true; return true;

View File

@ -290,9 +290,8 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
* Shows the serverRank to a certain Player * Shows the serverRank to a certain Player
* *
* @param Player $player * @param Player $player
* @param $multiCall
*/ */
public function showRank(Player $player, $multiCall = false) { public function showRank(Player $player) {
$rankObj = $this->getRank($player); $rankObj = $this->getRank($player);
$type = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_RANKING_TYPE); $type = $this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_RANKING_TYPE);
@ -326,7 +325,7 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
$message = '$0f3 You need $<$fff' . $minRecords . '$> Records on this server before receiving a rank...'; $message = '$0f3 You need $<$fff' . $minRecords . '$> Records on this server before receiving a rank...';
} }
} }
$this->maniaControl->getChat()->sendChat($message, $player, $multiCall); $this->maniaControl->getChat()->sendChat($message, $player);
} }
/** /**
@ -360,10 +359,9 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
* Show which Player is next ranked to you * Show which Player is next ranked to you
* *
* @param Player $player * @param Player $player
* @param bool $multiCall
* @return bool * @return bool
*/ */
public function showNextRank(Player $player, $multiCall = false) { public function showNextRank(Player $player) {
$rankObject = $this->getRank($player); $rankObject = $this->getRank($player);
if (!$rankObject) { if (!$rankObject) {
return false; return false;
@ -382,7 +380,7 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
} else { } else {
$message = '$0f3No better ranked player.'; $message = '$0f3No better ranked player.';
} }
$this->maniaControl->getChat()->sendChat($message, $player, $multiCall); $this->maniaControl->getChat()->sendChat($message, $player);
return true; return true;
} }
@ -429,13 +427,10 @@ class ServerRankingPlugin implements Plugin, CallbackListener, CommandListener {
continue; continue;
} }
//TODO combine the following to message to one (saves half of calls) //TODO combine the following to message to one (saves half of calls)
$this->showRank($player, true); $this->showRank($player);
$this->showNextRank($player, true); $this->showNextRank($player);
} }
//Execute as a MultiCall
$this->maniaControl->getClient()->executeMulticall();
// Trigger callback // Trigger callback
$this->maniaControl->getCallbackManager()->triggerCallback(self::CB_RANK_BUILT); $this->maniaControl->getCallbackManager()->triggerCallback(self::CB_RANK_BUILT);
} }