Files
2022-10-26 12:25:11 +08:00

61 lines
1.9 KiB
C++

#pragma once
#include <SolarHashTable.h>
class UnitServer;
typedef util::SolarHashTable<UnitServer *> UNITSERVER_HASH;
typedef UNITSERVER_HASH::iterator UNITSERVER_HASH_ITR;
class Channel
{
enum { DEFAULT_UNITSERVER_POOL_SIZE = 10 };
friend class WorldManager;
friend class World;
public:
Channel();
~Channel();
VOID Init( BYTE byWorldKey, BYTE byChannelKey );
VOID Release();
BYTE GetKey() { return m_byChannelKey; }
UnitServer * AllocUnitServer( DWORD dwUnitServerKey );
VOID FreeUnitServer( UnitServer *pUnitServer );
// 서버 구동, 종료, 패치
VOID ExecuteStart( DWORD dwUserKey );
VOID ExecuteEnd( DWORD dwUserKey );
BOOL ExecutePatch( DWORD dwUserKey );
VOID ExecuteForceDisconnect( DWORD dwUserKey );
VOID SetServerStatus( eSERVER_STATUS status );
BOOL CheckServerStatus( eSERVER_STATUS CheckStatus );
VOID SerializeServerInfoStream( SERVER_TOTAL_INFO & OUT rServerTotInfo );
VOID SerializeServerInfoStreamForUser( SERVER_TOTAL_INFO & OUT rServerTotInfo, DWORD dwUserGUID );
VOID SerializeFtpInfoStreamForUser( FTP_TOTAL_INFO & OUT rFtpTotInfo, DWORD dwUserGUID );
#ifdef __20080312__SOLARAUTH_SERVER_PATCH
VOID SerializeScriptFolderInfoStream( SCRIPTFOLDER_TOTAL_INFO& OUT rSCFolderTotInfo, DWORD dwUserGUID );
#endif
UnitServer * FindUnitServer( DWORD dwUnitServerKey ) { return m_UnitServerHash.GetData( dwUnitServerKey ); }
UnitServer * FindUnitServerByAgent( DWORD dwAgentKey, eGAME_SERVER_TYPE byServerType );
UnitServer * FindUnitServer( eGAME_SERVER_TYPE byServerType, BYTE byServerNum );
#ifdef _NA_006543_20130318_HEARTBEAT
//AgentKey 하나로 그 Agent에 속한 채널,서버들을 알기 위한 함수들
UnitServer * FindFirstUnitServerByAgentKey(DWORD dwAgentKey); // 해당 agentkey를 가진 서버를 하나 리턴
#endif
private:
BYTE m_byWorldKey;
BYTE m_byChannelKey;
UNITSERVER_HASH m_UnitServerHash;
CMemoryPoolFactory<UnitServer> *m_pUnitServerPool;
};