dedicated server api update (reverted from commit 77a53b282c)

This commit is contained in:
kremsy 2014-05-08 19:32:14 +02:00
parent 77a53b282c
commit aefa91fc15
49 changed files with 2373 additions and 2012 deletions

View File

@ -52,3 +52,5 @@ abstract class AbstractStructure
return $out; return $out;
} }
} }
?>

View File

@ -4,7 +4,6 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class Bill extends AbstractStructure class Bill extends AbstractStructure
@ -16,10 +15,8 @@ class Bill extends AbstractStructure
const STATE_REFUSED = 5; const STATE_REFUSED = 5;
const STATE_ERROR = 6; const STATE_ERROR = 6;
/** @var int */
public $state; public $state;
/** @var string */
public $stateName; public $stateName;
/** @var int */
public $transactionId; public $transactionId;
} }
?>

View File

@ -1,20 +1,18 @@
<?php <?php
/**
* ManiaPlanet dedicated server Xml-RPC client
*
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/
/**
* @version $Revision: $:
* @author $Author: $:
* @date $Date: $:
*/
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class Command extends AbstractStructure class Command extends AbstractStructure
{ {
/** @var string */
public $name; public $name;
/** @var string */
public $desc; public $desc;
/** @var string */
public $type; public $type;
/** @var string */
public $default; public $default;
} }
?>

View File

@ -4,7 +4,6 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class GameInfos extends AbstractStructure class GameInfos extends AbstractStructure
@ -20,52 +19,29 @@ class GameInfos extends AbstractStructure
const GAMEMODE_CUP = 5; const GAMEMODE_CUP = 5;
const GAMEMODE_STUNTS = 6; const GAMEMODE_STUNTS = 6;
/** @var int */
public $gameMode; public $gameMode;
/** @var string */
public $scriptName; public $scriptName;
/** @var int */
public $nbMaps; public $nbMaps;
/** @var int */
public $chatTime; public $chatTime;
/** @var int */
public $finishTimeout; public $finishTimeout;
/** @var int */
public $allWarmUpDuration; public $allWarmUpDuration;
/** @var bool */
public $disableRespawn; public $disableRespawn;
/** @var int */
public $forceShowAllOpponents; public $forceShowAllOpponents;
/** @var int */
public $roundsPointsLimit; public $roundsPointsLimit;
/** @var int */
public $roundsForcedLaps; public $roundsForcedLaps;
/** @var bool */
public $roundsUseNewRules; public $roundsUseNewRules;
/** @var int */
public $roundsPointsLimitNewRules; public $roundsPointsLimitNewRules;
/** @var int */
public $teamPointsLimit; public $teamPointsLimit;
/** @var int */
public $teamMaxPoints; public $teamMaxPoints;
/** @var bool */
public $teamUseNewRules; public $teamUseNewRules;
/** @var int */
public $teamPointsLimitNewRules; public $teamPointsLimitNewRules;
/** @var int */
public $timeAttackLimit; public $timeAttackLimit;
/** @var int */
public $timeAttackSynchStartPeriod; public $timeAttackSynchStartPeriod;
/** @var int */
public $lapsNbLaps; public $lapsNbLaps;
/** @var int */
public $lapsTimeLimit; public $lapsTimeLimit;
/** @var int */
public $cupPointsLimit; public $cupPointsLimit;
/** @var int */
public $cupRoundsPerMap; public $cupRoundsPerMap;
/** @var int */
public $cupNbWinners; public $cupNbWinners;
/** @var int */
public $cupWarmUpDuration; public $cupWarmUpDuration;
} }
?>

View File

@ -4,17 +4,14 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class LobbyInfo extends AbstractStructure class LobbyInfo extends AbstractStructure
{ {
/** var bool */
public $isLobby; public $isLobby;
/** var int */
public $lobbyPlayers; public $lobbyPlayers;
/** var int */
public $lobbyMaxPlayers; public $lobbyMaxPlayers;
/** var float */
public $lobbyPlayersLevel; public $lobbyPlayersLevel;
} }
?>

View File

