?? dbsocket.h
字號:
////////////////////////////////////////////////////////////////////////////////////////
// DBSocket.h : header file
//
//
//
////////////////////////////////////////////////////////////////////////////////////////
#if !defined( _DBSocket_H_ )
#define _DBSocket_H_
#include "tgaBase.h"
#include "XPtrList.h" // 犬厘 CPtrList
#include "SafeMap.h" // hread Safe Map
class SafeList ;
template <class TYPE, int MULTIPLE = 10> class CMemPool ;
#define MAX_WORLD_SOCKET 3
const int MAX_DBSOCKET_WORKER_THREAD = 2;
////////////////////////////////////////////////////////////////////////////////////////
// DBSocket command target
////////////////////////////////////////////////////////////////////////////////////////
class DBSocket ;
typedef DBSocket * _LPDBSOCK ;
class DBSocket
{
public:
DBSocket();
~DBSocket();
public:
HANDLE m_hReadEventCompleted; // IO READ 肯豐登菌瀾闌 舅覆
CXPtrList m_listReadCompleted; // 肯豐等 IO 鈕, 貿府甫 扁促赴促.
_LPDBPACKET pDBPacket ; // 巋靛 輯滾俊 焊郴綽 烙矯 菩哦
private:
WORD m_nStart; // 輯滾 矯累 咯何
//
// - 包訪 瀝焊甫 _Module狼 函薦 葷儈咯何 魄竄
SafeList m_SocketPool; // SOCKET POOL
CMemPool<_PER_BULK_IO_CONTEXT> * m_pWorldIOPool; // IO
int m_nNowSocketNum; // 泅犁 傈價 吝牢 Socket Num
bool m_bSocketStatus[MAX_WORLD_SOCKET]; // SOCKET狼 楷搬 惑怕
SOCKET m_Socket[MAX_WORLD_SOCKET]; // Connected Socket
_LPDBSOCKET_FD m_SocketFD[MAX_WORLD_SOCKET];
DWORD m_dwThreadCount; // 角 iocp work thread 骯薦
SOCKET m_WorldSocketListen; // Listen Socket
VOID CLOSEHANDLE( HANDLE &x )
{
if( x != NULL ){
CloseHandle(x);
x = NULL;
}
}
VOID CLOSESOCKET( SOCKET &x )
{
if( x != INVALID_SOCKET ){
closesocket(x);
x = INVALID_SOCKET;
}
}
VOID CLOSEEVENT( HANDLE &x )
{
if( x != NULL ){
SetEvent(x);
CloseHandle(x);
x = NULL;
}
}
public:
#ifdef DEF_UNIQUEITEM
void WorldSend_UniqueItemCreate ( int pUniqueHandle );
#endif
#ifdef DEF_AZIT
//
// 秦寸 竊薦 瀝府 累訣 鞘夸
//
// - 茄俺狼 Function欄肺 瀝府竊
//
void WorldSend_AzitTaxChange (_LPSOCKET_FD pSocketFD, int pAzitHandle, int pTaxRate );
void WorldSend_AzitProposeHouseWar (_LPSOCKET_FD pSocketFD, int pAzitHandle, int pGuildHandle );
void WorldSend_AzitIncome (_LPSOCKET_FD pSocketFD, int pAzitHandle );
void WorldSend_AzitOwnChange ( int pAzitHandle, int pGuildHandle );
void WorldSend_AzitTex ( int pAzitHandle, int pAzitTex );
void WorldSend_AzitChangeByGM( _LPSOCKET_FD pSocketFD, _ZW_AZITCHANGE_ASK *pAzitChangeInfo );
#endif
//
// 楷魂俊 鞘夸茄 皋葛府甫 且寸
//
bool bMemAlloc() ;
void SocketPool_Delete();
void SocketPool_Push( void *pSocket );
void * SocketPool_Pop();
bool SocketPool_Create();
BOOL bInit();
bool bConnect( int pNum , bool pReconnect );
void InitFuctionPoint();
BOOL InitializeEvent();
BOOL InitializeThread();
bool bSend(_LPDBPACKET lpDbPacket) ;
bool bSend(_LPDBPACKET lpDbPacket, int pNum );
bool bSend(_LPDBPACKET lpDbPacket, _LPDBSOCKET_FD pDBSocketFD );
_LPPER_BULK_IO_CONTEXT CreateIOContext(_IO_TYPE io);
_LPDBSOCKET_FD CreateSocketContext();
void ReleaseIOContext(_LPPER_BULK_IO_CONTEXT lpIOContext);
void ReleaseSocketContext(_LPDBSOCKET_FD lpSktContext);
void WorkReadCompleted(); // IO 肯豐等 單撈鷗 貿府 Thread
void WriteCompleted(_LPPER_BULK_IO_CONTEXT lpIOContext);
BOOL ReadPacket( _LPPER_BULK_IO_CONTEXT lpIOContext);
void CloseClient(_LPDBSOCKET_FD lpSktContext, _LPPER_BULK_IO_CONTEXT lpIOContext /* , BOOL bGraceful */);
void PacketTrace(DWORD dwCommand);
void ReConnect(_LPDBSOCKET_FD ,_LPPER_BULK_IO_CONTEXT ) ;
void WorldSend_ConnectWorld( int pNum );
void WorldSend_GuildJoin(_LPSOCKET_FD pSocket,DWORD dwPlayerHandle, char * lpPlayer, char * lpGuildName );
void WorldSend_Notice(_LPSOCKET_FD pSocket, DWORD pMapID, char * pMsg ) ;
void WorldSend_PartyList( _LPSOCKET_FD pSocket, DWORD pPartyHandle );
void WorldSend_PartyRefresh( _LPSOCKET_FD pSocketFD, DWORD pPartyHandle );
void WorldSend_PartyCreate( _LPSOCKET_FD pFromSocket, _LPSOCKET_FD pToSocket ,BYTE nType = 0 );
void WorldSend_PartyJoin( _LPSOCKET_FD pSocketFD, DWORD pPartyHandle );
void WorldSend_PartyLeave( DWORD pPartyHandle, DWORD pPlayerHandle );
void WorldSend_PlayerClose( char * pPlayerID );
void WorldSend_PartyQuestIsAlive( _LPSOCKET_FD pSocket, DWORD pPartyHandle, DWORD pMasterHandle, DWORD pPartyQuest );
void WorldSend_PartyQuestMapChange( _LPSOCKET_FD pSocket, BYTE btType, DWORD pPartyHandle, DWORD pPlayerHandle, DWORD pParam1, DWORD pParam2, DWORD pParam3 );
void WorldSend_FriendReg(_LPSOCKET_FD pSocket ,DWORD dwPlayerHandle ,_LPZP_FRIENDREGANS_ASK p);
void WorldSend_FriendInfor(_LPSOCKET_FD pSocket ,_LPZP_FRIENDINFOR_ASK p);
void WorldSend_FriendDismiss(_LPSOCKET_FD pSocket ,_LPZP_DISMISSFRIEND_ASK p);
void WorldSend_FightzoneList(_LPSOCKET_FD pSocket ,_LPZP_FIGHTZONELIST_ASK p);
void WorldSend_FightzoneReserve(_LPSOCKET_FD pSocket ,_LPZP_PVPANS_ASK p,BYTE nTeamCount = 2,bool bIsHidden = false);
void WorldSend_FightzoneReserveCancel(_LPSOCKET_FD pSocket, char * , WORD wFightzoneSeq,DWORD dwMatchSEQ);
void WorldSend_MatchInforAsk(DWORD dwMatchHandle, DWORD ,DWORD );
void WorldSend_MapInfor(int nSocketNum);
void WorldSend_FightzoneInfor();
void WorldSend_GuildBankGoldInOut( _LPSOCKET_FD pSocketFD,DWORD dwPlayerHandle, int pGoldInOut );
void WorldSend_GuildBankInventoryAct(_LPSOCKET_FD pSocketFD, DWORD dwPlayerHandle, _LPZP_INVENTORYACT_ASK pPacket, GUILDBANKACTION_ENUM pAction );
void WorldSend_MenuAction( _LPSOCKET_FD pSocket, DWORD dwPlayerHandle, BYTE pNPCType, BYTE pStatus );
void WorldSend_QuestSetGlobalValue( _LPSOCKET_FD pSocket );
// 2005-1-7 badajoa
// 巋靛 輯滾肺 弊成 焊郴綽 菩哦撈 腹酒輯 袍敲復闌 父甸菌促.
template < typename PacketPoint >
void WorldSend_Packet( _LPSOCKET_FD pSocketFD, DWORD dwPacketID, PacketPoint pPacket )
{
_LPDBPACKET pWorldPacket = g_pServerMem->WorldPacket_Pop();
pWorldPacket->dwCommand = dwPacketID ;
pWorldPacket->pSocketFD = pSocketFD;
memcpy(pWorldPacket->strPacket, pPacket , sizeof(*pPacket)) ;
pWorldPacket->dwSize = sizeof(*pPacket) ;
g_lpDBSock->bSend(pWorldPacket) ;
}
//
// WORLD SERVER PACKET貿府 Functions
//
friend void WorldPacket_Nothing (_LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PlayerIn (_LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // PLAYER BASE
friend void WorldPacket_PlayerInvetory ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // PLAYER INVETORY
friend void WorldPacket_PlayerSkill ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // PLAYER SKILL
friend void WorldPacket_QuestList ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // QUEST LIST
friend void WorldPacket_QuestGlobalValue ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // QUEST GLOBAL VALUE
friend void WorldPacket_PlayerOut ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // PLAYER OUT
friend void WorldPacket_PlayerMapOut ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // MAP OUT
friend void WorldPacket_MapServerStop ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_WorldServerRecovery ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PlayerClose ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_ItemSlot ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); //ITEM SLOT //Jason 2004-06-01
//
// Party包訪 Funcions
//
friend void WorldPacket_PartyCreate ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyJoin ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyLeave ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyDelete ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyRefresh ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyList ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyChat ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyQuestIsAlive ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_PartyQuestMapChange ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_NoticeMsg ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
//
// 辨靛 包訪 Function
//
friend void WorldPacket_GuildCreate ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildJoin ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_LeaveGuild ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_KickMember ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildInfor ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildDisband ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildForceDisband ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildAppointMaster ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildForceKickMember( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildMarkChange ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildForceMarkChange( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildMember ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildChangeExp ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildNoticeSet ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildInforChange ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildInforServer ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildSkill ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); //ITEM SLOT //Jason 2004-06-01
#ifdef DEF_GUILDWAR
friend void WorldPacket_GuildWar ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // 辨靛傈
friend void WorldPacket_GuildArmistice ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext ); // 辨靛傈
#endif
//
// 模備 包訪 Fuction
//
friend void WorldPacket_FriendReg ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_FriendDismiss ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_FriendInfor ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
//
// 葷捧厘 Function
//
friend void WorldPacket_FightzoneList ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_FightzoneReserve ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_FightzoneMatchStart ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
//
// 酒瘤飄 Function
//
#ifdef DEF_AZIT
friend void WorldPacket_AzitStatusList ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_AzitStatusUpdate ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_AzitWarPropose ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_AzitChangeGM ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_AzitIncome ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_AzitTaxChange ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
#endif
//
// 蠟聰農 酒撈袍
//
#ifdef DEF_UNIQUEITEM
friend void WorldPacket_UniqueItemList ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_UniqueItemUpdate ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
#endif
//
// 辨靛 芒絆 Function
//
friend void WorldPacket_MenuAction ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildBankInfo ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildBankGoldInOut ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
#ifdef DEF_GUILDBANK
friend void WorldPakcet_GuildInventoryList ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
friend void WorldPacket_GuildInventoryAct ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
#endif
#ifdef DEF_NPCCARD
friend void WorldPacket_NPCCardInfo ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
#endif
#ifdef DEF_GUILDRANKDUB
friend void WorldPacket_GuildRankDub ( _LPDBSOCK lpWorldSock, _LPPER_BULK_IO_CONTEXT lpIOContext );
#endif
};
////////////////////////////////////////////////////////////////////////////////////////
// NOTENOTE: 輯滾 加檔 氫惑闌 困秦 竊薦 器牢磐 葷儈
////////////////////////////////////////////////////////////////////////////////////////
typedef struct
{
void ( *proc) (_LPDBSOCK LP, _LPPER_BULK_IO_CONTEXT lpIOContext);
} ONDBTRANSFUNC;
/////////////////////////////////////////////////////////////////////////////
#endif // !defined(_DBSocket_H_)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -