mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-10-31 16:06:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			573 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			573 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**#@+
 | |
|  * @version 0.1.4
 | |
|  * @since 0.1.4
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * @package POT
 | |
|  * @author Wrzasq <wrzasq@gmail.com>
 | |
|  * @copyright 2007 (C) by Wrzasq
 | |
|  * @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Wrapper for binary server status request.
 | |
|  *
 | |
|  * @package POT
 | |
|  * @property-read int $uptime Uptime.
 | |
|  * @property-read string $ip IP number.
 | |
|  * @property-read string $name Server name.
 | |
|  * @property-read int $port Server port.
 | |
|  * @property-read string $location Server physical location.
 | |
|  * @property-read string $url Website URL.
 | |
|  * @property-read string $serverVersion Server version.
 | |
|  * @property-read string $owner Owner name.
 | |
|  * @property-read string $eMail Owner's e-mail.
 | |
|  * @property-read int $onlinePlayers Players online count.
 | |
|  * @property-read int $maxPlayers Maximum allowed players count.
 | |
|  * @property-read int $playersPeak Record of players online.
 | |
|  * @property-read string $mapName Map name.
 | |
|  * @property-read string $mapAuthor Map author.
 | |
|  * @property-read int $mapWidth Map width.
 | |
|  * @property-read int $mapHeight Map height.
 | |
|  * @property-read string $motd Message Of The Day.
 | |
|  * @property-read array $players Online players list.
 | |
|  */
 | |
| class OTS_ServerStatus
 | |
