Ir para conteúdo

[Arquivado]Lista Servidores - Request - Status Servidor


skynagerloas

Posts Recomendados

Olá XTibianos, tudo bem?

 

Estou formulando uma nova OT-Server List, que será desenvolvida por mim, e gostaria da interação com idéias, sugestões e críticas para melhor desenvolvimento. Acredito que a atual OT-Server list, é funcional, e já existe a anos. Devido a este motivo, gostaria de criar algo inovador, que pudesse chamar os usuários que hoje usam esta lista de servidores.

 

A Lista de Servidores conterá

  • Á Lista:
    • Irá atualizar de maneira rápida, tentarei otimizar o máximo possível.
    • Terá plugin's que poderão ser usados como iframe, em outros sites, gerados dentro da área restrita. O acesso de outras pessoas, poderão gerar pontos.
    • Terá gráfico de informações detalhadas, como Ping, Usuários Online, períodos que o servidor ficou off line e online.

  • Anunciantes:
    • Cada anunciante, poderá anunciar servidores de sua autoria e a quantidade de servidores terá influencia da quantidade de pontos.
    • O anunciante poderá ser avaliado pelos seus usuários a partir de comentários e um "curtir" ou "reprovar". Sempre acompanhado de um comentário justificando. Onde o anunciante pode, caso desejar, argumentar motivos.
    • Quando bem avaliado, e/ou qualificado. O anunciante ganhará pontos.
    • O anunciante poderá utilizar os pontos para ganhar destaque temporário na lista.
    • Cada OT-Server, terá direito a um banner, e terão concursos de melhores banners. Pensarei a respeito ainda.

  • Usuários:
    • Os usuários poderão acessar uma área restrita, onde poderá ter acesso a informações personalizadas, como uma lista de servidores favoritas.
    • Poderá avaliar, qualificar e comentar no perfil dos servidores.

  • Pontuação poderá ser utilizada de diversas formas:
    • Aumentando a lista de favoritos.
    • Destacando o servidor na lista por tempo determinado.
    • Aumentando o limite de servidores para cadastro.

  • Idéias que não sei se são possíveis ainda:
    • Interação direta do site com o jogador, montar um ranking do servidor dentro da própria lista. Com gráficos de leveis, skills e etc..

Estou aceitando todas as opiniões e idéias. E agradeço desde já.

 

 

--------------------------

 

Change Log

20/12/2012 - Modelando Banco de Dados

Editado por Sky
Link para o comentário
Compartilhar em outros sites

Caro sky, se não me engano já estava em desenvolvimento um projeto semelhante, pelo MatheusEnjoy, porem ele nunca me passou sobre o termino ou avanço do mesmo, e seria muito interessante, eu realmente não tenho conecimentos para isso, mais creio que o metodo usado deve ser em php,pois as estrutaras dos sites de servidores de tibia são em php conectando-se ao mysql e apache!

 

Poste o topico que voce viu sobre como fazer a lista e vamos ver se conseguimos desenvolver e quem mais estiver interessado so comparecer ao topico!

 

abraços!

Link para o comentário
Compartilhar em outros sites

Olá @PiabetaMan01,

 

eu atualmente sou desenvolvedor C#, e acredito que seja possível, mesmo o padrão sendo em PHP, poder ser desenvolvido em .NET, sem problemas.

 

Porém, eu preciso do método de request ao servidores, eu não sei o que perguntar para que o servidor me responda esse tipo de informações.

Editado por Sky
Link para o comentário
Compartilhar em outros sites

Olá @PiabetaMan01,

 

eu atualmente sou desenvolvedor C#, e acredito que seja possível, mesmo o padrão sendo em PHP, poder ser desenvolvido em .NET, sem problemas.

 

Porém, eu preciso do método de request ao servidores, eu não sei o que perguntar para que o servidor me responda esse tipo de informações.

 

estarei dando uma revisada e procurando sobre isso, qualquer coisa eu posto aqui!

Link para o comentário
Compartilhar em outros sites

Olá PiabetaMan01,

 

à uns 3 ou 4 meses, eu havia procurado, e achei a função em PHP que correspondia a este "request" ao servidor. Mas nem isso eu encontrei agora, esse seria o ponto de início de qualquer projeto de Lista de Servidores, com isso podemos fazer qualquer coisa.

 

Olá boa noite, cheguei em casa do trabalho,

 

então fui procurar informações sobre, baixei um WebSite, que você mesmo @PiabetaMan01 postou. Então achei as functions:

 

<?php

 

/**#@+

* @version 0.1.4

* @since 0.1.4

*/

 

/**

* @package POT

* @author Wrzasq <wrzasq@gmail.com>

* @copyright 2007 - 2008 © by Wrzasq

* @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3

*/

 

/**

* Various server status querying methods.

*

* @package POT

* @property-read OTS_InfoRespond|bool $status status() method wrapper.

* @property-read OTS_ServerStatus|bool $info Full info() method wrapper.

*/

class OTS_ServerInfo

{

/**

* Server address.

*

* @var string

*/

private $server;

 

/**

* Connection port.

*

* @var int

*/

private $port;

 

/**

* Creates handler for new server.

*

* @param string $server Server IP/domain.

* @param int $port OTServ port.

*/

public function __construct($server, $port)

{

$this->server = $server;

$this->port = $port;

}

 

/**

* Sends packet to server.

*

* @param OTS_Buffer $packet Buffer to send.

* @return OTS_Buffer|null Respond buffer (null if server is offline).

* @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.

*/

private function send(OTS_Buffer $packet)

{

// connects to server

// gives maximum 5 seconds to connect

$socket = fsockopen($this->server, $this->port, $error, $message, 5);

 

// if connected then checking statistics

if($socket)

{

// sets 5 second timeout for reading and writing

stream_set_timeout($socket, 5);

 

// creates real packet

$packet = $packet->getBuffer();

$packet = pack('v', strlen($packet) ) . $packet;

 

// sends packet with request

// 06 - length of packet, 255, 255 is the comamnd identifier, 'info' is a request

fwrite($socket, $packet);

 

// reads respond

$data = stream_get_contents($socket);

 

// closing connection to current server

fclose($socket);

 

// sometimes server returns empty info

if( empty($data) )

{

// returns offline state

return false;

}

 

return new OTS_Buffer($data);

}

 

return false;

}

 

/**

* Queries server status.

*

* <p>

* Sends 'info' packet to OTS server and return output. Returns {@link OTS_InfoRespond OTS_InfoRespond} (wrapper for XML data) with results or <var>false</var> if server is online.

* </p>

*

* @return OTS_InfoRespond|bool Respond content document (false when server is offline).

* @throws DOMException On DOM operation error.

* @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.

* @example examples/info.php info.php

* @tutorial POT/Server_status.pkg

*/

public function status()

{

// request packet

$request = new OTS_Buffer();

$request->putChar(255);

$request->putChar(255);

$request->putString('info', false);

 

$status = $this->send($request);

 

// checks if server is online

if($status)

{

// loads respond XML

$info = new OTS_InfoRespond();

$info->loadXML( $status->getBuffer() );

return $info;

}

 

// offline

return false;

}

 

/**

* Queries server information.

*

* <p>

* This method uses binary info protocol. It provides more infromation then {@link OTS_Toolbox::serverStatus() XML way}.

* </p>

*

* @param int $flags Requested info flags.

* @return OTS_ServerStatus|bool Respond content document (false when server is offline).

* @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.

* @example examples/server.php info.php

* @tutorial POT/Server_status.pkg

*/

public function info($flags)

{

// request packet

$request = new OTS_Buffer();

$request->putChar(255);

$request->putChar(1);

$request->putShort($flags);

 

$status = $this->send($request);

 

// checks if server is online

if($status)

{

// loads respond

return new OTS_ServerStatus($status);

}

 

// offline

return false;

}

 

/**

* Checks player online status.

*

* <p>

* This method uses binary info protocol.

* </p>

*

* @param string $name Player name.

* @return bool True if player is online, false if player or server is online.

* @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.

* @example examples/server.php info.php

* @tutorial POT/Server_status.pkg

*/

public function playerStatus($name)

{

// request packet

$request = new OTS_Buffer();

$request->putChar(255);

$request->putChar(1);

$request->putShort(OTS_ServerStatus::REQUEST_PLAYER_STATUS_INFO);

$request->putString($name);

 

$status = $this->send($request);

 

// checks if server is online

if($status)

{

$status->getChar();

return (bool) $status->getChar();

}

 

// offline

return false;

}

 

/**

* Magic PHP5 method.

*

* @param string $name Property name.

* @param mixed $value Property value.

* @throws OutOfBoundsException For non-supported properties.

* @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.

*/

public function __get($name)

{

switch($name)

{

case 'status':

return $this->status();

 

case 'info':

return $this->info(OTS_ServerStatus::REQUEST_BASIC_SERVER_INFO | OTS_ServerStatus::REQUEST_OWNER_SERVER_INFO | OTS_ServerStatus::REQUEST_MISC_SERVER_INFO | OTS_ServerStatus::REQUEST_PLAYERS_INFO | OTS_ServerStatus::REQUEST_MAP_INFO | OTS_ServerStatus::REQUEST_PLAYER_STATUS_INFO);

 

default:

throw new OutOfBoundsException();

}

}

}

 

/**#@-*/

 

?>

 

Link para o comentário
Compartilhar em outros sites

Obrigado Piabeta

 

 

 

void ProtocolStatus::onRecvFirstMessage(NetworkMessage& msg)

{

std::map<uint32_t, int64_t>::const_iterator it = ipConnectMap.find(getIP());

if(it != ipConnectMap.end())

{

if(OTSYS_TIME() < it->second + g_config.getNumber(ConfigManager::STATUSQUERY_TIMEOUT))

{

getConnection()->closeConnection();

return;

}

}

 

ipConnectMap[getIP()] = OTSYS_TIME();

switch(msg.GetByte())

{

//XML info protocol

case 0xFF:

{

if(msg.GetRaw() == "info")

{

if(OutputMessage* output = OutputMessagePool::getInstance()->getOutputMessage(this, false))

{

TRACK_MESSAGE(output);

if(Status* status = Status::getInstance())

{

std::string str = status->getStatusString();

output->AddBytes(str.c_str(), str.size());

}

 

setRawMessages(true); // we dont want the size header, nor encryption

OutputMessagePool::getInstance()->send(output);

}

}

break;

}

 

//Another ServerInfo protocol

case 0x01:

{

uint32_t requestedInfo = msg.GetU16(); //Only a Byte is necessary, though we could add new infos here

if(OutputMessage* output = OutputMessagePool::getInstance()->getOutputMessage(this, false))

{

TRACK_MESSAGE(output);

if(Status* status = Status::getInstance())

status->getInfo(requestedInfo, output, msg);

 

OutputMessagePool::getInstance()->send(output);

}

break;

}

 

default:

break;

}

 

getConnection()->closeConnection();

}

 

Encontrei onde é que ele responde, agora eu já tenho algumas informações importantes!

Editado por Sky
Link para o comentário
Compartilhar em outros sites

Então,

 

passei o DIA TODO testando, e estou caminhando... eu precisava o contato de alguém que tenha um OT-Server online para eu realizar alguns testes. Pois até então eu pego um servidor qualquer na otserv list, e testo. Porém, isso abre margem de erro, para qualquer coisa que esteja acontecendo no momento e que possa interferir nos meus testes.

 

Atualmente o que está acontecendo é eu envio a requisição para o Servidor, e ele fecha a conexão.

Editado por Sky
Link para o comentário
Compartilhar em outros sites

Bom.. vou dar um tempo para minha cabeça, estive 3 dias direto mexendo nisso, e o que eu consegui até agora foi me comunicar com o servidor, porém, não sei exatamente como receber as informações, e também não tenho certeza se ele está me enviando uma resposta. Pois esta vindo uma string vazia.

Link para o comentário
Compartilhar em outros sites

Etapa numero 1, concluída! Está era, na minha opinião a etapa mais fundamental de todas... consegui resgatar as informações do servidor. De agora em diante, é só manipulação de dados. Estarei informando caso haja novidades! E, sim! eu consegui! :)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...