/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** 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 3 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.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
/******************************************************************************
*
* FILE
* $Archive: /Commando/Code/WWOnline/WOLServer.h $
*
* DESCRIPTION
* These classes encapsulate a Westwood Online Server.
*
* This is a base class. Derived classes include (but not necessarily limited to)
* ChatServer, GameResultsServer, LadderServer, and WDTServer.
*
* Server primarily repackages the WOL Server struct
*
* PROGRAMMER
* $Author: Denzil_l $
*
* VERSION INFO
* $Revision: 11 $
* $Modtime: 1/11/02 5:40p $
*
******************************************************************************/
#ifndef __WOLSERVER_H__
#define __WOLSERVER_H__
#include "RefCounted.h"
#include "RefPtr.h"
#include "WOLString.h"
#include
namespace WOL
{
#include
}
namespace WWOnline {
class ServerData :
public RefCounted
{
public:
inline WOL::Server& GetData(void)
{return mData;}
inline const int GetTimeZone(void) const
{return mData.timezone;}
inline const float GetLongitude(void) const
{return mData.longitude;}
inline const float GetLattitude(void) const
{return mData.lattitude;}
protected:
ServerData(const WOL::Server&);
virtual ~ServerData();
WOL::Server mData;
};
// base class for chat and game servers
class IRCServerData :
public ServerData
{
public:
static RefPtr Create(const WOL::Server&);
inline const char* GetName(void) const
{return mServerName;}
inline bool IsGameServer(void) const
{return mIsGameServer;}
inline bool HasLanguageCode(void) const
{return mHasLanguageCode;}
inline bool MatchesLanguageCode(void) const
{return mMatchesLanguageCode;}
protected:
IRCServerData(const WOL::Server&);
virtual ~IRCServerData()
{}
private:
StringClass mServerName;
bool mIsGameServer;
bool mMatchesLanguageCode;
bool mHasLanguageCode;
};
// base class for non-chat/non-game servers
class HostPortServerData :
public ServerData
{
public:
inline const char* GetName(void) const
{return (const char*)mData.name;}
inline const char* GetHostAddress(void) const
{return mHostAddress;}
inline unsigned int GetPort(void) const
{return mHostPort;}
protected:
HostPortServerData(const WOL::Server&);
virtual ~HostPortServerData()
{}
private:
StringClass mHostAddress;
unsigned int mHostPort;
};
class LadderServerData :
public HostPortServerData
{
public:
static RefPtr Create(const WOL::Server&);
private:
LadderServerData(const WOL::Server&);
virtual ~LadderServerData()
{}
LadderServerData(const LadderServerData&);
const LadderServerData& operator=(const LadderServerData&);
};
class GameResultsServerData :
public HostPortServerData
{
public:
static RefPtr Create(const WOL::Server&);
private:
GameResultsServerData(const WOL::Server&);
virtual ~GameResultsServerData()
{}
GameResultsServerData(const GameResultsServerData&);
const GameResultsServerData& operator=(const GameResultsServerData&);
};
class WDTServerData :
public HostPortServerData
{
public:
static RefPtr Create(const WOL::Server&);
private:
WDTServerData(const WOL::Server&);
virtual ~WDTServerData()
{}
WDTServerData(const WDTServerData&);
const WDTServerData& operator=(const WDTServerData&);
};
class MGLServerData :
public HostPortServerData
{
public:
static RefPtr Create(const WOL::Server&);
private:
MGLServerData(const WOL::Server&);
virtual ~MGLServerData()
{}
MGLServerData(const MGLServerData&);
const MGLServerData& operator=(const MGLServerData&);
};
class PingServerData :
public HostPortServerData
{
public:
static RefPtr Create(const WOL::Server&);
void SetPingTime(int time);
inline int GetPingTime(void) const
{return mPingTime;}
protected:
PingServerData(const WOL::Server&);
virtual ~PingServerData()
{}
// Prevent copy and assignment
PingServerData(const PingServerData&);
const PingServerData& operator=(const PingServerData&);
private:
int mPingTime;
};
class ServerError
{
public:
ServerError(int code, const char* description, unsigned long data = 0) :
mCode(code),
mDescription(description),
mData(data)
{}
inline int GetErrorCode(void)
{return mCode;}
inline const wchar_t* GetDescription(void) const
{return WOLSTRING(mDescription);}
inline unsigned int GetData(void) const
{return mData;}
private:
ServerError(const ServerError&);
const ServerError& operator=(const ServerError&);
int mCode;
StringClass mDescription;
unsigned long mData;
};
} // namespace WWOnline
#endif // __WOLSERVER_H__