@ -4,41 +4,24 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class Map extends AbstractStructure class Map extends AbstractStructure
{ {
/** var string */
public $uId; public $uId;
/** var string */
public $name; public $name;
/** var string */
public $fileName; public $fileName;
/** var string */
public $author; public $author;
/** var string */
public $environnement; public $environnement;
/** var string */
public $mood; public $mood;
/** var int */
public $bronzeTime; public $bronzeTime;
/** var int */
public $silverTime; public $silverTime;
/** var int */
public $goldTime; public $goldTime;
/** var int */
public $authorTime; public $authorTime;
/** var int */
public $copperPrice; public $copperPrice;
/** var bool */
public $lapRace; public $lapRace;
/** var int */
public $nbLaps; public $nbLaps;
/** var int */
public $nbCheckpoints; public $nbCheckpoints;
/** var string */
public $mapType; public $mapType;
/** var string */
public $mapStyle; public $mapStyle;
} }

View File

@ -4,13 +4,15 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class Mod extends AbstractStructure class Mod extends AbstractStructure
{ {
/** var string */
public $env; public $env;
/** var string */
public $url; public $url;
function toArray()
{
return array('Env'=>$this->env,'Url'=>$this->url);
}
} }

View File

@ -4,15 +4,11 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class Music extends AbstractStructure class Music extends AbstractStructure
{ {
/** var bool */
public $override; public $override;
/** var string */
public $url; public $url;
/** var string */
public $file; public $file;
} }

View File

@ -4,34 +4,24 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class NetworkStats extends AbstractStructure class NetworkStats extends AbstractStructure
{ {
/** @var int */
public $uptime; public $uptime;
/** @var int */
public $nbrConnection; public $nbrConnection;
/** @var int */
public $meanConnectionTime; public $meanConnectionTime;
/** @var int */
public $meanNbrPlayer; public $meanNbrPlayer;
/** @var int */
public $recvNetRate; public $recvNetRate;
/** @var int */
public $sendNetRate; public $sendNetRate;
/** @var int */
public $totalReceivingSize; public $totalReceivingSize;
/** @var int */
public $totalSendingSize; public $totalSendingSize;
/** @var PlayerNetInfo[] */
public $playerNetInfos; public $playerNetInfos;
static public function fromArray($array) static public function fromArray($array)
{ {
$object = parent::fromArray($array); $object = parent::fromArray($array);
$object->playerNetInfos = PlayerNetInfo::fromArrayOfArray($object->playerNetInfos); $object->playerNetInfos = Player::fromArrayOfArray($object->playerNetInfos);
return $object; return $object;
} }
} }

View File

@ -8,6 +8,90 @@ namespace Maniaplanet\DedicatedServer\Structures;
class Player extends AbstractStructure class Player extends AbstractStructure
{ {
/** @var string */ public $playerId;
public $login; public $login;
public $nickName;
public $teamId;
public $path;
public $language;
public $clientVersion;
public $clientName;
public $iPAddress;
public $downloadRate;
public $uploadRate;
public $isSpectator;
public $isInOfficialMode;
public $avatar;
public $skins;
public $ladderStats;
public $hoursSinceZoneInscription;
public $onlineRights;
public $rank;
public $bestTime;
public $bestCheckpoints;
public $score;
public $nbrLapsFinished;
public $ladderScore;
public $stateUpdateLatency;
public $stateUpdatePeriod;
public $latestNetworkActivity;
public $packetLossRate;
public $spectatorStatus;
public $ladderRanking;
public $flags;
public $isConnected = true;
public $allies = array();
public $clubLink;
//Flags details
public $forceSpectator;
public $isReferee;
public $isPodiumReady;
public $isUsingStereoscopy;
public $isManagedByAnOtherServer;
public $isServer;
public $hasPlayerSlot;
public $isBroadcasting;
public $hasJoinedGame;
//SpectatorStatus details
public $spectator;
public $temporarySpectator;
public $pureSpectator;
public $autoTarget;
public $currentTargetId;
function getArrayFromPath()
{
return explode('|', $this->path);
}
/**
* @return Player
*/
static public function fromArray($array)
{
$object = parent::fromArray($array);
$object->skins = Skin::fromArrayOfArray($object->skins);
//Detail flags
$object->forceSpectator = $object->flags % 10; // 0, 1 or 2
$object->isReferee = (bool) (intval($object->flags / 10) % 10);
$object->isPodiumReady = (bool) (intval($object->flags / 100) % 10);
$object->isUsingStereoscopy = (bool) (intval($object->flags / 1000) % 10);
$object->isManagedByAnOtherServer = (bool) (intval($object->flags / 10000) % 10);
$object->isServer = (bool) (intval($object->flags / 100000) % 10);
$object->hasPlayerSlot = (bool) (intval($object->flags / 1000000) % 10);
$object->isBroadcasting = (bool) (intval($object->flags / 10000000) % 10);
$object->hasJoinedGame = (bool) (intval($object->flags / 100000000) % 10);
//Details spectatorStatus
$object->spectator = (bool) ($object->spectatorStatus % 10);
$object->temporarySpectator = (bool) (intval($object->spectatorStatus / 10) % 10);
$object->pureSpectator = (bool) (intval($object->spectatorStatus / 100) % 10);
$object->autoTarget = (bool) (intval($object->spectatorStatus / 1000) % 10);
$object->currentTargetId = intval($object->spectatorStatus / 10000);
return $object;
}
} }
?>

