⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbsocket.h

📁 韩国英雄王座倒闭后流出来部分源代码
💻 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 + -