| {
 | |
| /**
 | |
|  * Basic server info.
 | |
|  */
 | |
| 	const REQUEST_BASIC_SERVER_INFO = 1;
 | |
| /**
 | |
|  * Server owner info.
 | |
|  */
 | |
| 	const REQUEST_OWNER_SERVER_INFO = 2;
 | |
| /**
 | |
|  * Server extra info.
 | |
|  */
 | |
| 	const REQUEST_MISC_SERVER_INFO = 4;
 | |
| /**
 | |
|  * Players stats info.
 | |
|  */
 | |
| 	const REQUEST_PLAYERS_INFO = 8;
 | |
| /**
 | |
|  * Map info.
 | |
|  */
 | |
| 	const REQUEST_MAP_INFO = 16;
 | |
| /**
 | |
|  * Extended players info.
 | |
|  */
 | |
| 	const REQUEST_EXT_PLAYERS_INFO = 32;
 | |
| /**
 | |
|  * Player status info.
 | |
|  */
 | |
| 	const REQUEST_PLAYER_STATUS_INFO = 64;
 | |
| /**
 | |
|  * Server software info.
 | |
|  */
 | |
| 	const REQUEST_SERVER_SOFTWARE_INFO = 128;
 | |
| /**
 | |
|  * Basic server respond.
 | |
|  */
 | |
| 	const RESPOND_BASIC_SERVER_INFO = 0x10;
 | |
| /**
 | |
|  * Server owner respond.
 | |
|  */
 | |
| 	const RESPOND_OWNER_SERVER_INFO = 0x11;
 | |
| /**
 | |
|  * Server extra respond.
 | |
|  */
 | |
| 	const RESPOND_MISC_SERVER_INFO = 0x12;
 | |
| /**
 | |
|  * Players stats respond.
 | |
|  */
 | |
| 	const RESPOND_PLAYERS_INFO = 0x20;
 | |
| /**
 | |
|  * Map respond.
 | |
|  */
 | |
| 	const RESPOND_MAP_INFO = 0x30;
 | |
| /**
 | |
|  * Extended players info.
 | |
|  */
 | |
| 	const RESPOND_EXT_PLAYERS_INFO = 0x21;
 | |
| /**
 | |
|  * Player status info.
 | |
|  */
 | |
| 	const RESPOND_PLAYER_STATUS_INFO = 0x22;
 | |
| /**
 | |
|  * Server software info.
 | |
|  */
 | |
| 	const RESPOND_SERVER_SOFTWARE_INFO = 0x23;
 | |
| /**
 | |
|  * Server name.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $name;
 | |
| /**
 | |
|  * Server IP.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $ip;
 | |
| /**
 | |
|  * Server port.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $port;
 | |
| /**
 | |
|  * Owner name.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $owner;
 | |
| /**
 | |
|  * Owner's e-mail.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $eMail;
 | |
| /**
 | |
|  * Message of the day.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $motd;
 | |
| /**
 | |
|  * Server location.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $location;
 | |
| /**
 | |
|  * Website URL.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $url;
 | |
| /**
 | |
|  * Uptime.
 | |
|  *
 | |
|  * @var int
 | |
|  */
 | |
| 	private $uptime;
 | |
| /**
 | |
|  * Status version.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $version;
 | |
| /**
 | |
|  * Players online.
 | |
|  *
 | |
|  * @var int
 | |
|  */
 | |
| 	private $online;
 | |
| /**
 | |
|  * Maximum players.
 | |
|  *
 | |
|  * @var int
 | |
|  */
 | |
| 	private $max;
 | |
| /**
 | |
|  * Players peak.
 | |
|  *
 | |
|  * @var int
 | |
|  */
 | |
| 	private $peak;
 | |
| /**
 | |
|  * Map name.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $map;
 | |
| /**
 | |
|  * Map author.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $author;
 | |
| /**
 | |
|  * Map width.
 | |
|  *
 | |
|  * @var int
 | |
|  */
 | |
| 	private $width;
 | |
| /**
 | |
|  * Map height.
 | |
|  *
 | |
|  * @var int
 | |
|  */
 | |
| 	private $height;
 | |
| /**
 | |
|  * Players online list.
 | |
|  *
 | |
|  * @var array
 | |
|  */
 | |
| 	private $players = array();
 | |
| 
 | |
| /**
 | |
|  * Server software.
 | |
|  *
 | |
|  * @var string
 | |
|  */
 | |
| 	private $softwareName;
 | |
| 	private $softwareVersion;
 | |
| 	private $softwareProtocol;
 | |
| 
 | |
| /**
 | |
|  * Reads info from respond packet.
 | |
|  *
 | |
|  * @param OTS_Buffer $info Information packet.
 | |
|  */
 | |
| 	public function __construct(OTS_Buffer $info)
 | |
| 	{
 | |
| 		// skips packet length
 | |
| 		$info->getShort();
 | |
| 
 | |
| 		while( $info->isValid() )
 | |
| 		{
 | |
| 			switch( $info->getChar() )
 | |
| 			{
 | |
| 				case self::RESPOND_BASIC_SERVER_INFO:
 | |
| 					$this->name = $info->getString();
 | |
| 					$this->ip = $info->getString();
 | |
| 					$this->port = (int) $info->getString();
 | |
| 					break;
 | |
| 
 | |
| 				case self::RESPOND_OWNER_SERVER_INFO:
 | |
| 					$this->owner = $info->getString();
 | |
| 					$this->eMail = $info->getString();
 | |
| 					break;
 | |
| 
 | |
| 				case self::RESPOND_MISC_SERVER_INFO:
 | |
| 					$this->motd = $info->getString();
 | |
| 					$this->location = $info->getString();
 | |
| 					$this->url = $info->getString();
 | |
| 
 | |
| 					$uptime = $info->getLong() << 32;
 | |
| 
 | |
| 					$this->uptime += $info->getLong() + $uptime;
 | |
| 					$this->version = $info->getString();
 | |
| 					break;
 | |
| 
 | |
| 				case self::RESPOND_PLAYERS_INFO:
 | |
| 					$this->online = $info->getLong();
 | |
| 					$this->max = $info->getLong();
 | |
| 					$this->peak = $info->getLong();
 | |
| 					break;
 | |
| 
 | |
| 				case self::RESPOND_MAP_INFO:
 | |
| 					$this->map = $info->getString();
 | |
| 					$this->author = $info->getString();
 | |
| 					$this->width = $info->getShort();
 | |
| 					$this->height = $info->getShort();
 | |
| 					break;
 | |
| 
 | |
| 				case self::RESPOND_EXT_PLAYERS_INFO:
 | |
| 					$count = $info->getLong();
 | |
| 
 | |
| 					for($i = 0; $i < $count; $i++)
 | |
| 					{
 | |
| 						$name = $info->getString();
 | |
| 						$this->players[$name] = $info->getLong();
 | |
| 					}
 | |
| 					break;
 | |
| 
 | |
| 				case self::RESPOND_SERVER_SOFTWARE_INFO:
 | |
| 					$this->softwareName = $info->getString();
 | |
| 					$this->softwareVersion = $info->getString();
 | |
| 					$this->softwareProtocol = $info->getString();
 | |
| 					break;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server uptime.
 | |
|  *
 | |
|  * @return int Uptime.
 | |
|  */
 | |
| 	public function getUptime()
 | |
| 	{
 | |
| 		return $this->uptime;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server IP.
 | |
|  *
 | |
|  * @return string IP.
 | |
|  */
 | |
| 	public function getIP()
 | |
| 	{
 | |
| 		return $this->ip;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server name.
 | |
|  *
 | |
|  * @return string Name.
 | |
|  */
 | |
| 	public function getName()
 | |
| 	{
 | |
| 		return $this->name;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server port.
 | |
|  *
 | |
|  * @return int Port.
 | |
|  */
 | |
| 	public function getPort()
 | |
| 	{
 | |
| 		return $this->port;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server location.
 | |
|  *
 | |
|  * @return string Location.
 | |
|  */
 | |
| 	public function getLocation()
 | |
| 	{
 | |
| 		return $this->location;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server website.
 | |
|  *
 | |
|  * @return string Website URL.
 | |
|  */
 | |
| 	public function getURL()
 | |
| 	{
 | |
| 		return $this->url;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server version.
 | |
|  *
 | |
|  * @return string Version.
 | |
|  */
 | |
| 	public function getServerVersion()
 | |
| 	{
 | |
| 		return $this->version;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns owner name.
 | |
|  *
 | |
|  * @return string Owner name.
 | |
|  */
 | |
| 	public function getOwner()
 | |
| 	{
 | |
| 		return $this->owner;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns owner e-mail.
 | |
|  *
 | |
|  * @return string Owner e-mail.
 | |
|  */
 | |
| 	public function getEMail()
 | |
| 	{
 | |
| 		return $this->eMail;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns current amount of players online.
 | |
|  *
 | |
|  * @return int Count of players.
 | |
|  */
 | |
| 	public function getOnlinePlayers()
 | |
| 	{
 | |
| 		return $this->online;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns maximum amount of players online.
 | |
|  *
 | |
|  * @return int Maximum allowed count of players.
 | |
|  */
 | |
| 	public function getMaxPlayers()
 | |
| 	{
 | |
| 		return $this->max;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns record of online players.
 | |
|  *
 | |
|  * @return int Players online record.
 | |
|  */
 | |
| 	public function getPlayersPeak()
 | |
| 	{
 | |
| 		return $this->peak;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns map name.
 | |
|  *
 | |
|  * @return string Map name.
 | |
|  */
 | |
| 	public function getMapName()
 | |
| 	{
 | |
| 		return $this->map;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns map author.
 | |
|  *
 | |
|  * @return string Mapper name.
 | |
|  */
 | |
| 	public function getMapAuthor()
 | |
| 	{
 | |
| 		return $this->author;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns map width.
 | |
|  *
 | |
|  * @return int Map width.
 | |
|  */
 | |
| 	public function getMapWidth()
 | |
| 	{
 | |
| 		return $this->width;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns map height.
 | |
|  *
 | |
|  * @return int Map height.
 | |
|  */
 | |
| 	public function getMapHeight()
 | |
| 	{
 | |
| 		return $this->height;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns server's Message Of The Day
 | |
|  *
 | |
|  * @return string Server MOTD.
 | |
|  */
 | |
| 	public function getMOTD()
 | |
| 	{
 | |
| 		return $this->motd;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns list of players currently online.
 | |
|  *
 | |
|  * @return array List of players in format 'name' => level.
 | |
|  */
 | |
| 	public function getPlayers()
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns software name.
 | |
|  *
 | |
|  * @return string Software name.
 | |
|  */
 | |
| 	public function getSoftwareName()
 | |
| 	{
 | |
| 		return $this->softwareName;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns software version.
 | |
|  *
 | |
|  * @return string Software version.
 | |
|  */
 | |
| 	public function getSoftwareVersion()
 | |
| 	{
 | |
| 		return $this->softwareVersion;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Returns software protocol.
 | |
|  *
 | |
|  * @return string Software protocol.
 | |
|  */
 | |
| 	public function getSoftwareProtocol()
 | |
| 	{
 | |
| 		return $this->softwareProtocol;
 | |
| 	}
 | |
| 
 | |
| /**
 | |
|  * Magic PHP5 method.
 | |
|  *
 | |
|  * @param string $name Property name.
 | |
|  * @return mixed Property value.
 | |
|  * @throws OutOfBoundsException For non-supported properties.
 | |
|  */
 | |
| 	public function __get($name)
 | |
| 	{
 | |
| 		switch($name)
 | |
| 		{
 | |
| 			case 'uptime':
 | |
| 				return $this->getUptime();
 | |
| 
 | |
| 			case 'ip':
 | |
| 				return $this->getIP();
 | |
| 
 | |
| 			case 'name':
 | |
| 				return $this->getName();
 | |
| 
 | |
| 			case 'port':
 | |
| 				return $this->getPort();
 | |
| 
 | |
| 			case 'location':
 | |
| 				return $this->getLocation();
 | |
| 
 | |
| 			case 'url':
 | |
| 				return $this->getURL();
 | |
| 
 | |
| 			case 'serverVersion':
 | |
| 				return $this->getServerVersion();
 | |
| 
 | |
| 			case 'owner':
 | |
| 				return $this->getOwner();
 | |
| 
 | |
| 			case 'eMail':
 | |
| 				return $this->getEMail();
 | |
| 
 | |
| 			case 'onlinePlayers':
 | |
| 				return $this->getOnlinePlayers();
 | |
| 
 | |
| 			case 'maxPlayers':
 | |
| 				return $this->getMaxPlayers();
 | |
| 
 | |
| 			case 'playersPeak':
 | |
| 				return $this->getPlayersPeak();
 | |
| 
 | |
| 			case 'mapName':
 | |
| 				return $this->getMapName();
 | |
| 
 | |
| 			case 'mapAuthor':
 | |
| 				return $this->getMapAuthor();
 | |
| 
 | |
| 			case 'mapWidth':
 | |
| 				return $this->getMapWidth();
 | |
| 
 | |
| 			case 'mapHeight':
 | |
| 				return $this->getMapHeight();
 | |
| 
 | |
| 			case 'motd':
 | |
| 				return $this->getMOTD();
 | |
| 
 | |
| 			case 'players':
 | |
| 				return $this->getPlayers();
 | |
| 
 | |
| 			default:
 | |
| 				throw new OutOfBoundsException();
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**#@-*/
 | |
| 
 | |
| ?>
 | 