View File

@ -9,24 +9,29 @@ namespace Maniaplanet\DedicatedServer\Structures;
class ScriptInfo extends AbstractStructure class ScriptInfo extends AbstractStructure
{ {
/** @var string */
public $name; public $name;
/** @var string */
public $compatibleMapTypes; public $compatibleMapTypes;
/** @var string */
public $description; public $description;
/** @var string */
public $version; public $version;
/** @var ScriptSettings[] */
public $paramDescs = array(); public $paramDescs = array();
/** @var Command[] */
public $commandDescs = array(); public $commandDescs = array();
static public function fromArray($array) static public function fromArray($array)
{ {
$object = parent::fromArray($array); $object = parent::fromArray($array);
$object->paramDescs = ScriptSettings::fromArrayOfArray($object->paramDescs);
$object->commandDescs = Command::fromArrayOfArray($object->commandDescs); if($object->paramDescs)
{
$object->paramDescs = ScriptSettings::fromArrayOfArray($object->paramDescs);
}
if($object->commandDescs)
{
$object->commandDescs = Command::fromArrayOfArray($object->commandDescs);
}
return $object; return $object;
} }
} }
?>

View File

@ -7,14 +7,14 @@
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class ScriptSettings extends AbstractStructure final class ScriptSettings extends AbstractStructure
{ {
/** @var string */
public $name; public $name;
/** @var string */
public $desc; public $desc;
/** @var string */
public $type; public $type;
/** @var string */
public $default; public $default;
} }
?>

View File

@ -9,66 +9,36 @@ namespace Maniaplanet\DedicatedServer\Structures;
class ServerOptions extends AbstractStructure class ServerOptions extends AbstractStructure
{ {
/** @var string */
public $name; public $name;
/** @var string */
public $comment; public $comment;
/** @var string */
public $password; public $password;
/** @var string */
public $passwordForSpectator; public $passwordForSpectator;
/** @var int */
public $hideServer; public $hideServer;
/** @var int */
public $currentMaxPlayers; public $currentMaxPlayers;
/** @var int */
public $nextMaxPlayers; public $nextMaxPlayers;
/** @var int */
public $currentMaxSpectators; public $currentMaxSpectators;
/** @var int */
public $nextMaxSpectators; public $nextMaxSpectators;
/** @var bool */
public $isP2PUpload; public $isP2PUpload;
/** @var bool */
public $isP2PDownload; public $isP2PDownload;
/** @var bool */
public $currentLadderMode; public $currentLadderMode;
/** @var int */
public $nextLadderMode; public $nextLadderMode;
/** @var float */
public $ladderServerLimitMax; public $ladderServerLimitMax;
/** @var float */
public $ladderServerLimitMin; public $ladderServerLimitMin;
/** @var int */
public $currentVehicleNetQuality; public $currentVehicleNetQuality;
/** @var int */
public $nextVehicleNetQuality; public $nextVehicleNetQuality;
/** @var int */
public $currentCallVoteTimeOut; public $currentCallVoteTimeOut;
/** @var int */
public $nextCallVoteTimeOut; public $nextCallVoteTimeOut;
/** @var float */
public $callVoteRatio; public $callVoteRatio;
/** @var bool */
public $allowMapDownload; public $allowMapDownload;
/** @var bool */
public $autoSaveReplays; public $autoSaveReplays;
/** @var bool */
public $autoSaveValidationReplays; public $autoSaveValidationReplays;
/** @var string */
public $refereePassword; public $refereePassword;
/** @var int */
public $refereeMode; public $refereeMode;
/** @var bool */
public $currentUseChangingValidationSeed; public $currentUseChangingValidationSeed;
/** @var bool */ public $useChangingValidationSeed;
public $nextUseChangingValidationSeed; public $nextUseChangingValidationSeed;
/** @var int */
public $clientInputsMaxLatency; public $clientInputsMaxLatency;
/** @var bool */
public $keepPlayerSlots; public $keepPlayerSlots;
/** @var bool */
public $disableHorns; public $disableHorns;
/** @var bool */
public $disableServiceAnnounces; public $disableServiceAnnounces;
} }

View File

@ -9,15 +9,8 @@ namespace Maniaplanet\DedicatedServer\Structures;
class Skin extends AbstractStructure class Skin extends AbstractStructure
{ {
/** @var string */ public $orig;
public $environnement; public $name;
/** @var FileDesc */ public $checksum;
public $packDesc; public $url;
static function fromArray($array)
{
$object = parent::fromArray($array);
$object->packDesc = FileDesc::fromArray($object->packDesc);
return $object;
}
} }

View File

@ -4,7 +4,6 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class Status extends AbstractStructure class Status extends AbstractStructure
@ -16,8 +15,6 @@ class Status extends AbstractStructure
const PLAY = 4; const PLAY = 4;
const EXITING = 6; const EXITING = 6;
/** @var int */
public $code; public $code;
/** @var string */
public $name; public $name;
} }

View File

@ -4,29 +4,19 @@
* *
* @license http://www.gnu.org/licenses/lgpl.html LGPL License 3 * @license http://www.gnu.org/licenses/lgpl.html LGPL License 3
*/ */
namespace Maniaplanet\DedicatedServer\Structures; namespace Maniaplanet\DedicatedServer\Structures;
class SystemInfos extends AbstractStructure class SystemInfos extends AbstractStructure
{ {
/** @var string */
public $publishedIp; public $publishedIp;
/** @var int */
public $port; public $port;
/** @var int */
public $p2PPort; public $p2PPort;
/** @var string */
public $titleId; public $titleId;
/** @var string */
public $serverLogin; public $serverLogin;
/** @var int */
public $serverPlayerId; public $serverPlayerId;
/** @var int */
public $connectionDownloadRate; public $connectionDownloadRate;
/** @var int */
public $connectionUploadRate; public $connectionUploadRate;
/** @var bool */
public $isServer; public $isServer;
/** @var bool */
public $isDedicated; public $isDedicated;
} }
?>

View File

@ -9,20 +9,14 @@ namespace Maniaplanet\DedicatedServer\Structures;
class Team extends AbstractStructure class Team extends AbstractStructure
{ {
/** @var string */
public $name; public $name;
/** @var string */
public $zonePath; public $zonePath;
/** @var string */
public $city; public $city;
/** @var string */
public $emblemUrl; public $emblemUrl;
/** @var float */
public $huePrimary; public $huePrimary;
/** @var float */
public $hueSecondary; public $hueSecondary;
/** @var string */
public $rGB; public $rGB;
/** @var string */
public $clubLinkUrl; public $clubLinkUrl;
} }
?>

View File

@ -9,14 +9,10 @@ namespace Maniaplanet\DedicatedServer\Structures;
class Version extends AbstractStructure class Version extends AbstractStructure
{ {
/** @var string */
public $name; public $name;
/** @var string */
public $titleId; public $titleId;
/** @var string */
public $version; public $version;
/** @var string */
public $build; public $build;
/** @var string */
public $apiVersion; public $apiVersion;
} }
?>

View File

