// Ryzom - MMORPG Framework
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
#error DEPRECATED
#ifndef EGS_SHUTDOWN_HANDLER_H
#define EGS_SHUTDOWN_HANDLER_H
#include "nel/misc/variable.h"
#include "nel/misc/time_nl.h"
#include "nel/misc/ucstring.h"
/**
* This singleton handles shutdown events
* \author Benjamin Legros
* \author Nevrax France
* \date 2004
*/
class CShutdownHandler
{
public:
/// \name Basic Management
// @{
/**
* Inits Handler
*/
static void init();
/**
* Update Handler
*/
static void update();
/**
* Release Handler
*/
static void release();
// @}
/// \name Handler Commands Declaration
// @{
/**
* Start Shutdown Counter
*/
static void startShutdown(sint shutdownCounter = -1, sint broadcastMessageRate = -1);
/**
* Cancel Shutdown
*/
static void cancelShutdown();
/**
* Restart shard
* Actually reset WS ShardOpen variable to OpenForAll
*/
static void restartShard();
// @}
/// \name Info queries
// @{
/**
* Get current shard state
*/
static std::string getState();
// @}
private:
enum TState
{
Running = 0,
ShuttingDown,
Closed,
};
/// Shutdown State
static TState _State;
/// Shutdown Timeout
static NLMISC::TTime _ShutdownTimeout;
/// Shutdown Timeout
static NLMISC::TTime _NextBroadcastMessage;
/// ShardOpen has been closed
static bool _ShardClosed;
/// Broadcast Message Rate
static uint _BroadcastMessageRate;
/// Broadcast Shutdown message
static void broadcastShutdownMessage();
/// Broadcast message
static void broadcastMessage(const ucstring& message);
/// Disconnect all players
static void disconnectPlayers();
};
typedef uint32 TSecTime; // unit of NLMISC::CTime::getSecondsSince1970()
/**
* Handle daily automatic shutdown
*/
class CAutomaticShutdownHandler
{
public:
/// Update Handler
static void update();
/// Uses daily shutdown sequence time to compute next time
static void computePlannedShutdownTimes( NLMISC::CLog *log=NLMISC::InfoLog );
private:
/// Game cycle of last config file check
static NLMISC::TGameCycle _LastGCChecked;
/// Time of next planned shutdown sequence start
static TSecTime _NextPlannedShutdownStartTime;
/// Time of next planned shutdown sequence end
static TSecTime _NextPlannedShutdownEndTime;
};
#endif // EGS_SHUTDOWN_HANDLER_H
/* End of shutdown_handler.h */