#ifndef _MISSION_H_
#define _MISSION_H_
class CFLServer;
class CFLClient;
class CFLMission : public IObject
{
public:
CFLMission(CFLServer * pServer, CFLClient * pClientCreator);
~CFLMission();
bool IsValidThisPtr() {
bool fValid = this &&
!IsBadReadPtr(this, sizeof(*this)) &&
IMPLIES(m_plmi, (!IsBadReadPtr(m_plmi, sizeof(m_plmi)) && !IsBadReadPtr(m_plmi, sizeof(m_plmi->cbmsg)))) &&
(c_dwID == m_dwID);
return fValid;
}
DWORD GetCookie()
{
return (DWORD) this;
}
FMD_LS_LOBBYMISSIONINFO * GetMissionInfo()
{
return m_plmi;
}
CFLServer * GetServer()
{
return m_pServer;
}
void SetLobbyInfo(FMD_LS_LOBBYMISSIONINFO * plmi);
int GetPlayerCount()
{
return m_cPlayers;
}
void AddPlayer();
void RemovePlayer();
CFLClient * GetCreator()
{
return m_pClientCreator;
}
void NotifyCreator();
static CFLMission * FromCookie(DWORD dwCookie)
{
CFLMission * pMission = (CFLMission*) dwCookie;
if (pMission->IsValidThisPtr())
return pMission;
else
return NULL;
}
private:
static const DWORD c_dwID;
FMD_LS_LOBBYMISSIONINFO * m_plmi;
CFLServer * m_pServer;
CFLClient * m_pClientCreator; bool m_fNotifiedCreator;
DWORD m_dwID;
int m_cPlayers;
};
typedef TList<CFLMission*> MissionList;
#endif