@ -14,31 +14,9 @@ class Vote extends AbstractStructure
const STATE_PASSED = 'VotePassed'; const STATE_PASSED = 'VotePassed';
const STATE_FAILED = 'VoteFailed'; const STATE_FAILED = 'VoteFailed';
/** @var string */
public $status; public $status;
/** @var string */
public $callerLogin; public $callerLogin;
/** @var string */
public $cmdName; public $cmdName;
/** @var mixed[] */
public $cmdParam; public $cmdParam;
/**
* @param string $cmdName
* @param mixed[] $cmdParam
*/
function __construct($cmdName='', $cmdParam=array())
{
$this->cmdName = $cmdName;
$this->cmdParam = $cmdParam;
}
/**
* @return bool
*/
function isValid()
{
return is_string($this->cmdName)
&& is_array($this->cmdParam);
}
} }
?>

View File

@ -18,40 +18,14 @@ class VoteRatio extends AbstractStructure
const COMMAND_KICK = 'Kick'; const COMMAND_KICK = 'Kick';
const COMMAND_BAN = 'Ban'; const COMMAND_BAN = 'Ban';
/** @var string '*' for default */
public $command; public $command;
/** @var string Empty to match all votes for the command */
public $param; public $param;
/** @var float Must be in range [0,1] or -1 to disable */
public $ratio; public $ratio;
/** public function __construct($command = null, $ratio = null)
* @param string $command
* @param float $ratio
*/
public function __construct($command = '', $ratio = 0.)
{ {
$this->command = $command; $this->command = $command;
$this->ratio = $ratio; $this->ratio = $ratio;
$this->param = '';
}
/**
* @return bool
*/
function isValid()
{
return is_string($this->command)
&& is_string($this->param)
&& self::isRatio($this->ratio);
}
/**
* @param float $ratio
* @return bool
*/
static function isRatio($ratio)
{
return is_float($ratio) && ($ratio === -1. || ($ratio >= 0. && $ratio <= 1.));
} }
} }
?>

View File

@ -19,12 +19,6 @@ class Base64
{ {
$this->scalar = $data; $this->scalar = $data;
} }
/**
* @return string
*/
function __toString()
{
return $this->scalar;
}
} }
?>

View File

@ -8,3 +8,5 @@
namespace Maniaplanet\DedicatedServer\Xmlrpc; namespace Maniaplanet\DedicatedServer\Xmlrpc;
class Exception extends \Exception {} class Exception extends \Exception {}
?>

View File

@ -57,3 +57,5 @@ class MapNotCompatibleOrCompleteException extends FaultException{}
class LadderModeUnknownException extends FaultException{} class LadderModeUnknownException extends FaultException{}
class PlayerAlreadyIgnoredException extends FaultException{} class PlayerAlreadyIgnoredException extends FaultException{}
class PlayerNotIgnoredException extends FaultException{} class PlayerNotIgnoredException extends FaultException{}
?>

View File

