added mapmanager communicationmethods
This commit is contained in:
parent
70805de32f
commit
cc7c36f3d8
@ -16,6 +16,47 @@ interface CommunicationMethods {
|
|||||||
*/
|
*/
|
||||||
const RESTART_MANIA_CONTROL = "ManiaControl.Restart";
|
const RESTART_MANIA_CONTROL = "ManiaControl.Restart";
|
||||||
|
|
||||||
|
/** Adds a Map from Mania Exchange to the Server
|
||||||
|
* Required Parameters
|
||||||
|
* - mxId
|
||||||
|
* (no success returning yet because of asynchronously of adding)
|
||||||
|
*/
|
||||||
|
const ADD_MAP = "MapManager.AddMap";
|
||||||
|
|
||||||
|
/** Removes a Map from the Server
|
||||||
|
* Required Parameters
|
||||||
|
* - mapUid
|
||||||
|
* Optional Parameters
|
||||||
|
* - displayMessage (default true)
|
||||||
|
* - eraseMapFile (default false)
|
||||||
|
*/
|
||||||
|
const REMOVE_MAP = "MapManager.RemoveMap";
|
||||||
|
|
||||||
|
/** Updates a Map over Mania Exchange
|
||||||
|
* Required Parameters
|
||||||
|
* - mapUid
|
||||||
|
* (no success returning yet because of asynchronously of adding)
|
||||||
|
*/
|
||||||
|
const UPDATE_MAP = "MapManager.UpdateMap";
|
||||||
|
|
||||||
|
/** Gets the current Map
|
||||||
|
* Required Parameters
|
||||||
|
* - mxId
|
||||||
|
* OR
|
||||||
|
* - mapUid
|
||||||
|
*/
|
||||||
|
const GET_CURRENT_MAP = "MapManager.GetCurrentMap";
|
||||||
|
|
||||||
|
/** Gets the specific Map
|
||||||
|
* no Parameters
|
||||||
|
*/
|
||||||
|
const GET_MAP = "MapManager.GetMap";
|
||||||
|
|
||||||
|
/** Gets the current Map List
|
||||||
|
* no Parameters
|
||||||
|
*/
|
||||||
|
const GET_MAP_LIST = "MapManager.GetMapList";
|
||||||
|
|
||||||
/** Gets Mania Control PlayerList
|
/** Gets Mania Control PlayerList
|
||||||
* no Parameters
|
* no Parameters
|
||||||
*/
|
*/
|
||||||
|
@ -6,6 +6,9 @@ use ManiaControl\Admin\AuthenticationManager;
|
|||||||
use ManiaControl\Callbacks\CallbackListener;
|
use ManiaControl\Callbacks\CallbackListener;
|
||||||
use ManiaControl\Callbacks\CallbackManager;
|
use ManiaControl\Callbacks\CallbackManager;
|
||||||
use ManiaControl\Callbacks\Callbacks;
|
use ManiaControl\Callbacks\Callbacks;
|
||||||
|
use ManiaControl\Communication\CommunicationAnswer;
|
||||||
|
use ManiaControl\Communication\CommunicationListener;
|
||||||
|
use ManiaControl\Communication\CommunicationMethods;
|
||||||
use ManiaControl\Files\FileUtil;
|
use ManiaControl\Files\FileUtil;
|
||||||
use ManiaControl\Logger;
|
use ManiaControl\Logger;
|
||||||
use ManiaControl\ManiaControl;
|
use ManiaControl\ManiaControl;
|
||||||
@ -30,7 +33,7 @@ use Maniaplanet\DedicatedServer\Xmlrpc\UnavailableFeatureException;
|
|||||||
* @copyright 2014-2015 ManiaControl Team
|
* @copyright 2014-2015 ManiaControl Team
|
||||||
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
* @license http://www.gnu.org/licenses/ GNU General Public License, Version 3
|
||||||
*/
|
*/
|
||||||
class MapManager implements CallbackListener {
|
class MapManager implements CallbackListener, CommunicationListener {
|
||||||
/*
|
/*
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@ -135,6 +138,71 @@ class MapManager implements CallbackListener {
|
|||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_AUTOSAVE_MAPLIST, true);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_AUTOSAVE_MAPLIST, true);
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MAPLIST_FILE, "MatchSettings/tracklist.txt");
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_MAPLIST_FILE, "MatchSettings/tracklist.txt");
|
||||||
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WRITE_OWN_MAPLIST_FILE, false);
|
$this->maniaControl->getSettingManager()->initSetting($this, self::SETTING_WRITE_OWN_MAPLIST_FILE, false);
|
||||||
|
|
||||||
|
// Communication Listenings
|
||||||
|
$this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_CURRENT_MAP, $this, function ($data) {
|
||||||
|
return new CommunicationAnswer($this->getCurrentMap());
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_MAP_LIST, $this, function ($data) {
|
||||||
|
return new CommunicationAnswer($this->getMapList());
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::GET_MAP, $this, function ($data) {
|
||||||
|
if (!is_object($data)) {
|
||||||
|
return new CommunicationAnswer("Error in provided Data", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (property_exists($data, "mxId")) {
|
||||||
|
return new CommunicationAnswer($this->getMapByMxId($data->mxId));
|
||||||
|
} else if (property_exists($data, "mapUid")) {
|
||||||
|
return new CommunicationAnswer($this->getMapByUid($data->mxUid));
|
||||||
|
} else {
|
||||||
|
return new CommunicationAnswer("No mxId or mapUid provided.", true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::ADD_MAP, $this, function ($data) {
|
||||||
|
if (!is_object($data) || property_exists($data, "mxId")) {
|
||||||
|
return new CommunicationAnswer("No valid mxId provided.", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->getMapByMxId($data->mxId)) {
|
||||||
|
return new CommunicationAnswer("Map not found.", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->addMapFromMx($data->mxId, null);
|
||||||
|
|
||||||
|
return new CommunicationAnswer();
|
||||||
|
});
|
||||||
|
|
||||||
|
$this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::REMOVE_MAP, $this, function ($data) {
|
||||||
|
if (!is_object($data) || property_exists($data, "mapUid")) {
|
||||||
|
return new CommunicationAnswer("No valid mapUid provided.", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$erase = false;
|
||||||
|
if (property_exists($data, "eraseMapFile")) {
|
||||||
|
$erase = $data->eraseMapFile;
|
||||||
|
}
|
||||||
|
$showMessage = true;
|
||||||
|
if (property_exists($data, "showChatMessage")) {
|
||||||
|
$showMessage = $data->showChatMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
$success = $this->removeMap(null, $data->mapUid, $erase, $showMessage);
|
||||||
|
return new CommunicationAnswer(array("success" => $success));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$this->maniaControl->getCommunicationManager()->registerCommunicationListener(CommunicationMethods::UPDATE_MAP, $this, function ($data) {
|
||||||
|
if (!is_object($data) || property_exists($data, "mapUid")) {
|
||||||
|
return new CommunicationAnswer("No valid mapUid provided.", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->updateMap(null, $data->mapUid);
|
||||||
|
return new CommunicationAnswer();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -213,14 +281,16 @@ class MapManager implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Update a Map from Mania Exchange
|
* Update a Map from Mania Exchange
|
||||||
*
|
*
|
||||||
* @param Player $admin
|
* @param Player|null $admin
|
||||||
* @param string $uid
|
* @param string $uid
|
||||||
*/
|
*/
|
||||||
public function updateMap(Player $admin, $uid) {
|
public function updateMap($admin, $uid) {
|
||||||
$this->updateMapTimestamp($uid);
|
$this->updateMapTimestamp($uid);
|
||||||
|
|
||||||
if (!isset($uid) || !isset($this->maps[$uid])) {
|
if (!isset($uid) || !isset($this->maps[$uid])) {
|
||||||
|
if ($admin) {
|
||||||
$this->maniaControl->getChat()->sendError("Error updating Map: Unknown UID '{$uid}'!", $admin);
|
$this->maniaControl->getChat()->sendError("Error updating Map: Unknown UID '{$uid}'!", $admin);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +299,11 @@ class MapManager implements CallbackListener {
|
|||||||
|
|
||||||
$mxId = $map->mx->id;
|
$mxId = $map->mx->id;
|
||||||
$this->removeMap($admin, $uid, true, false);
|
$this->removeMap($admin, $uid, true, false);
|
||||||
|
if ($admin) {
|
||||||
$this->addMapFromMx($mxId, $admin->login, true);
|
$this->addMapFromMx($mxId, $admin->login, true);
|
||||||
|
} else {
|
||||||
|
$this->addMapFromMx($mxId, null, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -263,15 +337,18 @@ class MapManager implements CallbackListener {
|
|||||||
/**
|
/**
|
||||||
* Remove a Map
|
* Remove a Map
|
||||||
*
|
*
|
||||||
* @param Player $admin
|
* @param Player|null $admin
|
||||||
* @param string $uid
|
* @param string $uid
|
||||||
* @param bool $eraseFile
|
* @param bool $eraseFile
|
||||||
* @param bool $message
|
* @param bool $message
|
||||||
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function removeMap(Player $admin, $uid, $eraseFile = false, $message = true) {
|
public function removeMap($admin, $uid, $eraseFile = false, $message = true) {
|
||||||
if (!isset($this->maps[$uid])) {
|
if (!isset($this->maps[$uid])) {
|
||||||
|
if ($admin) {
|
||||||
$this->maniaControl->getChat()->sendError('Map does not exist!', $admin);
|
$this->maniaControl->getChat()->sendError('Map does not exist!', $admin);
|
||||||
return;
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var Map $map */
|
/** @var Map $map */
|
||||||
@ -296,15 +373,18 @@ class MapManager implements CallbackListener {
|
|||||||
if ($eraseFile) {
|
if ($eraseFile) {
|
||||||
// Check if ManiaControl can even write to the maps dir
|
// Check if ManiaControl can even write to the maps dir
|
||||||
$mapDir = $this->maniaControl->getClient()->getMapsDirectory();
|
$mapDir = $this->maniaControl->getClient()->getMapsDirectory();
|
||||||
if ($this->maniaControl->getServer()->checkAccess($mapDir)
|
if ($this->maniaControl->getServer()->checkAccess($mapDir)) {
|
||||||
) {
|
|
||||||
// Delete map file
|
// Delete map file
|
||||||
if (!@unlink($mapDir . $map->fileName)) {
|
if (!@unlink($mapDir . $map->fileName)) {
|
||||||
|
if ($admin) {
|
||||||
$this->maniaControl->getChat()->sendError("Couldn't erase the map file.", $admin);
|
$this->maniaControl->getChat()->sendError("Couldn't erase the map file.", $admin);
|
||||||
|
}
|
||||||
$eraseFile = false;
|
$eraseFile = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if ($admin) {
|
||||||
$this->maniaControl->getChat()->sendError("Couldn't erase the map file (no access).", $admin);
|
$this->maniaControl->getChat()->sendError("Couldn't erase the map file (no access).", $admin);
|
||||||
|
}
|
||||||
$eraseFile = false;
|
$eraseFile = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,6 +396,8 @@ class MapManager implements CallbackListener {
|
|||||||
$this->maniaControl->getChat()->sendSuccess($message);
|
$this->maniaControl->getChat()->sendSuccess($message);
|
||||||
Logger::logInfo($message, true);
|
Logger::logInfo($message, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -342,6 +424,7 @@ class MapManager implements CallbackListener {
|
|||||||
* @param int $mapId
|
* @param int $mapId
|
||||||
* @param string $login
|
* @param string $login
|
||||||
* @param bool $update
|
* @param bool $update
|
||||||
|
* @param bool $displayMessage
|
||||||
*/
|
*/
|
||||||
public function addMapFromMx($mapId, $login, $update = false) {
|
public function addMapFromMx($mapId, $login, $update = false) {
|
||||||
if (is_numeric($mapId)) {
|
if (is_numeric($mapId)) {
|
||||||
@ -350,8 +433,10 @@ class MapManager implements CallbackListener {
|
|||||||
&$login, &$update
|
&$login, &$update
|
||||||
) {
|
) {
|
||||||
if (!$mapInfo || !isset($mapInfo->uploaded)) {
|
if (!$mapInfo || !isset($mapInfo->uploaded)) {
|
||||||
|
if ($login) {
|
||||||
// Invalid id
|
// Invalid id
|
||||||
$this->maniaControl->getChat()->sendError('Invalid MX-Id!', $login);
|
$this->maniaControl->getChat()->sendError('Invalid MX-Id!', $login);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -360,14 +445,17 @@ class MapManager implements CallbackListener {
|
|||||||
&$login, &$mapInfo, &$update
|
&$login, &$mapInfo, &$update
|
||||||
) {
|
) {
|
||||||
if (!$file || $error) {
|
if (!$file || $error) {
|
||||||
|
if ($login) {
|
||||||
// Download error
|
// Download error
|
||||||
$this->maniaControl->getChat()->sendError("Download failed: '{$error}'!", $login);
|
$this->maniaControl->getChat()->sendError("Download failed: '{$error}'!", $login);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$this->processMapFile($file, $mapInfo, $login, $update);
|
$this->processMapFile($file, $mapInfo, $login, $update);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -522,10 +610,8 @@ class MapManager implements CallbackListener {
|
|||||||
$this->maniaControl->getCallbackManager()->triggerCallback(self::CB_MAPS_UPDATED);
|
$this->maniaControl->getCallbackManager()->triggerCallback(self::CB_MAPS_UPDATED);
|
||||||
|
|
||||||
// Write MapList
|
// Write MapList
|
||||||
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_AUTOSAVE_MAPLIST)
|
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_AUTOSAVE_MAPLIST)) {
|
||||||
) {
|
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WRITE_OWN_MAPLIST_FILE)) {
|
||||||
if ($this->maniaControl->getSettingManager()->getSettingValue($this, self::SETTING_WRITE_OWN_MAPLIST_FILE)
|
|
||||||
) {
|
|
||||||
$serverLogin = $this->maniaControl->getServer()->login;
|
$serverLogin = $this->maniaControl->getServer()->login;
|
||||||
$matchSettingsFileName = "MatchSettings/{$serverLogin}.txt";
|
$matchSettingsFileName = "MatchSettings/{$serverLogin}.txt";
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user