From b3707a47d104fcb3d7bce569004c36acdb909d4c Mon Sep 17 00:00:00 2001 From: kremsy Date: Mon, 8 May 2017 18:53:56 +0200 Subject: [PATCH] dedimania plugin upgrade + some upgrade on asynchttprequest --- core/Files/AsyncHttpRequest.php | 30 ++++++++++++++--- plugins/MCTeam/Dedimania/DedimaniaPlugin.php | 35 ++++++++++++-------- 2 files changed, 47 insertions(+), 18 deletions(-) diff --git a/core/Files/AsyncHttpRequest.php b/core/Files/AsyncHttpRequest.php index a9e69542..4fe45ca2 100644 --- a/core/Files/AsyncHttpRequest.php +++ b/core/Files/AsyncHttpRequest.php @@ -34,6 +34,7 @@ class AsyncHttpRequest implements UsageInformationAble { private $content; private $compression = false; private $contentType = 'text/xml; charset=UTF-8;'; + private $timeout = 60; private $headers = array(); public function __construct($maniaControl, $url) { @@ -45,11 +46,12 @@ class AsyncHttpRequest implements UsageInformationAble { * Create a new cURL Request for the given URL * * @param string $url - * @return Request + * @param int $timeout + * @return \cURL\Request */ - private function newRequest($url) { + private function newRequest($url, $timeout) { $request = new Request($url); - $request->getOptions()->set(CURLOPT_TIMEOUT, 60)->set(CURLOPT_HEADER, false)// don't display response header + $request->getOptions()->set(CURLOPT_TIMEOUT, $timeout)->set(CURLOPT_HEADER, false)// don't display response header ->set(CURLOPT_CRLF, true)// linux line feed ->set(CURLOPT_ENCODING, '')// accept encoding ->set(CURLOPT_USERAGENT, 'ManiaControl v' . ManiaControl::VERSION)// user-agent @@ -71,7 +73,7 @@ class AsyncHttpRequest implements UsageInformationAble { array_push($this->headers, 'Connection: Keep-Alive'); } - $request = $this->newRequest($this->url); + $request = $this->newRequest($this->url, $this->timeout); $request->getOptions()->set(CURLOPT_AUTOREFERER, true)// accept link reference ->set(CURLOPT_HTTPHEADER, $this->headers); // headers @@ -94,7 +96,7 @@ class AsyncHttpRequest implements UsageInformationAble { } - $request = $this->newRequest($this->url); + $request = $this->newRequest($this->url, $this->timeout); $request->getOptions()->set(CURLOPT_POST, true)// post method ->set(CURLOPT_POSTFIELDS, $content)// post content field ->set(CURLOPT_HTTPHEADER, $this->headers) // headers @@ -208,4 +210,22 @@ class AsyncHttpRequest implements UsageInformationAble { $this->contentType = $contentType; return $this; } + + /** + * Gets the Timeout Time + * + * @return int + */ + public function getTimeout() { + return $this->timeout; + } + + /** + * Sets the Timeout Time + * + * @param int $timeout + */ + public function setTimeout($timeout) { + $this->timeout = $timeout; + } } \ No newline at end of file diff --git a/plugins/MCTeam/Dedimania/DedimaniaPlugin.php b/plugins/MCTeam/Dedimania/DedimaniaPlugin.php index a469cd85..b2548675 100644 --- a/plugins/MCTeam/Dedimania/DedimaniaPlugin.php +++ b/plugins/MCTeam/Dedimania/DedimaniaPlugin.php @@ -40,7 +40,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene const NAME = 'Dedimania Plugin'; const MLID_DEDIMANIA = 'Dedimania.ManialinkId'; const XMLRPC_MULTICALL = 'system.multicall'; - const DEDIMANIA_URL = 'http://dedimania.net:8081/Dedimania'; + const DEDIMANIA_URL = 'http://dedimania.net:8082/Dedimania'; const DEDIMANIA_OPEN_SESSION = 'dedimania.OpenSession'; const DEDIMANIA_CHECK_SESSION = 'dedimania.CheckSession'; const DEDIMANIA_GET_RECORDS = 'dedimania.GetChallengeRecords'; @@ -152,7 +152,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $this->maniaControl->getCallbackManager()->registerCallbackListener(RecordCallback::FINISH, $this, 'handleFinishCallback'); $this->maniaControl->getTimerManager()->registerTimerListening($this, 'updateEverySecond', 1000); - $this->maniaControl->getTimerManager()->registerTimerListening($this, 'handleEveryMinute', 1000 * 60); + $this->maniaControl->getTimerManager()->registerTimerListening($this, 'handleEveryHalfMinute', 1000 * 30); $this->maniaControl->getTimerManager()->registerTimerListening($this, 'updatePlayerList', 1000 * 60 * 3); $this->maniaControl->getCommandManager()->registerCommandListener(array('dedirecs', 'dedirecords'), $this, 'showDediRecordsList', false, 'Shows a list of Dedimania records of the current map.'); @@ -198,7 +198,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene Logger::log("Try to connect on Dedimania"); if (!$data || $error) { - Logger::logError("Dedimania Error: '{$error}'"); + Logger::logError("Dedimania Error while opening session: '{$error}'"); } $data = $this->decode($data); @@ -233,6 +233,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(true); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); } @@ -299,7 +300,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL); $asyncHttpRequest->setCallable(function ($data, $error) { if ($error) { - Logger::logError('Dedimania Error: ' . $error); + Logger::logError('Dedimania Error while fetching records: ' . $error); } $data = $this->decode($data); @@ -344,6 +345,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(true); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); return true; @@ -561,7 +563,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene /** * Handle 1 Minute Callback */ - public function handleEveryMinute() { + public function handleEveryHalfMinute() { if (!$this->init) { return; } @@ -583,13 +585,17 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL); $asyncHttpRequest->setCallable(function ($data, $error) { if ($error) { - Logger::logError("Dedimania Error: " . $error); + //Reopen session in Timeout case + $this->openDedimaniaSession(); + //Logger::logError("Dedimania Error while checking session: " . $error); } $data = $this->decode($data); if (!is_array($data) || empty($data)) { return; } + //var_dump("SESSION CHECK"); + //var_dump($data); $methodResponse = $data[0]; if (xmlrpc_is_fault($methodResponse)) { @@ -611,6 +617,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene }); $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(true); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); } @@ -631,7 +638,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL); $asyncHttpRequest->setCallable(function ($data, $error) use (&$player) { if ($error) { - Logger::logError("Dedimania Error: " . $error); + Logger::logError("Dedimania Error while player connect: " . $error); } $data = $this->decode($data); @@ -658,10 +665,11 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $manialink = $this->buildManialink(); $this->maniaControl->getManialinkManager()->sendManialink($manialink, $player->login); } - }, $content, true); + }); $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(true); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); } @@ -683,7 +691,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL); $asyncHttpRequest->setCallable(function ($data, $error) { if ($error) { - Logger::logError("Dedimania Error: " . $error); + Logger::logError("Dedimania Error while player disconnect: " . $error); } $data = $this->decode($data); @@ -699,6 +707,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(true); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); } @@ -761,7 +770,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL); $asyncHttpRequest->setCallable(function ($data, $error) { if ($error) { - Logger::logError("Dedimania Error: " . $error); + Logger::logError("Dedimania Error while submitting times: " . $error); } if (self::DEDIMANIA_DEBUG) { @@ -794,6 +803,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene }); $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(false); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); } @@ -815,7 +825,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest = new AsyncHttpRequest($this->maniaControl, self::DEDIMANIA_URL); $asyncHttpRequest->setCallable(function ($data, $error) { if ($error) { - Logger::logError("Dedimania Error: " . $error); + Logger::logError("Dedimania Error while update playerlist: " . $error); } $data = $this->decode($data); @@ -831,6 +841,7 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene $asyncHttpRequest->setContent($content); $asyncHttpRequest->setCompression(true); + $asyncHttpRequest->setTimeout(500); $asyncHttpRequest->postData(); } @@ -996,8 +1007,6 @@ class DedimaniaPlugin implements CallbackListener, CommandListener, TimerListene return $string; } - //TODO some bug if no dedimania time is existing - /** * Inserts the given new Dedimania record at the proper position *