@ -17,6 +17,7 @@ class GbxRemote
private $socket; private $socket;
private $timeouts = array( private $timeouts = array(
'open' => 5,
'read' => 5000, 'read' => 5000,
'write' => 5000 'write' => 5000
); );
@ -28,12 +29,13 @@ class GbxRemote
/** /**
* @param string $host * @param string $host
* @param int $port * @param int $port
* @param int $timeout Timeout when opening connection * @param int[string] $timeouts Override default timeouts for 'open' (in s), 'read' (in ms) and 'write' (in ms) socket operations
*/ */
function __construct($host, $port, $timeout = 5) function __construct($host, $port, $timeouts = array())
{ {
$this->requestHandle = (int) 0x80000000; $this->requestHandle = (int) 0x80000000;
$this->connect($host, $port, $timeout); $this->timeouts = array_merge($this->timeouts, $timeouts);
$this->connect($host, $port);
} }
function __destruct() function __destruct()
@ -43,10 +45,10 @@ class GbxRemote
/** /**
* Change timeouts * Change timeouts
* @param int $read read timeout (in ms), 0 to leave unchanged * @param int $read read timeout (in ms), null or 0 to leave unchanged
* @param int $write write timeout (in ms), 0 to leave unchanged * @param int $write write timeout (in ms), null or 0 to leave unchanged
*/ */
function setTimeouts($read=0, $write=0) function setTimeouts($read=null, $write=null)
{ {
if($read) if($read)
$this->timeouts['read'] = $read; $this->timeouts['read'] = $read;
@ -66,12 +68,12 @@ class GbxRemote
/** /**
* @param string $host * @param string $host
* @param int $port * @param int $port
* @param int $timeout
* @throws TransportException * @throws TransportException
*/ */
private function connect($host, $port, $timeout) private function connect($host, $port)
{ {
$this->socket = @fsockopen($host, $port, $errno, $errstr, $timeout); $this->socket = @fsockopen($host, $port, $errno, $errstr, $this->timeouts['open']);
if(!$this->socket) if(!$this->socket)
throw new TransportException('Cannot open socket', TransportException::NOT_INITIALIZED); throw new TransportException('Cannot open socket', TransportException::NOT_INITIALIZED);
@ -112,13 +114,12 @@ class GbxRemote
if(strlen($xml) > self::MAX_REQUEST_SIZE-8) if(strlen($xml) > self::MAX_REQUEST_SIZE-8)
{ {
if($method != 'system.multicall' || count($args[0]) < 2) if($method != 'system.multicall' || count($args) < 2)
throw new MessageException('Request too large', MessageException::REQUEST_TOO_LARGE); throw new MessageException('Request too large', MessageException::REQUEST_TOO_LARGE);
$mid = count($args[0]) >> 1; $mid = count($args) >> 1;
$res1 = $this->query('system.multicall', array(array_slice($args[0], 0, $mid))); $this->query('system.multicall', array_slice($args, 0, $mid));
$res2 = $this->query('system.multicall', array(array_slice($args[0], $mid))); $this->query('system.multicall', array_slice($args, $mid));
return array_merge($res1, $res2);
} }
$this->writeMessage($xml); $this->writeMessage($xml);
@ -150,7 +151,7 @@ class GbxRemote
$call = array_shift($this->multicallBuffer); $call = array_shift($this->multicallBuffer);
return $this->query($call['methodName'], $call['params']); return $this->query($call['methodName'], $call['params']);
default: default:
$result = $this->query('system.multicall', array($this->multicallBuffer)); $result = $this->query('system.multicall', $this->multicallBuffer);
$this->multicallBuffer = array(); $this->multicallBuffer = array();
return $result; return $result;
} }
@ -184,9 +185,9 @@ class GbxRemote
*/ */
private function flush($waitResponse=false) private function flush($waitResponse=false)
{ {
$r = array($this->socket); $r=array($this->socket);
$w = null; $w=null;
$e = null; $e=null;
$n = @stream_select($r, $w, $e, 0); $n = @stream_select($r, $w, $e, 0);
while($waitResponse || $n > 0) while($waitResponse || $n > 0)
{ {
@ -204,8 +205,12 @@ class GbxRemote
$this->callbacksBuffer[] = $value; $this->callbacksBuffer[] = $value;
} }
if(!$waitResponse) if(!$waitResponse){
$r=array($this->socket);
$w=null;
$e=null;
$n = @stream_select($r, $w, $e, 0); $n = @stream_select($r, $w, $e, 0);
}
}; };
} }
@ -305,3 +310,5 @@ class MessageException extends Exception
const REQUEST_TOO_LARGE = 1; const REQUEST_TOO_LARGE = 1;
const RESPONSE_TOO_LARGE = 2; const RESPONSE_TOO_LARGE = 2;
} }
?>

View File

