Kart-Public/tools/masterserver/srvlist.h

137 lines
3.4 KiB
C
Raw Permalink Normal View History

2014-03-15 16:59:03 +00:00
// 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.
//
//-----------------------------------------------------------------------------
#ifndef SRVLIST_H
#define SRVLIST_H
#include <time.h>
enum ServerType
{
ST_PERMANENT = 0,
ST_TEMPORARY,
};
//=============================================================================
class CItem
{
friend class CList;
protected:
CItem *next;
public:
CItem();
virtual ~CItem() {}; // destructor must exist and be virtual
virtual void print() = 0;
};
//=============================================================================
class CList
{
protected:
CItem *list;
CItem *current; // the current item we are pointing on (for getfirst/getnext)
public:
CList();
virtual ~CList();
int insert(CItem *);
int remove(CItem *);
CItem *getFirst();
CItem *getNext();
void show();
};
//=============================================================================
class CInetAddr
{
protected:
char ip[16];
char port[8];
bool PortNotChanged;
public:
CInetAddr(const char *ip, const char *port);
const char *getIP();
bool setPort(const char *port);
const char *getPort();
};
//=============================================================================
class CPlayerItem : public CItem, public CInetAddr
{
friend class CPlayerList;
private:
char nickname[32];
public:
CPlayerItem(const char *ip, const char *port, const char *nickname);
void print();
char *getString();
};
//=============================================================================
class CPlayerList : public CList
{
};
//=============================================================================
#define REG_TIME_SIZE 24 //1970-00-00T00:00:00.0+00:00
#define GUID_SIZE 24-1 // format is 12700000000105000
class CServerItem : public CItem, public CInetAddr
{
friend class CServerList;
private:
char hostname[32];
char version[8]; // format is: x.yy.z (like 1.30.2 or 1.31)
CPlayerList players_list;
char reg_time[REG_TIME_SIZE];
char guid[GUID_SIZE+1];
public:
ServerType type;
time_t HeartBeat;
CServerItem(const char *ip, const char *port, const char *hostname, const char *version, ServerType type);
void print();
const char *getString();
const char *getName();
const char *getVersion();
const char *getRegtime();
const char *getGuid();
};
//=============================================================================
class CServerList : public CList
{
public:
void insertPlayer(CServerItem *server, CPlayerItem *player);
void removePlayer(CServerItem *server, CPlayerItem *player);
int insert(const char *ip, const char *port, const char *hostname, const char *version, ServerType type);
int insert(CServerItem *server);
int remove(const char *ip, const char *port, const char *hostname, const char *version, ServerType type);
int remove(CServerItem *server);
void show();
};
#endif