Kart-Public/tools/masterserver/stats.cpp

148 lines
3.0 KiB
C++

// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
// Copyright (C) 2000 by DooM Legacy Team.
//
// 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 (at your option) 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.
//
//-----------------------------------------------------------------------------
#ifdef __GNUC__
#include <unistd.h>
#endif
#include <string.h> // strcat(),...
#include "common.h"
#include "ipcs.h"
#include "stats.h"
//=============================================================================
/*
** CServerStats()
*/
CServerStats::CServerStats()
{
uptime = time(NULL);
num_connections = 0;
num_http_con = 0;
num_servers = 0;
snprintf(motd, sizeof motd, "%s%s", "Welcome to the SRB2 Master Server!<br>", SERVERMOTDTEXT);
num_add = 0;
num_removal = 0;
num_retrieval = 0;
num_autoremoval = 0;
num_badconnection = 0;
for (int i = 0; i < NUMLASTSERVERS; i++)
{
strcpy(last_server[i].ip, "0.0.0.0");
strcpy(last_server[i].name, "Non-Existing SRB2 server");
strcpy(last_server[i].version, "0.0.0");
}
snprintf(version, sizeof version, "%s %s", __DATE__, __TIME__);
}
/*
** ~CServerStats()
*/
CServerStats::~CServerStats()
{
}
/*
** getUptime()
*/
const char *CServerStats::getUptime()
{
char *res = ctime(&uptime);
res[strlen(res)-1] = '\0'; // remove the '\n' at the end
return res;
}
/*
** getHours()
*/
int CServerStats::getHours()
{
return (int)(((time(NULL) - uptime)/(60*60))%24);
}
/*
** getDays()
*/
int CServerStats::getDays()
{
return (int)((time(NULL) - uptime)/(60*60*24));
}
/*
** getMotd()
*/
const char *CServerStats::getMotd()
{
return motd;
}
/*
** getLastServers()
*/
const char *CServerStats::getLastServers()
{
static char res[170*NUMLASTSERVERS];
tzset();
res[0] = '\0';
for (int i = 0; i < NUMLASTSERVERS; i++)
{
char str[170];
char *ct;
ct = ctime(&last_time[i]);
ct[strlen(ct)-1] = '\0'; // replace \n with a \0
snprintf(str, sizeof str,
"Address: %15s Name: %-31s v%-7s (%s %s)\n000043210000",
last_server[i].ip, last_server[i].name, last_server[i].version, ct, tzname[0]);
strcat(res, str);
}
return res;
}
/*
** getVersion()
*/
const char *CServerStats::getVersion()
{
return version;
}
/*
** putMotd()
*/
void CServerStats::putMotd(char *motd)
{
strcpy(this->motd, motd);
}
/*
** putLastServer():
*/
void CServerStats::putLastServer(msg_server_t *server)
{
for (int i = NUMLASTSERVERS-1; i > 0; i--)
{
memcpy(&last_server[i], &last_server[i-1],
sizeof (msg_server_t));
last_time[i] = last_time[i-1];
}
memcpy(&last_server[0], server, sizeof (msg_server_t));
last_time[0] = time(NULL);
}