@ -22,12 +22,9 @@ if(extension_loaded('xmlrpc'))
* @param mixed[] $args * @param mixed[] $args
* @return string * @return string
*/ */
static function encode($method, $args, $escape=true) static function encode($method, $args)
{ {
$opts = self::$options; return xmlrpc_encode_request($method, $args, self::$options);
if(!$escape)
$opts['escaping'] = array();
return xmlrpc_encode_request($method, $args, $opts);
} }
/** /**
@ -43,7 +40,7 @@ if(extension_loaded('xmlrpc'))
if($method === null) if($method === null)
{ {
if(is_array($value) && xmlrpc_is_fault($value)) if(is_array($value) && @xmlrpc_is_fault($value))
return array('fault', $value); return array('fault', $value);
return array('response', $value); return array('response', $value);
} }
@ -62,80 +59,55 @@ else
* @param mixed[] $args * @param mixed[] $args
* @return string * @return string
*/ */
static function encode($method, $args, $escape=true) static function encode($method, $args)
{ {
$xml = '<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>'.self::escape($method, $escape).'</methodName>'; $xml = '<?xml version="1.0" encoding="utf-8"?><methodCall><methodName><![CDATA['.$method.']]></methodName><params>';
if(!$args)
return $xml.'<params/></methodCall>';
$xml .= '<params>';
foreach($args as $arg) foreach($args as $arg)
$xml .= '<param><value>'.self::encodeValue($arg, $escape).'</value></param>'; $xml .= '<param><value>'.self::encodeValue($arg).'</value></param>';
return $xml.'</params></methodCall>'; $xml .= '</params></methodCall>';
return $xml;
} }
/** /**
* @param mixed $v * @param mixed $v
* @return string * @return string
*/ */
private static function encodeValue($v, $escape=true) private static function encodeValue($v)
{ {
switch(gettype($v)) switch(gettype($v))
{ {
case 'boolean': case 'boolean':
return '<boolean>'.self::escape((int) $v, $escape).'</boolean>'; return '<boolean><![CDATA['.((int) $v).']]></boolean>';
case 'integer': case 'integer':
return '<int>'.self::escape($v, $escape).'</int>'; return '<int><![CDATA['.$v.']]></int>';
case 'double': case 'double':
return '<double>'.self::escape($v, $escape).'</double>'; return '<double><![CDATA['.$v.']]></double>';
case 'string': case 'string':
case 'NULL': return '<string><![CDATA['.$v.']]></string>';
if(!$v)
return '<string/>';
return '<string>'.self::escape($v, $escape).'</string>';
case 'object': case 'object':
if($v instanceof Base64) if($v instanceof Base64)
{ return '<base64><![CDATA['.base64_encode($v->scalar).']]></base64>';
if(!$v->scalar)
return '<base64/>';
return '<base64>'.self::escape(base64_encode($v->scalar), $escape).'</base64>';
}
if($v instanceof \DateTime) if($v instanceof \DateTime)
return '<dateTime.iso8601>'.self::escape($v->format(self::DATE_FORMAT), $escape).'</dateTime.iso8601>'; return '<dateTime.iso8601><![CDATA['.$v->format(self::DATE_FORMAT).']]></dateTime.iso8601>';
$v = get_object_vars($v); $v = get_object_vars($v);
// fallthrough // fallthrough
case 'array': case 'array':
$return = ''; $return = '';
// empty array case
if(!$v)
return '<array><data/></array>';
// pure array case // pure array case
if(array_keys($v) === range(0, count($v) - 1)) if(array_keys($v) === range(0, count($v) - 1))
{ {
foreach($v as $item) foreach($v as $item)
$return .= '<value>'.self::encodeValue($item, $escape).'</value>'; $return .= '<value>'.self::encodeValue($item).'</value>';
return '<array><data>'.$return.'</data></array>'; return '<array><data>'.$return.'</data></array>';
} }
// else it's a struct // else it's a struct
foreach($v as $name => $value) foreach($v as $name => $value)
$return .= '<member><name>'.self::escape($name, $escape).'</name><value>'.self::encodeValue($value, $escape).'</value></member>'; $return .= '<member><name><![CDATA['.$name.']]></name><value>'.self::encodeValue($value).'</value></member>';
return '<struct>'.$return.'</struct>'; return '<struct>'.$return.'</struct>';
} }
return ''; return '';
} }
/**
* @param string $str
* @param bool $escape
* @return string
*/
private static function escape($str, $escape=true)
{
if($escape)
return '<![CDATA['.$str.']]>';
return $str;
}
/** /**
* @param string $message * @param string $message
* @return mixed * @return mixed
@ -170,7 +142,7 @@ else
switch($elt->getName()) switch($elt->getName())
{ {
case 'boolean': case 'boolean':
return (bool) (int) $elt; return (bool) $elt;
case 'i4': case 'i4':
case 'int': case 'int':
return (int) $elt; return (int) $elt;
@ -198,3 +170,5 @@ else
} }
class ParseException extends Exception {} class ParseException extends Exception {}
?>

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1,2 @@
<?php
unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1,2 @@
<?php
unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -173,13 +173,24 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
} }
/* Disable Standard Votes */ /* Disable Standard Votes */
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_BAN, -1.); $array["Command"] = VoteRatio::COMMAND_BAN;
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_KICK, -1.); $array["Param"] = "";
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_RESTART_MAP, -1.); $array["Ratio"] = (float)-1;
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_TEAM_BALANCE, -1.); $ratioArray[] = $array;
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_NEXT_MAP, -1.);
$this->maniaControl->client->setCallVoteRatios($ratioArray, false); $array["Command"] = VoteRatio::COMMAND_KICK;
$ratioArray[] = $array;
$array["Command"] = VoteRatio::COMMAND_RESTART_MAP;
$ratioArray[] = $array;
$array["Command"] = VoteRatio::COMMAND_TEAM_BALANCE;
$ratioArray[] = $array;
$array["Command"] = VoteRatio::COMMAND_NEXT_MAP;
$ratioArray[] = $array;
$this->maniaControl->client->setCallVoteRatiosEx(false, $ratioArray);
$this->constructMenu(); $this->constructMenu();
return true; return true;
@ -375,13 +386,20 @@ class CustomVotesPlugin implements CommandListener, CallbackListener, ManialinkP
//Enable Standard Votes //Enable Standard Votes
$defaultRatio = $this->maniaControl->client->getCallVoteRatio(); $defaultRatio = $this->maniaControl->client->getCallVoteRatio();
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_BAN, $defaultRatio); $array["Command"] = VoteRatio::COMMAND_BAN;
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_KICK, $defaultRatio); $array["Param"] = "";
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_RESTART_MAP, $defaultRatio); $array["Ratio"] = (float)$defaultRatio;
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_TEAM_BALANCE, $defaultRatio); $ratioArray[] = $array;
$ratioArray[] = new VoteRatio(VoteRatio::COMMAND_NEXT_MAP, $defaultRatio); $array["Command"] = VoteRatio::COMMAND_KICK;
$ratioArray[] = $array;
$array["Command"] = VoteRatio::COMMAND_RESTART_MAP;
$ratioArray[] = $array;
$array["Command"] = VoteRatio::COMMAND_TEAM_BALANCE;
$ratioArray[] = $array;
$array["Command"] = VoteRatio::COMMAND_NEXT_MAP;
$ratioArray[] = $array;
$this->maniaControl->client->setCallVoteRatios($ratioArray, false); $this->maniaControl->client->setCallVoteRatiosEx(false, $ratioArray);
$this->destroyVote(); $this->destroyVote();
$this->maniaControl->manialinkManager->hideManialink(self::MLID_ICON); $this->maniaControl->manialinkManager->hideManialink(self::MLID_ICON);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -276,7 +276,6 @@ class QueuePlugin implements CallbackListener, ManialinkPageAnswerListener, Time
* @param Player $player * @param Player $player
*/ */
public function handleManiaLinkAnswerAdd(array $chatCallback, Player $player) { public function handleManiaLinkAnswerAdd(array $chatCallback, Player $player) {
$this->maniaControl->log('handleManiaLinkAnswerAdd by ' . $player->login);
$this->addPlayerToQueue($player); $this->addPlayerToQueue($player);
} }
@ -287,7 +286,6 @@ class QueuePlugin implements CallbackListener, ManialinkPageAnswerListener, Time
* @param Player $player * @param Player $player
*/ */
public function handleManiaLinkAnswerRemove(array $chatCallback, Player $player) { public function handleManiaLinkAnswerRemove(array $chatCallback, Player $player) {
$this->maniaControl->log('handleManiaLinkAnswerRemove by ' . $player->login);
$this->removePlayerFromQueue($player->login); $this->removePlayerFromQueue($player->login);
$this->showJoinQueueWidget($player); $this->showJoinQueueWidget($player);
$this->sendChatMessage('$<$fff' . $player->nickname . '$> has left the queue!'); $this->sendChatMessage('$<$fff' . $player->nickname . '$> has left the queue!');

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);

View File

@ -0,0 +1 @@
<?php unlink(__FILE__);