/*-------------------------------------------------------------------------
client.h
Per client stuff on lobby side
Owner:
Copyright 1986-2000 Microsoft Corporation, All Rights Reserved
*-----------------------------------------------------------------------*/
#ifndef _CLIENT_H_
#define _CLIENT_H_
// There shld be a one-to-one mapping between connections on the servers session and CFLServer objects,
// but there's not, since each connection can (for now) actually support more than one game).
// CFLServer is more of a server "game" than a server "connection"
class CFLClient : public IObject
{
public:
CFLClient(CFMConnection * pcnxn) :
m_dwID(c_dwID),
m_pcnxn(pcnxn)
{
assert(pcnxn);
m_pcnxn->SetPrivateData((DWORD) this); // set up two-way link between connection and this
}
~CFLClient()
{
m_pcnxn->SetPrivateData(0); // disconnect two-way link between connection and this
}
bool IsValidThisPtr() // this
{
bool fValid = this && (c_dwID == m_dwID);
assert (fValid); // this should only be false if either a bug in the client, or hacked client
return fValid;
}
static CFLClient * FromConnection(CFMConnection & cnxn)
{
return (CFLClient *)cnxn.GetPrivateData();
}
CFMConnection * GetConnection()
{
return m_pcnxn;
}
private:
static const DWORD c_dwID;
static const int c_cMaxPlayers;
CFMConnection * m_pcnxn;
DWORD m_dwID;
};
#endif