Moved the Agents into their own repo. Kept the agent.pl just for reference
This commit is contained in:
parent
22381be29a
commit
8680a02b13
18132 changed files with 0 additions and 2569420 deletions
|
|
@ -1,139 +0,0 @@
|
|||
<?php
|
||||
/*
|
||||
*
|
||||
* OGP - Open Game Panel
|
||||
* Copyright (C) 2008 - 2018 The OGP Development Team
|
||||
*
|
||||
* http://www.opengamepanel.org/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
class MinecraftRcon
|
||||
{
|
||||
/*
|
||||
* Class written by xPaw
|
||||
*
|
||||
* Website: http://xpaw.ru
|
||||
* GitHub: https://github.com/xPaw/PHP-Minecraft-Query
|
||||
*
|
||||
* Protocol: https://developer.valvesoftware.com/wiki/Source_RCON_Protocol
|
||||
*/
|
||||
|
||||
// Sending
|
||||
const SERVERDATA_EXECCOMMAND = 2;
|
||||
const SERVERDATA_AUTH = 3;
|
||||
|
||||
// Receiving
|
||||
const SERVERDATA_RESPONSE_VALUE = 0;
|
||||
const SERVERDATA_AUTH_RESPONSE = 2;
|
||||
|
||||
private $Socket;
|
||||
private $RequestId;
|
||||
|
||||
public function __destruct( )
|
||||
{
|
||||
$this->Disconnect( );
|
||||
}
|
||||
|
||||
public function Connect( $Ip, $Port = 25575, $Password, $Timeout = 3 )
|
||||
{
|
||||
$this->RequestId = 0;
|
||||
|
||||
if( $this->Socket = FSockOpen( $Ip, (int)$Port ) )
|
||||
{
|
||||
Socket_Set_TimeOut( $this->Socket, $Timeout );
|
||||
|
||||
if( !$this->Auth( $Password ) )
|
||||
{
|
||||
$this->Disconnect( );
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function Disconnect( )
|
||||
{
|
||||
if( $this->Socket )
|
||||
{
|
||||
FClose( $this->Socket );
|
||||
|
||||
$this->Socket = null;
|
||||
}
|
||||
}
|
||||
|
||||
public function Command( $String )
|
||||
{
|
||||
if( !$this->WriteData( self :: SERVERDATA_EXECCOMMAND, $String ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$Data = $this->ReadData( );
|
||||
|
||||
if( $Data[ 'RequestId' ] < 1 || $Data[ 'Response' ] != self :: SERVERDATA_RESPONSE_VALUE )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return $Data[ 'String' ];
|
||||
}
|
||||
|
||||
private function Auth( $Password )
|
||||
{
|
||||
if( !$this->WriteData( self :: SERVERDATA_AUTH, $Password ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$Data = $this->ReadData( );
|
||||
|
||||
return $Data[ 'RequestId' ] > -1 && $Data[ 'Response' ] == self :: SERVERDATA_AUTH_RESPONSE;
|
||||
}
|
||||
|
||||
private function ReadData( )
|
||||
{
|
||||
$Packet = Array( );
|
||||
|
||||
$Size = FRead( $this->Socket, 4 );
|
||||
$Size = UnPack( 'V1Size', $Size );
|
||||
$Size = $Size[ 'Size' ];
|
||||
|
||||
// TODO: Add multiple packets (Source)
|
||||
|
||||
$Packet = FRead( $this->Socket, $Size );
|
||||
$Packet = UnPack( 'V1RequestId/V1Response/a*String/a*String2', $Packet );
|
||||
|
||||
return $Packet;
|
||||
}
|
||||
|
||||
private function WriteData( $Command, $String = "" )
|
||||
{
|
||||
// Pack the packet together
|
||||
$Data = Pack( 'VV', $this->RequestId++, $Command ) . $String . "\x00\x00\x00";
|
||||
|
||||
// Prepend packet length
|
||||
$Data = Pack( 'V', StrLen( $Data ) ) . $Data;
|
||||
|
||||
$Length = StrLen( $Data );
|
||||
|
||||
return $Length === FWrite( $this->Socket, $Data, $Length );
|
||||
}
|
||||
}
|
||||
?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue