Add ping tool

This commit is contained in:
def 2014-11-24 21:16:03 +01:00
parent d7e5a7b9ab
commit 7ff73a2ee5
2 changed files with 73 additions and 1 deletions

View file

@ -319,6 +319,7 @@ function build(settings)
versionserver = Compile(settings, Collect("src/versionsrv/*.cpp"))
masterserver = Compile(settings, Collect("src/mastersrv/*.cpp"))
ping = Compile(settings, Collect("src/ping/*.cpp"))
game_shared = Compile(settings, Collect("src/game/*.cpp"), nethash, network_source)
game_client = Compile(client_settings, CollectRecursive("src/game/client/*.cpp"), client_content_source)
game_server = Compile(settings, CollectRecursive("src/game/server/*.cpp"), server_content_source)
@ -359,6 +360,9 @@ function build(settings)
masterserver_exe = Link(server_settings, "mastersrv", masterserver,
engine, zlib)
ping_exe = Link(server_settings, "ping", ping,
engine, zlib)
-- make targets
c = PseudoTarget("client".."_"..settings.config_name, client_exe, client_depends)
if string.find(settings.config_name, "sql") then
@ -371,8 +375,9 @@ function build(settings)
v = PseudoTarget("versionserver".."_"..settings.config_name, versionserver_exe)
m = PseudoTarget("masterserver".."_"..settings.config_name, masterserver_exe)
t = PseudoTarget("tools".."_"..settings.config_name, tools)
p = PseudoTarget("ping".."_"..settings.config_name, ping_exe)
all = PseudoTarget(settings.config_name, c, s, v, m, t)
all = PseudoTarget(settings.config_name, c, s, v, m, t, p)
return all
end

67
src/ping/ping.cpp Normal file
View file

@ -0,0 +1,67 @@
#include <iostream>
#include <base/system.h>
#include <base/math.h>
#include <mastersrv/mastersrv.h>
#include <engine/shared/network.h>
#include <engine/shared/packer.h>
static CNetClient g_NetOp; // main
int main(int argc, char **argv) // ignore_convention
{
NETADDR BindAddr;
BindAddr.type = NETTYPE_ALL;
g_NetOp.Open(BindAddr, 0);
if(argc != 2)
{
dbg_msg("ping", "wrong parameters");
return 1;
}
NETADDR Addr;
if (net_host_lookup(argv[1], &Addr, NETTYPE_ALL))
{
dbg_msg("ping", "host lookup failed");
return 1;
}
unsigned char Buffer[sizeof(SERVERBROWSE_GETINFO)+1];
CNetChunk Packet;
mem_copy(Buffer, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO));
int CurToken = rand() % 256;
Buffer[sizeof(SERVERBROWSE_GETINFO)] = CurToken;
Packet.m_ClientID = -1;
Packet.m_Address = Addr;
Packet.m_Flags = NETSENDFLAG_CONNLESS;
Packet.m_DataSize = sizeof(Buffer);
Packet.m_pData = Buffer;
g_NetOp.Send(&Packet);
int64 startTime = time_get();
net_socket_read_wait(g_NetOp.m_Socket, 1000000);
g_NetOp.Update();
while(g_NetOp.Recv(&Packet))
{
if(Packet.m_DataSize >= (int)sizeof(SERVERBROWSE_INFO) && mem_comp(Packet.m_pData, SERVERBROWSE_INFO, sizeof(SERVERBROWSE_INFO)) == 0)
{
// we got ze info
CUnpacker Up;
Up.Reset((unsigned char*)Packet.m_pData+sizeof(SERVERBROWSE_INFO), Packet.m_DataSize-sizeof(SERVERBROWSE_INFO));
int Token = str_toint(Up.GetString());
if(Token != CurToken)
continue;
int64 endTime = time_get();
std::cout << (double)(endTime - startTime) / 1000 << " ms" << std::endl;
}
}
}