Skip to content

API em PHP para realizar requisições e extrair dados de servidores SA-MP (San Andreas Multiplayer).

License

Notifications You must be signed in to change notification settings

ocalasans/samp-query-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 

Repository files navigation

samp-query-php

samp-query-php é uma API em PHP desenvolvida para consultar e obter informações de servidores SA-MP (San Andreas Multiplayer). Esta API permite que você verifique se um servidor está online, obtenha o ping, informações básicas e detalhadas sobre o servidor, jogadores conectados e regras do servidor. A API também inclui um sistema de tentativas automáticas para garantir que os dados sejam obtidos de forma confiável.

🌐 Linguagens

📋 Sumário

🎯 Características

  • Consulta rápida e eficiente de servidores SA-MP.
  • Requisição de informações básicas e detalhadas do servidor.
  • Possibilidade de obtenção de dados sobre jogadores e regras do servidor.
  • Sistema de tentativas automático para garantir a obtenção dos dados.
  • Configuração de timeouts para conexão e resposta.
  • Fechamento automático do socket ao término da operação.
  • Suporte a múltiplos idiomas para informações do servidor.
  • Limitação personalizada para a exibição de jogadores.

🛠️ Instalação

Clone o repositório para sua máquina local:

git clone https://github.com/ocalasans/samp-query-php.git

🚀 Uso

Inclua o arquivo samp-query.php no seu projeto e instancie a classe samp_query passando o endereço IP e a porta do servidor SA-MP que deseja consultar.

Exemplo de uso básico

require 'samp-query.php';

$server = new samp_query('127.0.0.1', 7777);

if ($server->Esta_Online()) {
    echo "Servidor está online!";
    echo "Ping: " . $server->Obter_Ping() . " ms";
    
    $info = $server->Obter_Informacoes();
    print_r($info);
    
    $jogadores = $server->Obter_Jogadores_0();
    print_r($jogadores);
    
    $regras = $server->Obter_Regras();
    print_r($regras);
} else {
    echo "Servidor está offline.";
}

Exemplo com múltiplos servidores

require 'samp-query.php';

$servidores = [
    ['ip' => '127.0.0.1', 'porta' => 7777],
    ['ip' => '192.168.0.1', 'porta' => 7778],
];

foreach ($servidores as $dados) {
    $server = new samp_query($dados['ip'], $dados['porta']);
    
    if ($server->Esta_Online()) {
        echo "Servidor " . $dados['ip'] . ":" . $dados['porta'] . " está online!";
        echo "Ping: " . $server->Obter_Ping() . " ms\n";
    } else {
        echo "Servidor " . $dados['ip'] . ":" . $dados['porta'] . " está offline.\n";
    }
}

🧩 Métodos Disponíveis

Verificar se o servidor está online

public function Esta_Online()

Retorna true se o servidor estiver online, caso contrário, false. A verificação é realizada ao tentar conectar-se ao servidor e enviar um pacote inicial. Se a conexão falhar, o servidor é considerado offline.

Obter ping do servidor

public function Obter_Ping()

Retorna o ping do servidor em milissegundos, calculado com base no tempo que leva para o pacote ser enviado e a resposta ser recebida. Se o servidor estiver offline ou não puder obter o ping, retorna null.

Obter informações do servidor

public function Obter_Informacoes()

Retorna um array com informações básicas do servidor, como:

  • passworded: Indica se o servidor é protegido por senha.
  • players: Número atual de jogadores.
  • maxplayers: Número máximo de jogadores permitido.
  • hostname: Nome do servidor.
  • gamemode: Modo de jogo do servidor.
  • language: Idioma utilizado no servidor.

Este método faz uso do sistema de tentativas automáticas para garantir que os dados sejam obtidos corretamente.

Obter lista de jogadores

Lista Básica

public function Obter_Jogadores_0()

Retorna um array com a lista de jogadores conectados, contendo nickname e score (pontuação) de cada jogador. Esse método é adequado para obter uma visão geral dos jogadores conectados.

Lista Detalhada

public function Obter_Jogadores_1()

Retorna um array com informações detalhadas sobre cada jogador, incluindo playerid, nickname, score e ping. Esse método fornece dados mais profundos sobre os jogadores conectados.

Obter regras do servidor

public function Obter_Regras()

Retorna um array com as regras do servidor, onde a chave é o nome da regra e o valor é o valor associado a essa regra. Esse método também utiliza o sistema de tentativas para assegurar a obtenção dos dados.

🔍 Detalhes Técnicos

Sistema de tentativas

A API incorpora um sistema de tentativas (retryLimit) que permite tentar a obtenção de informações até três vezes antes de desistir. Isso aumenta a confiabilidade, especialmente em situações onde a conexão pode ser instável.

Timeouts configuráveis

Ao instanciar a classe samp_query, dois tipos de timeouts são configurados:

  • timeouts['connect']: Define o tempo máximo em segundos para estabelecer uma conexão com o servidor. O padrão é 1 segundo.
  • timeouts['response']: Define o tempo máximo em segundos para esperar uma resposta do servidor após o envio de um pacote. O padrão é 120 segundos que já é um tempo extremamente alto.

Esses timeouts garantem que a API não fique indefinidamente aguardando uma resposta, melhorando a eficiência.

Construção de pacotes

Os pacotes de consulta ao servidor SA-MP são construídos manualmente, utilizando o prefixo 'SAMP' seguido pelo endereço IP do servidor e pela porta. Dependendo do tipo de informação solicitada (i, c, d, r), o comando correspondente é adicionado ao pacote.

Conversão de dados

A API inclui um método privado toInt() que converte dados binários recebidos do servidor para inteiros. Esse método garante que os dados sejam manipulados corretamente, mesmo em casos de grandes valores.

private function toInt($data)

O método utiliza operações bit a bit para reconstruir o valor inteiro a partir dos dados binários, convertendo as quatro partes separadas de um número inteiro para o formato original.

🔧 Customizações e Configurações

Configurações avançadas de timeout

É possível personalizar os timeouts no momento da instância da classe samp_query. Por exemplo, para definir o tempo máximo de conexão para 5 segundos e o tempo de resposta para 60 segundos:

$server = new samp_query('127.0.0.1', 7777);
$server->setTimeouts([
    'connect' => 5,
    'response' => 60
]);

Mensagens de erro e tratamento de exceções

A API é projetada para capturar erros e falhas de conexão, retornando mensagens de erro claras em caso de falhas. Por exemplo, se um servidor não puder ser alcançado, a API retorna null para métodos como Obter_Informacoes(), Obter_Jogadores_0(), Obter_Jogadores_1() e Obter_Regras().

if ($server->Obter_Informacoes() === null) {
    echo "Não foi possível obter informações do servidor.";
}

ℹ️ Informações de contato

Instagram: ocalasans
YouTube: Calasans
Discord: Calasans
Comunidade: SA-MP Programming Community©

About

API em PHP para realizar requisições e extrair dados de servidores SA-MP (San Andreas Multiplayer).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages