2022-03-05 12:44:06 +02:00
# ifndef __INC_CLIENTMANAGER_H__
# define __INC_CLIENTMANAGER_H__
2022-03-06 00:01:03 +02:00
# include <unordered_map>
# include <unordered_set>
2022-03-05 12:44:06 +02:00
2022-03-09 21:30:51 +02:00
# include <event2/event.h>
# include <event2/listener.h>
2022-03-05 19:59:39 +02:00
# include <common/stl.h>
# include <common/building.h>
# include <common/auction_table.h>
2022-03-05 12:44:06 +02:00
# include "Peer.h"
# include "DBManager.h"
# include "LoginData.h"
class CPlayerTableCache ;
class CItemCache ;
class CItemPriceListTableCache ;
class CPacketInfo
{
public :
void Add ( int header ) ;
void Reset ( ) ;
std : : map < int , int > m_map_info ;
} ;
size_t CreatePlayerSaveQuery ( char * pszQuery , size_t querySize , TPlayerTable * pkTab ) ;
2022-03-09 21:30:51 +02:00
static void AcceptConnection ( evconnlistener * listener , evutil_socket_t fd , sockaddr * address , int socklen , void * ctx ) ;
static void AcceptError ( evconnlistener * listener , void * ctx ) ;
static void ReadHandler ( bufferevent * bev , void * ctx ) ;
static void WriteHandler ( bufferevent * bev , void * ctx ) ;
static void EventHandler ( bufferevent * bev , short events , void * ctx ) ;
class CClientManager : public singleton < CClientManager >
2022-03-05 12:44:06 +02:00
{
public :
typedef std : : list < CPeer * > TPeerList ;
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < DWORD , CPlayerTableCache * > TPlayerTableCacheMap ;
typedef std : : unordered_map < DWORD , CItemCache * > TItemCacheMap ;
typedef std : : unordered_set < CItemCache * , std : : hash < CItemCache * > > TItemCacheSet ;
typedef std : : unordered_map < DWORD , TItemCacheSet * > TItemCacheSetPtrMap ;
typedef std : : unordered_map < DWORD , CItemPriceListTableCache * > TItemPriceListCacheMap ;
typedef std : : unordered_map < short , BYTE > TChannelStatusMap ;
2022-03-05 12:44:06 +02:00
// MYSHOP_PRICE_LIST
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> û <20> <> <EFBFBD> <EFBFBD>
/**
* first : Peer handle
* second : <EFBFBD> <EFBFBD> û <EFBFBD> <EFBFBD> <EFBFBD> ÷ <EFBFBD> <EFBFBD> ̾ <EFBFBD> <EFBFBD> <EFBFBD> ID
*/
typedef std : : pair < DWORD , DWORD > TItemPricelistReqInfo ;
// END_OF_MYSHOP_PRICE_LIST
class ClientHandleInfo
{
public :
DWORD dwHandle ;
DWORD account_id ;
DWORD player_id ;
BYTE account_index ;
char login [ LOGIN_MAX_LEN + 1 ] ;
char safebox_password [ SAFEBOX_PASSWORD_MAX_LEN + 1 ] ;
char ip [ MAX_HOST_LENGTH + 1 ] ;
TAccountTable * pAccountTable ;
TSafeboxTable * pSafebox ;
ClientHandleInfo ( DWORD argHandle , DWORD dwPID = 0 )
{
dwHandle = argHandle ;
pSafebox = NULL ;
pAccountTable = NULL ;
player_id = dwPID ;
} ;
//<2F> <> <EFBFBD> ϼ<EFBFBD> <CFBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
ClientHandleInfo ( DWORD argHandle , DWORD dwPID , DWORD accountId )
{
dwHandle = argHandle ;
pSafebox = NULL ;
pAccountTable = NULL ;
player_id = dwPID ;
account_id = accountId ;
} ;
~ ClientHandleInfo ( )
{
if ( pSafebox )
{
delete pSafebox ;
pSafebox = NULL ;
}
}
} ;
public :
CClientManager ( ) ;
~ CClientManager ( ) ;
bool Initialize ( ) ;
time_t GetCurrentTime ( ) ;
void MainLoop ( ) ;
void Quit ( ) ;
void SetTablePostfix ( const char * c_pszTablePostfix ) ;
void SetPlayerIDStart ( int iIDStart ) ;
int GetPlayerIDStart ( ) { return m_iPlayerIDStart ; }
int GetPlayerDeleteLevelLimit ( ) { return m_iPlayerDeleteLevelLimit ; }
void SetChinaEventServer ( bool flag ) { m_bChinaEventServer = flag ; }
bool IsChinaEventServer ( ) { return m_bChinaEventServer ; }
DWORD GetUserCount ( ) ; // <20> <> <EFBFBD> ӵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Ѵ <EFBFBD> .
void SendAllGuildSkillRechargePacket ( ) ;
void SendTime ( ) ;
CPlayerTableCache * GetPlayerCache ( DWORD id ) ;
void PutPlayerCache ( TPlayerTable * pNew ) ;
void CreateItemCacheSet ( DWORD dwID ) ;
TItemCacheSet * GetItemCacheSet ( DWORD dwID ) ;
void FlushItemCacheSet ( DWORD dwID ) ;
CItemCache * GetItemCache ( DWORD id ) ;
void PutItemCache ( TPlayerItem * pNew , bool bSkipQuery = false ) ;
bool DeleteItemCache ( DWORD id ) ;
void UpdatePlayerCache ( ) ;
void UpdateItemCache ( ) ;
// MYSHOP_PRICE_LIST
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ ij<> ø<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ´ <EFBFBD> .
/**
* @ param [ in ] dwID <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> . ( <EFBFBD> ÷ <EFBFBD> <EFBFBD> ̾ <EFBFBD> ID )
* @ return <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ ij <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
CItemPriceListTableCache * GetItemPriceListCache ( DWORD dwID ) ;
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ ij<> ø<EFBFBD> <20> ִ´ <D6B4> .
/**
* @ param [ in ] pItemPriceList ij <EFBFBD> ÿ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ
*
* ij <EFBFBD> ð <EFBFBD> <EFBFBD> ̹ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Update <EFBFBD> <EFBFBD> <EFBFBD> ƴ <EFBFBD> replace <EFBFBD> Ѵ <EFBFBD> .
*/
void PutItemPriceListCache ( const TItemPriceListTable * pItemPriceList ) ;
/// Flush <20> ð<EFBFBD> <C3B0> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ ij<> ø<EFBFBD> Flush <20> <> <EFBFBD> ְ<EFBFBD> ij<> ÿ<EFBFBD> <C3BF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
void UpdateItemPriceListCache ( void ) ;
// END_OF_MYSHOP_PRICE_LIST
void SendGuildSkillUsable ( DWORD guild_id , DWORD dwSkillVnum , bool bUsable ) ;
void SetCacheFlushCountLimit ( int iLimit ) ;
template < class Func >
Func for_each_peer ( Func f ) ;
CPeer * GetAnyPeer ( ) ;
void ForwardPacket ( BYTE header , const void * data , int size , BYTE bChannel = 0 , CPeer * except = NULL ) ;
void SendNotice ( const char * c_pszFormat , . . . ) ;
char * GetCommand ( char * str ) ; //<2F> <> <EFBFBD> ϼ<EFBFBD> <CFBC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ɿ<EFBFBD> <C9BF> <EFBFBD> <20> <> <EFBFBD> ɾ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> Լ<EFBFBD>
void ItemAward ( CPeer * peer , char * login ) ; //<2F> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
2022-03-09 21:30:51 +02:00
CPeer * AddPeer ( bufferevent * bufev , sockaddr * addr ) ;
void RemovePeer ( CPeer * pPeer ) ;
CPeer * GetPeer ( IDENT ident ) ;
CPeer * GetAuthPeer ( ) ;
void ProcessPackets ( CPeer * peer ) ;
2022-03-05 12:44:06 +02:00
protected :
void Destroy ( ) ;
private :
bool InitializeTables ( ) ;
bool InitializeShopTable ( ) ;
bool InitializeMobTable ( ) ;
bool InitializeItemTable ( ) ;
bool InitializeQuestItemTable ( ) ;
bool InitializeSkillTable ( ) ;
bool InitializeRefineTable ( ) ;
bool InitializeBanwordTable ( ) ;
bool InitializeItemAttrTable ( ) ;
bool InitializeItemRareTable ( ) ;
bool InitializeLandTable ( ) ;
bool InitializeObjectProto ( ) ;
bool InitializeObjectTable ( ) ;
bool InitializeMonarch ( ) ;
// mob_proto.txt, item_proto.txt<78> <74> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> mob_proto, item_proto<74> <6F> real db<64> <62> <20> ݿ<EFBFBD> .
// item_proto, mob_proto<74> <6F> db<64> <62> <20> ݿ<EFBFBD> <DDBF> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʾ Ƶ<CABE> , <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ư<EFBFBD> <C6B0> µ<EFBFBD> <C2B5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ,
// <09> <EFBFBD> <EEBFB5> <20> <EFBFBD> <EEBFA1> db<64> <62> item_proto, mob_proto<74> <6F> <20> о <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <EFBFBD> <DFBB> Ѵ <EFBFBD> .
bool MirrorMobTableIntoDB ( ) ;
bool MirrorItemTableIntoDB ( ) ;
int AnalyzeQueryResult ( SQLMsg * msg ) ;
int AnalyzeErrorMsg ( CPeer * peer , SQLMsg * msg ) ;
int Process ( ) ;
CLoginData * GetLoginData ( DWORD dwKey ) ;
CLoginData * GetLoginDataByLogin ( const char * c_pszLogin ) ;
CLoginData * GetLoginDataByAID ( DWORD dwAID ) ;
void InsertLoginData ( CLoginData * pkLD ) ;
void DeleteLoginData ( CLoginData * pkLD ) ;
bool InsertLogonAccount ( const char * c_pszLogin , DWORD dwHandle , const char * c_pszIP ) ;
bool DeleteLogonAccount ( const char * c_pszLogin , DWORD dwHandle ) ;
bool FindLogonAccount ( const char * c_pszLogin ) ;
void GuildCreate ( CPeer * peer , DWORD dwGuildID ) ;
void GuildSkillUpdate ( CPeer * peer , TPacketGuildSkillUpdate * p ) ;
void GuildExpUpdate ( CPeer * peer , TPacketGuildExpUpdate * p ) ;
void GuildAddMember ( CPeer * peer , TPacketGDGuildAddMember * p ) ;
void GuildChangeGrade ( CPeer * peer , TPacketGuild * p ) ;
void GuildRemoveMember ( CPeer * peer , TPacketGuild * p ) ;
void GuildChangeMemberData ( CPeer * peer , TPacketGuildChangeMemberData * p ) ;
void GuildDisband ( CPeer * peer , TPacketGuild * p ) ;
void GuildWar ( CPeer * peer , TPacketGuildWar * p ) ;
void GuildWarScore ( CPeer * peer , TPacketGuildWarScore * p ) ;
void GuildChangeLadderPoint ( TPacketGuildLadderPoint * p ) ;
void GuildUseSkill ( TPacketGuildUseSkill * p ) ;
void GuildDepositMoney ( TPacketGDGuildMoney * p ) ;
void GuildWithdrawMoney ( CPeer * peer , TPacketGDGuildMoney * p ) ;
void GuildWithdrawMoneyGiveReply ( TPacketGDGuildMoneyWithdrawGiveReply * p ) ;
void GuildWarBet ( TPacketGDGuildWarBet * p ) ;
void GuildChangeMaster ( TPacketChangeGuildMaster * p ) ;
void SetGuildWarEndTime ( DWORD guild_id1 , DWORD guild_id2 , time_t tEndTime ) ;
void QUERY_BOOT ( CPeer * peer , TPacketGDBoot * p ) ;
void QUERY_LOGIN ( CPeer * peer , DWORD dwHandle , SLoginPacket * data ) ;
void QUERY_LOGOUT ( CPeer * peer , DWORD dwHandle , const char * ) ;
void RESULT_LOGIN ( CPeer * peer , SQLMsg * msg ) ;
void QUERY_PLAYER_LOAD ( CPeer * peer , DWORD dwHandle , TPlayerLoadPacket * ) ;
void RESULT_COMPOSITE_PLAYER ( CPeer * peer , SQLMsg * pMsg , DWORD dwQID ) ;
void RESULT_PLAYER_LOAD ( CPeer * peer , MYSQL_RES * pRes , ClientHandleInfo * pkInfo ) ;
void RESULT_ITEM_LOAD ( CPeer * peer , MYSQL_RES * pRes , DWORD dwHandle , DWORD dwPID ) ;
void RESULT_QUEST_LOAD ( CPeer * pkPeer , MYSQL_RES * pRes , DWORD dwHandle , DWORD dwPID ) ;
void RESULT_AFFECT_LOAD ( CPeer * pkPeer , MYSQL_RES * pRes , DWORD dwHandle ) ;
// PLAYER_INDEX_CREATE_BUG_FIX
void RESULT_PLAYER_INDEX_CREATE ( CPeer * pkPeer , SQLMsg * msg ) ;
// END_PLAYER_INDEX_CREATE_BUG_FIX
// MYSHOP_PRICE_LIST
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Result ó<> <C3B3>
/**
* @ param peer <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û <EFBFBD> <EFBFBD> Game server <EFBFBD> <EFBFBD> peer <EFBFBD> <EFBFBD> ü <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @ param pMsg <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Result <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ü <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
* <EFBFBD> ε <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <EFBFBD> <EFBFBD> ij <EFBFBD> ÿ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϰ <EFBFBD> peer <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ش <EFBFBD> .
*/
void RESULT_PRICELIST_LOAD ( CPeer * peer , SQLMsg * pMsg ) ;
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Result ó<> <C3B3>
/**
* @ param pMsg <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Result <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ü <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*
* <EFBFBD> ε <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ ij <EFBFBD> ø <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <EFBFBD> Ѵ <EFBFBD> .
*/
void RESULT_PRICELIST_LOAD_FOR_UPDATE ( SQLMsg * pMsg ) ;
// END_OF_MYSHOP_PRICE_LIST
void QUERY_PLAYER_SAVE ( CPeer * peer , DWORD dwHandle , TPlayerTable * ) ;
void __QUERY_PLAYER_CREATE ( CPeer * peer , DWORD dwHandle , TPlayerCreatePacket * ) ;
void __QUERY_PLAYER_DELETE ( CPeer * peer , DWORD dwHandle , TPlayerDeletePacket * ) ;
void __RESULT_PLAYER_DELETE ( CPeer * peer , SQLMsg * msg ) ;
void QUERY_PLAYER_COUNT ( CPeer * pkPeer , TPlayerCountPacket * ) ;
void QUERY_ITEM_SAVE ( CPeer * pkPeer , const char * c_pData ) ;
void QUERY_ITEM_DESTROY ( CPeer * pkPeer , const char * c_pData ) ;
void QUERY_ITEM_FLUSH ( CPeer * pkPeer , const char * c_pData ) ;
void QUERY_QUEST_SAVE ( CPeer * pkPeer , TQuestTable * , DWORD dwLen ) ;
void QUERY_ADD_AFFECT ( CPeer * pkPeer , TPacketGDAddAffect * p ) ;
void QUERY_REMOVE_AFFECT ( CPeer * pkPeer , TPacketGDRemoveAffect * p ) ;
void QUERY_SAFEBOX_LOAD ( CPeer * pkPeer , DWORD dwHandle , TSafeboxLoadPacket * , bool bMall ) ;
void QUERY_SAFEBOX_SAVE ( CPeer * pkPeer , TSafeboxTable * pTable ) ;
void QUERY_SAFEBOX_CHANGE_SIZE ( CPeer * pkPeer , DWORD dwHandle , TSafeboxChangeSizePacket * p ) ;
void QUERY_SAFEBOX_CHANGE_PASSWORD ( CPeer * pkPeer , DWORD dwHandle , TSafeboxChangePasswordPacket * p ) ;
void RESULT_SAFEBOX_LOAD ( CPeer * pkPeer , SQLMsg * msg ) ;
void RESULT_SAFEBOX_CHANGE_SIZE ( CPeer * pkPeer , SQLMsg * msg ) ;
void RESULT_SAFEBOX_CHANGE_PASSWORD ( CPeer * pkPeer , SQLMsg * msg ) ;
void RESULT_SAFEBOX_CHANGE_PASSWORD_SECOND ( CPeer * pkPeer , SQLMsg * msg ) ;
void QUERY_EMPIRE_SELECT ( CPeer * pkPeer , DWORD dwHandle , TEmpireSelectPacket * p ) ;
void QUERY_SETUP ( CPeer * pkPeer , DWORD dwHandle , const char * c_pData ) ;
void SendPartyOnSetup ( CPeer * peer ) ;
void QUERY_HIGHSCORE_REGISTER ( CPeer * peer , TPacketGDHighscore * data ) ;
void RESULT_HIGHSCORE_REGISTER ( CPeer * pkPeer , SQLMsg * msg ) ;
void QUERY_FLUSH_CACHE ( CPeer * pkPeer , const char * c_pData ) ;
void QUERY_PARTY_CREATE ( CPeer * peer , TPacketPartyCreate * p ) ;
void QUERY_PARTY_DELETE ( CPeer * peer , TPacketPartyDelete * p ) ;
void QUERY_PARTY_ADD ( CPeer * peer , TPacketPartyAdd * p ) ;
void QUERY_PARTY_REMOVE ( CPeer * peer , TPacketPartyRemove * p ) ;
void QUERY_PARTY_STATE_CHANGE ( CPeer * peer , TPacketPartyStateChange * p ) ;
void QUERY_PARTY_SET_MEMBER_LEVEL ( CPeer * peer , TPacketPartySetMemberLevel * p ) ;
void QUERY_RELOAD_PROTO ( ) ;
void QUERY_CHANGE_NAME ( CPeer * peer , DWORD dwHandle , TPacketGDChangeName * p ) ;
void GetPlayerFromRes ( TPlayerTable * player_table , MYSQL_RES * res ) ;
void QUERY_SMS ( CPeer * pkPeer , TPacketGDSMS * p ) ;
void QUERY_LOGIN_KEY ( CPeer * pkPeer , TPacketGDLoginKey * p ) ;
void AddGuildPriv ( TPacketGiveGuildPriv * p ) ;
void AddEmpirePriv ( TPacketGiveEmpirePriv * p ) ;
void AddCharacterPriv ( TPacketGiveCharacterPriv * p ) ;
void MoneyLog ( TPacketMoneyLog * p ) ;
void QUERY_AUTH_LOGIN ( CPeer * pkPeer , DWORD dwHandle , TPacketGDAuthLogin * p ) ;
void QUERY_LOGIN_BY_KEY ( CPeer * pkPeer , DWORD dwHandle , TPacketGDLoginByKey * p ) ;
void RESULT_LOGIN_BY_KEY ( CPeer * peer , SQLMsg * msg ) ;
void ChargeCash ( const TRequestChargeCash * p ) ;
void LoadEventFlag ( ) ;
void SetEventFlag ( TPacketSetEventFlag * p ) ;
void SendEventFlagsOnSetup ( CPeer * peer ) ;
void BillingExpire ( TPacketBillingExpire * p ) ;
void BillingCheck ( const char * data ) ;
void SendAllLoginToBilling ( ) ;
void SendLoginToBilling ( CLoginData * pkLD , bool bLogin ) ;
// <20> <> ȥ
void MarriageAdd ( TPacketMarriageAdd * p ) ;
void MarriageUpdate ( TPacketMarriageUpdate * p ) ;
void MarriageRemove ( TPacketMarriageRemove * p ) ;
void WeddingRequest ( TPacketWeddingRequest * p ) ;
void WeddingReady ( TPacketWeddingReady * p ) ;
void WeddingEnd ( TPacketWeddingEnd * p ) ;
// MYSHOP_PRICE_LIST
// <20> <> <EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <20> <> Ŷ(HEADER_GD_MYSHOP_PRICELIST_UPDATE) ó<> <C3B3> <EFBFBD> Լ<EFBFBD>
/**
* @ param [ in ] pPacket <EFBFBD> <EFBFBD> Ŷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
*/
void MyshopPricelistUpdate ( const TPacketMyshopPricelistHeader * pPacket ) ;
/// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ <20> <> û <20> <> Ŷ(HEADER_GD_MYSHOP_PRICELIST_REQ) ó<> <C3B3> <EFBFBD> Լ<EFBFBD>
/**
* @ param peer <EFBFBD> <EFBFBD> Ŷ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Game server <EFBFBD> <EFBFBD> peer <EFBFBD> <EFBFBD> ü <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
* @ param [ in ] dwHandle <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û <EFBFBD> <EFBFBD> peer <EFBFBD> <EFBFBD> <EFBFBD> ڵ <EFBFBD>
* @ param [ in ] dwPlayerID <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ʈ <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> û <EFBFBD> <EFBFBD> <EFBFBD> ÷ <EFBFBD> <EFBFBD> ̾ <EFBFBD> <EFBFBD> <EFBFBD> ID
*/
void MyshopPricelistRequest ( CPeer * peer , DWORD dwHandle , DWORD dwPlayerID ) ;
// END_OF_MYSHOP_PRICE_LIST
// Building
void CreateObject ( TPacketGDCreateObject * p ) ;
void DeleteObject ( DWORD dwID ) ;
void UpdateLand ( DWORD * pdw ) ;
// VCard
void VCard ( TPacketGDVCard * p ) ;
void VCardProcess ( ) ;
// BLOCK_CHAT
void BlockChat ( TPacketBlockChat * p ) ;
// END_OF_BLOCK_CHAT
private :
int m_looping ;
2022-03-09 21:30:51 +02:00
event_base * m_base ;
evconnlistener * m_listener ;
2022-03-05 12:44:06 +02:00
TPeerList m_peerList ;
CPeer * m_pkAuthPeer ;
// LoginKey, LoginData pair
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < DWORD , CLoginData * > TLoginDataByLoginKey ;
2022-03-05 12:44:06 +02:00
TLoginDataByLoginKey m_map_pkLoginData ;
// Login LoginData pair
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < std : : string , CLoginData * > TLoginDataByLogin ;
2022-03-05 12:44:06 +02:00
TLoginDataByLogin m_map_pkLoginDataByLogin ;
// AccountID LoginData pair
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < DWORD , CLoginData * > TLoginDataByAID ;
2022-03-05 12:44:06 +02:00
TLoginDataByAID m_map_pkLoginDataByAID ;
// Login LoginData pair (<28> <> <EFBFBD> <EFBFBD> <20> α <EFBFBD> <CEB1> <EFBFBD> <20> Ǿ<EFBFBD> <C7BE> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> )
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < std : : string , CLoginData * > TLogonAccountMap ;
2022-03-05 12:44:06 +02:00
TLogonAccountMap m_map_kLogonAccount ;
int m_iPlayerIDStart ;
int m_iPlayerDeleteLevelLimit ;
int m_iPlayerDeleteLevelLimitLower ;
bool m_bChinaEventServer ;
std : : vector < TMobTable > m_vec_mobTable ;
std : : vector < TItemTable > m_vec_itemTable ;
std : : map < DWORD , TItemTable * > m_map_itemTableByVnum ;
int m_iShopTableSize ;
TShopTable * m_pShopTable ;
int m_iRefineTableSize ;
TRefineTable * m_pRefineTable ;
std : : vector < TSkillTable > m_vec_skillTable ;
std : : vector < TBanwordTable > m_vec_banwordTable ;
std : : vector < TItemAttrTable > m_vec_itemAttrTable ;
std : : vector < TItemAttrTable > m_vec_itemRareTable ;
std : : vector < building : : TLand > m_vec_kLandTable ;
std : : vector < building : : TObjectProto > m_vec_kObjectProto ;
std : : map < DWORD , building : : TObject * > m_map_pkObjectTable ;
std : : queue < TPacketGDVCard > m_queue_vcard ;
bool m_bShutdowned ;
TPlayerTableCacheMap m_map_playerCache ; // <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> id<69> <64> key
TItemCacheMap m_map_itemCache ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> id<69> <64> key
TItemCacheSetPtrMap m_map_pkItemCacheSetPtr ; // <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> id<69> <64> key, <20> <> <20> ÷<EFBFBD> <C3B7> ̾ <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ֳ<EFBFBD> ?
// MYSHOP_PRICE_LIST
/// <20> ÷<EFBFBD> <C3B7> ̾ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ map. key: <20> ÷<EFBFBD> <C3B7> ̾<EFBFBD> ID, value: <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ ij<> <C4B3>
TItemPriceListCacheMap m_mapItemPriceListCache ; ///< <20> ÷<EFBFBD> <C3B7> ̾ <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ
// END_OF_MYSHOP_PRICE_LIST
TChannelStatusMap m_mChannelStatus ;
struct TPartyInfo
{
BYTE bRole ;
BYTE bLevel ;
TPartyInfo ( ) : bRole ( 0 ) , bLevel ( 0 )
{
}
} ;
typedef std : : map < DWORD , TPartyInfo > TPartyMember ;
typedef std : : map < DWORD , TPartyMember > TPartyMap ;
typedef std : : map < BYTE , TPartyMap > TPartyChannelMap ;
TPartyChannelMap m_map_pkChannelParty ;
typedef std : : map < std : : string , long > TEventFlagMap ;
TEventFlagMap m_map_lEventFlag ;
BYTE m_bLastHeader ;
int m_iCacheFlushCount ;
int m_iCacheFlushCountLimit ;
private :
TItemIDRangeTable m_itemRange ;
public :
bool InitializeNowItemID ( ) ;
DWORD GetItemID ( ) ;
DWORD GainItemID ( ) ;
TItemIDRangeTable GetItemRange ( ) { return m_itemRange ; }
//BOOT_LOCALIZATION
public :
/* <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ʱ<EFBFBD> ȭ
* */
bool InitializeLocalization ( ) ;
private :
std : : vector < tLocale > m_vec_Locale ;
//END_BOOT_LOCALIZATION
//ADMIN_MANAGER
bool __GetAdminInfo ( const char * szIP , std : : vector < tAdminInfo > & rAdminVec ) ;
bool __GetHostInfo ( std : : vector < std : : string > & rIPVec ) ;
//END_ADMIN_MANAGER
//RELOAD_ADMIN
void ReloadAdmin ( CPeer * peer , TPacketReloadAdmin * p ) ;
//END_RELOAD_ADMIN
void BreakMarriage ( CPeer * peer , const char * data ) ;
struct TLogoutPlayer
{
DWORD pid ;
time_t time ;
bool operator < ( const TLogoutPlayer & r )
{
return ( pid < r . pid ) ;
}
} ;
2022-03-06 00:01:03 +02:00
typedef std : : unordered_map < DWORD , TLogoutPlayer * > TLogoutPlayerMap ;
2022-03-05 12:44:06 +02:00
TLogoutPlayerMap m_map_logout ;
void InsertLogoutPlayer ( DWORD pid ) ;
void DeleteLogoutPlayer ( DWORD pid ) ;
void UpdateLogoutPlayer ( ) ;
void UpdateItemCacheSet ( DWORD pid ) ;
void FlushPlayerCacheSet ( DWORD pid ) ;
//MONARCH
void Election ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void Candidacy ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void AddMonarchMoney ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void TakeMonarchMoney ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void ComeToVote ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void RMCandidacy ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void SetMonarch ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void RMMonarch ( CPeer * peer , DWORD dwHandle , const char * p ) ;
void DecMonarchMoney ( CPeer * peer , DWORD dwHandle , const char * p ) ;
//END_MONARCH
void ChangeMonarchLord ( CPeer * peer , DWORD dwHandle , TPacketChangeMonarchLord * info ) ;
void BlockException ( TPacketBlockException * data ) ;
void SendSpareItemIDRange ( CPeer * peer ) ;
void UpdateHorseName ( TPacketUpdateHorseName * data , CPeer * peer ) ;
void AckHorseName ( DWORD dwPID , CPeer * peer ) ;
void DeleteLoginKey ( TPacketDC * data ) ;
void ResetLastPlayerID ( const TPacketNeedLoginLogInfo * data ) ;
//delete gift notify icon
void DeleteAwardId ( TPacketDeleteAwardID * data ) ;
void UpdateChannelStatus ( TChannelStatus * pData ) ;
void RequestChannelStatus ( CPeer * peer , DWORD dwHandle ) ;
# ifdef __AUCTION__
void EnrollInAuction ( CPeer * peer , DWORD owner_id , AuctionEnrollProductInfo * data ) ;
void EnrollInSale ( CPeer * peer , DWORD owner_id , AuctionEnrollSaleInfo * data ) ;
void EnrollInWish ( CPeer * peer , DWORD wisher_id , AuctionEnrollWishInfo * data ) ;
void AuctionBid ( CPeer * peer , DWORD bidder_id , AuctionBidInfo * data ) ;
void AuctionImpur ( CPeer * peer , DWORD purchaser_id , AuctionImpurInfo * data ) ;
void AuctionGetAuctionedItem ( CPeer * peer , DWORD actor_id , DWORD item_id ) ;
void AuctionBuySoldItem ( CPeer * peer , DWORD actor_id , DWORD item_id ) ;
void AuctionCancelAuction ( CPeer * peer , DWORD actor_id , DWORD item_id ) ;
void AuctionCancelWish ( CPeer * peer , DWORD actor_id , DWORD item_num ) ;
void AuctionCancelSale ( CPeer * peer , DWORD actor_id , DWORD item_id ) ;
void AuctionDeleteAuctionItem ( CPeer * peer , DWORD actor_id , DWORD item_id ) ;
void AuctionDeleteSaleItem ( CPeer * peer , DWORD actor_id , DWORD item_id ) ;
void AuctionReBid ( CPeer * peer , DWORD bidder_id , AuctionBidInfo * data ) ;
void AuctionBidCancel ( CPeer * peer , DWORD bidder_id , DWORD item_id ) ;
# endif
} ;
template < class Func >
Func CClientManager : : for_each_peer ( Func f )
{
TPeerList : : iterator it ;
for ( it = m_peerList . begin ( ) ; it ! = m_peerList . end ( ) ; + + it )
{
f ( * it ) ;
}
return f ;
}
# endif