mirror of
https://git.do.srb2.org/STJr/MasterServer.git
synced 2024-11-10 07:11:40 +00:00
137 lines
3.4 KiB
C
137 lines
3.4 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.
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#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
|