154 lines
4.3 KiB
C
154 lines
4.3 KiB
C
|
/*
|
||
|
** 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/>.
|
||
|
*/
|
||
|
|
||
|
/***********************************************************************************************
|
||
|
*** Confidential - Westwood Studios ***
|
||
|
***********************************************************************************************
|
||
|
* *
|
||
|
* Project Name : Commando *
|
||
|
* *
|
||
|
* $Archive:: /Commando/Code/Commando/AutoStart.h $*
|
||
|
* *
|
||
|
* $Author:: Steve_t $*
|
||
|
* *
|
||
|
* $Modtime:: 8/13/02 4:57p $*
|
||
|
* *
|
||
|
* $Revision:: 6 $*
|
||
|
* *
|
||
|
*---------------------------------------------------------------------------------------------*
|
||
|
* Functions: *
|
||
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||
|
|
||
|
#pragma once
|
||
|
#ifndef _AUTOSTART_H
|
||
|
#define _AUTOSTART_H
|
||
|
|
||
|
#include "WOLLogonMgr.h"
|
||
|
#include <wwlib\signaler.h>
|
||
|
#include "wolgmode.h"
|
||
|
#include "menudialog.h"
|
||
|
#include "resource.h"
|
||
|
#include <wwonline\refptr.h>
|
||
|
#include <wwonline\wolsession.h>
|
||
|
|
||
|
namespace WOL {
|
||
|
class WOLSession;
|
||
|
class ServerError;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
**
|
||
|
** This class handles restarting a server after a crash or system reboot.
|
||
|
**
|
||
|
**
|
||
|
*/
|
||
|
class AutoRestartClass : public Observer<WOLLogonAction>, public Observer<WWOnline::ServerError>, protected Signaler<WolGameModeClass>
|
||
|
{
|
||
|
|
||
|
public:
|
||
|
/*
|
||
|
** Constructor, destructor.
|
||
|
*/
|
||
|
AutoRestartClass(void);
|
||
|
|
||
|
/*
|
||
|
** Misc public functions.
|
||
|
*/
|
||
|
void Restart_Game(void);
|
||
|
void Think(void);
|
||
|
bool Is_Active(void) {return((bool)(RestartState != STATE_DONE));}
|
||
|
void Set_Restart_Flag(bool enable);
|
||
|
bool Get_Restart_Flag(void);
|
||
|
void Cancel(void);
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Callbacks.
|
||
|
*/
|
||
|
void HandleNotification(WOLLogonAction&);
|
||
|
void HandleNotification(WWOnline::ServerError& server_error);
|
||
|
void ReceiveSignal(WolGameModeClass&);
|
||
|
|
||
|
/*
|
||
|
** Enum of steps to go through to restart a game.
|
||
|
*/
|
||
|
typedef enum {
|
||
|
STATE_FIRST,
|
||
|
STATE_GAME_MODE_WAIT,
|
||
|
STATE_LOGIN,
|
||
|
STATE_CREATE_GAME,
|
||
|
STATE_CREATE_CHANNEL,
|
||
|
STATE_WAIT_CHANNEL_CREATE,
|
||
|
STATE_WAIT_CHANNEL_CREATE_RETRY,
|
||
|
STATE_START_GAME,
|
||
|
STATE_CANCELLED,
|
||
|
STATE_DONE,
|
||
|
} RestartStateType;
|
||
|
|
||
|
static const char *REG_VALUE_AUTO_RESTART_FLAG;
|
||
|
static const char *REG_VALUE_AUTO_RESTART_TYPE;
|
||
|
|
||
|
|
||
|
private:
|
||
|
|
||
|
/*
|
||
|
** WOL Login state.
|
||
|
*/
|
||
|
WOLLogonAction LogonAction;
|
||
|
|
||
|
/*
|
||
|
** Restart state.
|
||
|
*/
|
||
|
RestartStateType RestartState;
|
||
|
|
||
|
/*
|
||
|
** Cancel request flag.
|
||
|
*/
|
||
|
bool CancelRequest;
|
||
|
|
||
|
/*
|
||
|
** Game mode. 0 = LAN, 1 = internet.
|
||
|
*/
|
||
|
int GameMode;
|
||
|
|
||
|
/*
|
||
|
** Reference pointer to WOLSession.
|
||
|
*/
|
||
|
RefPtr<WWOnline::Session> WOLSession;
|
||
|
|
||
|
/*
|
||
|
** Time we last tried to create the game channel.
|
||
|
*/
|
||
|
unsigned long LastChannelCreateTime;
|
||
|
|
||
|
/*
|
||
|
** Number of times we tried to create the channel.
|
||
|
*/
|
||
|
int NumChannelCreateTries;
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
extern AutoRestartClass AutoRestart;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif //_AUTOSTART_H
|