SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Scripting Help

Reply
 
Thread Tools Display Modes
Old 14/03/2016, 12:06 PM   #1
Tween73
Banned
 
Join Date: Aug 2014
Posts: 104
Reputation: 0
Question [PHP] Help Online and Offline

[PHP] Help Online and Offline

Quote:
<?php
require "SampQueryAPI.php";

$serverIP = "127.0.0.1";
$serverPort = 7777;

try
{
$rQuery = new QueryServer( $serverIP, $serverPort );

$aInformation = $rQuery->GetInfo( );
$aServerRules = $rQuery->GetRules( );
$aBasicPlayer = $rQuery->GetPlayers( );
$aTotalPlayers = $rQuery->GetDetailedPlayers( );

$rQuery->Close( );
}
catch (QueryServerException $pError)
{}

?>
Quote:
<span id="rols2" style="color:Red"> OFFLINE </span><span id="rols2" style="color:Red">ONLINE</span>

Tween73 is offline   Reply With Quote
Old 14/03/2016, 12:15 PM   #2
SaltySandy
Big Clucker
 
SaltySandy's Avatar
 
Join Date: Feb 2014
Location: The Netherlands
Posts: 181
Reputation: 36
Default Re: [PHP] Help Online and Offline

query the server; make a case in PHP to see if it's online and use the PHP 'IF' statement for either online or offline
__________________
What to put here?
SaltySandy is offline   Reply With Quote
Old 14/03/2016, 12:58 PM   #3
Tween73
Banned
 
Join Date: Aug 2014
Posts: 104
Reputation: 0
Default Re: [PHP] Help Online and Offline

SampQueryAPI.php?

Quote:
<?php
/*********************************************
*
* SA-MP Query Server Version 0.3
*
* This class provides you with an easy to use interface to query
* your SA-MP 0.2 servers. Usage is simple, but has changed a bit
* since the last version, so be sure to check out the examples
* that come along with this script. It is updated with some of
* the new SA-MP 0.2 query-techniques that can be used.
*
* Author: Peter Beverloo
* peter@dmx-network.com
* Ex SA-MP Developer
*
* Updated: Wouter van Eekelen
* wouter.van.eekelen@serverffs.com
* SA-MP Betatester
*********************************************/

class QueryServer
{
// Private variables used for the query-ing.
private $szServerIP;
private $iPort;
private $rSocketID;

private $bStatus;

// The __construct function gets called automatically
// by PHP once the class gets initialized.
function __construct( $szServerIP, $iPort )
{
$this->szServerIP = $this->VerifyAddress( $szServerIP );
$this->iPort = $iPort;

if (empty( $this->szServerIP ) || !is_numeric( $iPort )) {
throw new QueryServerException( 'Either the ip-address or the port isn\'t filled in correctly.' );
}

$this->rSocketID = @fsockopen( 'udp://' . $this->szServerIP, $iPort, $iErrorNo, $szErrorStr, 5 );
if (!$this->rSocketID) {
throw new QueryServerException( 'Cannot connect to the server: ' . $szErrorStr );
}

socket_set_timeout( $this->rSocketID, 0, 500000 );
$this->bStatus = true;
}

// The VerifyAddress function verifies the given hostname/
// IP address and returns the actual IP Address.
function VerifyAddress( $szServerIP )
{
if (ip2long( $szServerIP ) !== false &&
long2ip( ip2long( $szServerIP ) ) == $szServerIP ) {
return $szServerIP;
}

$szAddress = gethostbyname( $szServerIP );
if ($szAddress == $szServerIP) {
return "";
}

return $szAddress;
}

// The SendPacket function sends a packet to the server which
// requests information, based on the type of packet send.
function SendPacket( $cPacket )
{
$szPacket = 'SAMP';
$aIpChunks = explode( '.', $this->szServerIP );

foreach( $aIpChunks as $szChunk ) {
$szPacket .= chr( $szChunk );
}

$szPacket .= chr( $this->iPort & 0xFF );
$szPacket .= chr( $this->iPort >> 8 & 0xFF );
$szPacket .= $cPacket;

return fwrite( $this->rSocketID, $szPacket, strlen( $szPacket ) );
}

// The GetPacket() function returns a specific number of bytes
// read from the socket. This uses a special way of getting stuff.
function GetPacket( $iBytes )
{
$iResponse = fread( $this->rSocketID, $iBytes );
if ($iResponse === false) {
throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );
}

$iLength = ord( $iResponse );
if ($iLength > 0)
return fread( $this->rSocketID, $iLength );

return "";
}

// After we're done, the connection needs to be closed using
// the Close() function. Otherwise stuff might go wrong.
function Close( )
{
if ($this->rSocketID !== false) {
fclose( $this->rSocketID );
}
}

// A little function that's needed to properly convert the
// four bytes we're recieving to integers to an actual PHP
// integer. ord() can't handle value's higher then 255.
function toInteger( $szData )
{
$iInteger = 0;

$iInteger += ( ord( @$szData[ 0 ] ) );
$iInteger += ( ord( @$szData[ 1 ] ) << 8 );
$iInteger += ( ord( @$szData[ 2 ] ) << 16 );
$iInteger += ( ord( @$szData[ 3 ] ) << 24 );

if( $iInteger >= 4294967294 )
$iInteger -= 4294967296;

return $iInteger;
}

// The GetInfo() function returns basic information about the
// server, like the hostname, number of players online etc.
function GetInfo( )
{
if ($this->SendPacket('i') === false) {
throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );
}

$szFirstData = fread( $this->rSocketID, 4 );
if (empty( $szFirstData ) || $szFirstData != 'SAMP') {
throw new QueryServerException( 'The server at ' . $this->szServerIP . ' is not an SA-MP Server.' );
}

// Pop the first seven characters returned.
fread( $this->rSocketID, 7 );

return array (
'Password' => ord( fread( $this->rSocketID, 1 ) ),
'Players' => $this->toInteger( fread( $this->rSocketID, 2 ) ),
'MaxPlayers' => $this->toInteger( fread( $this->rSocketID, 2 ) ),
'Hostname' => $this->GetPacket( 4 ),
'Gamemode' => $this->GetPacket( 4 ),
'Map' => $this->GetPacket( 4 )
);
}

// The GetRules() function returns the rules which are set
// on the server, e.g. the gravity, version etcetera.
function GetRules( )
{
if ($this->SendPacket('r') === false) {
throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );
}

// Pop the first 11 bytes from the response;
fread( $this->rSocketID, 11 );

$iRuleCount = ord( fread( $this->rSocketID, 2 ) );
$aReturnArray = array( );

for( $i = 0; $i < $iRuleCount; $i ++ ) {
$szRuleName = $this->GetPacket( 1 );
$aReturnArray[ $szRuleName ] = $this->GetPacket( 1 );
}

return $aReturnArray;
}

// The GetPlayers() function is pretty much simelar to the
// detailed function, but faster and contains less information.
function GetPlayers( )
{
if ($this->SendPacket('c') === false) {
throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );
}

// Again, pop the first eleven bytes send;
fread( $this->rSocketID, 11 );

$iPlayerCount = ord( fread( $this->rSocketID, 2 ) );
$aReturnArray = array( );

for( $i = 0; $i < $iPlayerCount; $i ++ )
{
$aReturnArray[ ] = array (
'Nickname' => $this->GetPacket( 1 ),
'Score' => $this->toInteger( fread( $this->rSocketID, 4 ) )
);
}

return $aReturnArray;
}

// The GetDetailedPlayers() function returns the player list,
// but in a detailed form inclusing the score and the ping.
function GetDetailedPlayers( )
{
if ($this->SendPacket('d') === false) {
throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );
}

// Skip the first 11 bytes of the response;
fread( $this->rSocketID, 11 );

$iPlayerCount = ord( fread( $this->rSocketID, 2 ) );
$aReturnArray = array( );

for( $i = 0; $i < $iPlayerCount; $i ++ ) {
$aReturnArray[ ] = array(
'PlayerID' => $this->toInteger( fread( $this->rSocketID, 1 ) ),
'Nickname' => $this->GetPacket( 1 ),
'Score' => $this->toInteger( fread( $this->rSocketID, 4 ) ),
'Ping' => $this->toInteger( fread( $this->rSocketID, 4 ) )
);
}

return $aReturnArray;
}

function RCON($rcon, $command)
{
echo 'Password '.$rcon.' with '.$command;
if ($this->SendPacket('x '.$rcon.' '.$command) === false) {
throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );
}

// Pop the first 11 bytes from the response;
$aReturnArray = fread( $this->rSocketID, 11 );

echo fread( $this->rSocketID, 11 );

return $aReturnArray;
}

}

/*********************************************
*
* The QueryServerException is used to throw errors when querying
* a specific server. That way we force the user to use proper
* error-handling, and preferably even a try-/catch statement.
*
**********************************************/

class QueryServerException extends Exception
{
// The actual error message is stored in this variable.
private $szMessage;

// Again, the __construct function gets called as soon
// as the exception is being thrown, in here we copy the message.
function __construct( $szMessage )
{
$this->szMessage = $szMessage;
}

// In order to read the exception being thrown, we have
// a .NET-like toString() function, which returns the message.
function toString( )
{
return $this->szMessage;
}
}
?>
Tween73 is offline   Reply With Quote
Old 14/03/2016, 01:16 PM   #4
BroZeus
High-roller
 
BroZeus's Avatar
 
Join Date: Jan 2014
Location: India
Posts: 1,398
Reputation: 173
Default Re: [PHP] Help Online and Offline

PHP Code:
<?php
    
require "SampQueryAPI.php";    
    
$serverIP "127.0.0.1";
    
$serverPort 7777;    
    try
    {
        
$rQuery = new QueryServer$serverIP$serverPort );
        echo 
'<span id="rols2" style="color:Green"> ONLINE </span>';// ONLINE
        
        
$aInformation $rQuery->GetInfo( );
        
$aServerRules $rQuery->GetRules( );
        
$aBasicPlayer $rQuery->GetPlayers( );
        
$aTotalPlayers $rQuery->GetDetailedPlayers( );
        
        
$rQuery->Close( );
    }
    catch (
QueryServerException $pError)
    {
        echo 
'<span id="rols2" style="color:Red"> OFFLINE </span>';// OFF-LINE
    
}
    
?>
__________________


"Be the change that you wish to see in the world."

Check out my Github profile!
BroZeus is offline   Reply With Quote
Old 14/03/2016, 02:13 PM   #5
Tween73
Banned
 
Join Date: Aug 2014
Posts: 104
Reputation: 0
Default Re: [PHP] Help Online and Offline

Thank you
Tween73 is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Offline and Online Members ShoortyFl Scripting Help 20 26/06/2015 05:51 PM
Help factions app [online/offline] KingPersona Scripting Help 1 14/05/2015 12:23 AM
Command Online AND Offline? Blackazur Scripting Help 3 16/07/2014 06:13 PM
Server is online/offline KrylonKrystaks Server Support 9 02/02/2010 02:04 PM
how can i know if my server is online or offline? sandisk125 Server Support 7 04/08/2009 06:09 AM


All times are GMT. The time now is 02:02 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.