mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 07:31:40 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
262
Code/Commando/gamespyadmin.cpp
Normal file
262
Code/Commando/gamespyadmin.cpp
Normal file
@@ -0,0 +1,262 @@
|
||||
/*
|
||||
** 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
//
|
||||
// Filename: gamespyadmin.cpp
|
||||
// Author: Tom Spencer-Smith
|
||||
// Date: Jan 2002
|
||||
// Description:
|
||||
//
|
||||
|
||||
#include "gamespyadmin.h"
|
||||
|
||||
#include "wwdebug.h"
|
||||
#include "widestring.h"
|
||||
#include "gameinitmgr.h"
|
||||
#include "gamedata.h"
|
||||
#include "cnetwork.h"
|
||||
#include "dlgmpconnect.h"
|
||||
#include "gamespy_qnr.h"
|
||||
#include <Gamespy\ghttp.h>
|
||||
#include "useroptions.h"
|
||||
#include "renegadedialogmgr.h"
|
||||
#include "dialogtests.h"
|
||||
#include "translatedb.h"
|
||||
#include "string_ids.h"
|
||||
#include "bandwidthcheck.h"
|
||||
#include "gamespyauthmgr.h"
|
||||
#include "specialbuilds.h"
|
||||
|
||||
//
|
||||
// Class statics
|
||||
//
|
||||
|
||||
bool cGameSpyAdmin::DetectingBandwidth = false;
|
||||
bool cGameSpyAdmin::IsUnderGamespyMenuing = false;
|
||||
bool cGameSpyAdmin::IsLaunchFromGamespyRequested = false;
|
||||
bool cGameSpyAdmin::IsLaunchedFromGamespy = false;
|
||||
bool cGameSpyAdmin::IsServerGamespyListed = false;
|
||||
ULONG cGameSpyAdmin::GameHostIp = 0;
|
||||
USHORT cGameSpyAdmin::GameHostPort = 0;
|
||||
WideStringClass cGameSpyAdmin::PasswordAttempt;
|
||||
|
||||
// It's 2:00am....see DoDialog below..
|
||||
cGameSpyAdmin theGameSpy;
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void
|
||||
cGameSpyAdmin::Think
|
||||
(
|
||||
void
|
||||
)
|
||||
{
|
||||
WWASSERT(Is_Gamespy_Game());
|
||||
|
||||
if (IsLaunchFromGamespyRequested && SplashIntroMenuDialogClass::Is_Complete ())
|
||||
{
|
||||
if (!DetectingBandwidth) {
|
||||
RefPtr<SerialWait> serverWait = SerialWait::Create();
|
||||
WWASSERT(serverWait.IsValid());
|
||||
|
||||
DetectingBandwidth = true;
|
||||
RefPtr<WaitCondition> bandwidth_wait = BandwidthCheckerClass::Detect();
|
||||
|
||||
if (cUserOptions::DoneClientBandwidthTest.Is_True()) {
|
||||
//DlgWOLWait::DoDialog(TRANSLATE (IDS_MENU_DETECTING_BANDWIDTH), L"Skip", bandwidth_wait, &theGameSpy);
|
||||
DlgWOLWait::DoDialog(TRANSLATE (IDS_MENU_DETECTING_BANDWIDTH), TRANSLATE (IDS_MP_SKIP), bandwidth_wait, &theGameSpy);
|
||||
} else {
|
||||
DlgWOLWait::DoDialog(TRANSLATE (IDS_MENU_DETECTING_BANDWIDTH), bandwidth_wait, &theGameSpy);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ghttpThink();
|
||||
|
||||
|
||||
#ifndef MULTIPLAYERDEMO
|
||||
if (cNetwork::I_Am_Server())
|
||||
{
|
||||
cGameSpyAuthMgr::Think();
|
||||
}
|
||||
#endif // MULTIPLAYERDEMO
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void cGameSpyAdmin::HandleNotification(DlgWOLWaitEvent& event) {
|
||||
|
||||
switch (event.Result()) {
|
||||
case WaitCondition::ConditionMet:
|
||||
{
|
||||
if (DetectingBandwidth) {
|
||||
DetectingBandwidth = false;
|
||||
cUserOptions::Set_Bandwidth_Type(BANDWIDTH_AUTO);
|
||||
cUserOptions::DoneClientBandwidthTest.Set(true);
|
||||
Join_Server();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WaitCondition::Waiting:
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
break;
|
||||
|
||||
case WaitCondition::UserCancel:
|
||||
{
|
||||
if (DetectingBandwidth) {
|
||||
if (cUserOptions::DoneClientBandwidthTest.Is_True()) {
|
||||
// Skip Bandwidth test...
|
||||
DetectingBandwidth = false;
|
||||
BandwidthCheckerClass::Force_Upstream_Bandwidth(cUserOptions::BandwidthBps.Get());
|
||||
cUserOptions::Set_Bandwidth_Type(BANDWIDTH_AUTO);
|
||||
Join_Server();
|
||||
} else { // This must be an Abort...
|
||||
DetectingBandwidth = false;
|
||||
#pragma message ("Is Stop_Main_Loop() safe here?")
|
||||
extern void Stop_Main_Loop (int);
|
||||
Stop_Main_Loop(EXIT_SUCCESS);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WaitCondition::TimeOut:
|
||||
case WaitCondition::Error:
|
||||
{
|
||||
DetectingBandwidth = false;
|
||||
#pragma message ("Is Stop_Main_Loop() safe here?")
|
||||
extern void Stop_Main_Loop (int);
|
||||
Stop_Main_Loop(EXIT_SUCCESS);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
DIE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void
|
||||
cGameSpyAdmin::Join_Server(void) {
|
||||
Connect_To_Game_Server();
|
||||
IsLaunchFromGamespyRequested = false;
|
||||
IsLaunchedFromGamespy = true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void
|
||||
cGameSpyAdmin::Reset
|
||||
(
|
||||
void
|
||||
)
|
||||
{
|
||||
IsUnderGamespyMenuing = false;
|
||||
IsLaunchFromGamespyRequested = false;
|
||||
IsLaunchedFromGamespy = false;
|
||||
IsServerGamespyListed = false;
|
||||
GameHostIp = 0;
|
||||
GameHostPort = 0;
|
||||
GameSpyQnR.Shutdown();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void
|
||||
cGameSpyAdmin::Connect_To_Game_Server
|
||||
(
|
||||
void
|
||||
)
|
||||
{
|
||||
WWASSERT(GameHostIp > 0);
|
||||
WWASSERT(GameHostPort > 0);
|
||||
|
||||
GameInitMgrClass::Initialize_LAN();
|
||||
|
||||
WWASSERT(PTheGameData == NULL);
|
||||
PTheGameData = cGameData::Create_Game_Of_Type(cGameData::GAME_TYPE_CNC);
|
||||
WWASSERT(PTheGameData != NULL);
|
||||
PTheGameData->Set_Ip_Address(GameHostIp);
|
||||
PTheGameData->Set_Port(GameHostPort);
|
||||
|
||||
cNetwork::Init_Client();
|
||||
|
||||
//
|
||||
// Display the "connecting" dialog
|
||||
//
|
||||
DlgMPConnect::DoDialog(-1, 0);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void
|
||||
cGameSpyAdmin::Set_Game_Host_Ip
|
||||
(
|
||||
ULONG ip
|
||||
)
|
||||
{
|
||||
WWASSERT(ip > 0);
|
||||
GameHostIp = ip;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
void
|
||||
cGameSpyAdmin::Set_Game_Host_Port
|
||||
(
|
||||
USHORT port
|
||||
)
|
||||
{
|
||||
WWASSERT(port > 0);
|
||||
GameHostPort = port;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
bool
|
||||
cGameSpyAdmin::Is_Gamespy_Game
|
||||
(
|
||||
void
|
||||
)
|
||||
{
|
||||
return
|
||||
IsUnderGamespyMenuing ||
|
||||
IsLaunchFromGamespyRequested ||
|
||||
IsLaunchedFromGamespy ||
|
||||
IsServerGamespyListed;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------
|
||||
bool
|
||||
cGameSpyAdmin::Is_Nickname_Collision
|
||||
(
|
||||
WideStringClass & nickname
|
||||
)
|
||||
{
|
||||
WWASSERT(!nickname.Is_Empty());
|
||||
WWASSERT(cNetwork::I_Am_Server());
|
||||
|
||||
bool collides = (cPlayerManager::Find_Player(nickname) != NULL);
|
||||
if (cNetwork::I_Am_Only_Server())
|
||||
{
|
||||
collides |= !nickname.Compare_No_Case(cNetInterface::Get_Nickname());
|
||||
}
|
||||
|
||||
return collides;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user