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

📄 dbsocket.cpp

📁 韩国英雄王座倒闭后流出来部分源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
////////////////////////////////////////////////////////////////////////////////////////
//	DBSocket.cpp : implementation file
//
//
//
////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CLog.h"
#include "DBSocket.h"
#include "CFightZone.h"
#include "PacketCrypt.h"
#include "ActiveQuest.h"
#include "ServerMem.h"
#include "MapServerSocket.h"

#ifdef DEF_AZIT
	#include "AzitManager.h"
#endif

#ifdef DEF_UNIQUEITEM
	#include "UniqueManager.h"
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif




WORD MAPSERVER_VERSION  ;

ONDBTRANSFUNC	OnTransFunc[DEF_MAXWORLDPACKET] ;

////////////////////////////////////////////////////////////////////////////////////////
//	Extern Value
////////////////////////////////////////////////////////////////////////////////////////
extern	HANDLE				g_hIOCP ;
extern	HWND				g_MainHwnd;

extern _LPCFIGHTZONEMANAGER  g_lpFightzoneManager ;
extern	MapServerSocket		*g_pServer;
extern	_LPDBSOCK			g_lpDBSock;		//	2003.08.04 Duke Kim
extern	Map					*g_pMap;		//	MAP 包府 (User捞悼)
extern	ServerMem			*g_pServerMem;
extern	BaseData			g_Base;			//	Data Base 包访	//Jason 2004-06-01

extern _LPCLOGMANAGER		g_lpLog ;				//	Log


////////////////////////////////////////////////////////////////////////////////////////
// IO 肯丰等饶 贸府窍绰 Thread
////////////////////////////////////////////////////////////////////////////////////////
unsigned __stdcall WorldServer_IOReadCompletedThread(LPVOID lpVoid)
{
	_LPDBSOCK pDBServer = (_LPDBSOCK)lpVoid;

	if( pDBServer )
	{
		pDBServer->WorkReadCompleted();
	}

	return 0;
}


////////////////////////////////////////////////////////////////////////////////////////
//	荤侩瞪 函荐甸阑 檬扁拳 矫糯
//
//
////////////////////////////////////////////////////////////////////////////////////////
DBSocket::DBSocket()
{
	m_nNowSocketNum				= 0;

	for( int i=0; i < MAX_WORLD_SOCKET; i ++ )
	{
		m_bSocketStatus[i]		=	false;	//	SOCKET狼 楷搬 惑怕
		m_Socket[i]				=	NULL;	//	Connected Socket
		m_SocketFD[i]			=	NULL;	//	Socket FD
	}

	m_pWorldIOPool				= NULL;		//	IO



	m_dwThreadCount				= 0;		//	角 iocp work thread 肮荐

	m_hReadEventCompleted		= NULL;		//	IO 肯丰登菌澜阑 舅覆
	m_listReadCompleted.RemoveAll();		//	肯丰等 IO 钮, 贸府甫 扁促赴促.

//	m_RecoveryList.RemoveAll();				//	Recovery List	
}


////////////////////////////////////////////////////////////////////////////////////////
//	1. Memory Free 何盒阑 犬牢
//
//	- 包访 风凭阑 埃家拳 矫糯
////////////////////////////////////////////////////////////////////////////////////////
DBSocket::~DBSocket()
{	
	DWORD i;

	//	--------------------------------------------------------------------------------
	//	佬绊 乐绰 颇老捞 乐阑锭
	//	--------------------------------------------------------------------------------
	if( m_listReadCompleted.GetCount() > 0 )
	{
		POSITION pos = m_listReadCompleted.GetHeadPosition();

		while( pos )
		{

			ReleaseIOContext((_LPPER_BULK_IO_CONTEXT)m_listReadCompleted.GetNext(pos));
		}
	}


	for(i=0; i < MAX_WORLD_SOCKET; i ++ )
	{
		if(m_SocketFD[i])
			ReleaseSocketContext(m_SocketFD[i] ) ;
	}


	CLOSEEVENT(m_hReadEventCompleted);	

	m_listReadCompleted.RemoveAll();


	SAFE_DELETE< CMemPool<_PER_BULK_IO_CONTEXT> > (&m_pWorldIOPool) ;


	SAFE_DELETE <CFightzoneManager>  (&g_lpFightzoneManager) ;
	

	SocketPool_Delete();							// Delete Socket Pool
}



////////////////////////////////////////////////////////////////////////////////////////
//	Initialize
//	
//	-	Create Socket Pool
//	-	Event
//	-	Network (UDP)
//	-	Create Thread
//
//	* Error Msg眠啊 矫糯
////////////////////////////////////////////////////////////////////////////////////////
BOOL DBSocket::bInit()
{
	/*
	 *	Create Socket Pool	
	 */
	if( !SocketPool_Create()	)	
	{
		ErrorMsg("(X) DB Socket Create Socket Pool" );
		return FALSE;		
	}

	/*
	 *	Allocation Memory 
	 */
	if( !bMemAlloc()			)	
	{
		ErrorMsg("(X) DB Socket Allocation Memory" );
		return FALSE;		
	}

	/*
	 *	Event Initialize
	 */
	if( !InitializeEvent()		)	
	{
		ErrorMsg("(X) DB Socket Initialize Event");
		return FALSE;			
	}

	/*
	 *	Create Thread	
	 */
	if( !InitializeThread()		)	
	{
		ErrorMsg("(X) DB Socket Initialize Thread");
		return FALSE;		
	}

	InitFuctionPoint() ;
	

	/*
	 *	World Server Connect
	 */	
	m_nStart	=	0;

	for(int  i=0 ; i < MAX_WORLD_SOCKET; i ++ )
	{
		if ( !bConnect( i  , false ) ) return FALSE ;		

		m_nStart	=	1;
	}

	//
	//	荤捧厘 甘阑 啊瘤绊 乐栏搁 荤捧厘 沥焊甫 焊辰促	
	//
	//	-	甘阑 咯矾俺 啊瘤绊 乐绰 版快 巩力啊 乐阑荐 乐澜
	//
	if (g_pMap->m_bHaveFightzone)
	{
		WorldSend_FightzoneInfor() ;
	}


	ErrorMsg("Success to initialize the db socket.");

	return TRUE;
}



////////////////////////////////////////////////////////////////////////////////////////
//	窃荐 器牢磐俊 秦寸 窃荐甫 殿废矫糯
//
////////////////////////////////////////////////////////////////////////////////////////
void DBSocket::InitFuctionPoint()
{
	for(int i =0; i < DEF_MAXWORLDPACKET; i++ )
	{
		OnTransFunc[i].proc	= WorldPacket_Nothing;
	}

	//
	//	弥檬 肺弊牢 矫 贸府 Packet
	//
	OnTransFunc[ZW_PLAYERLOGIN_REP			].proc	= WorldPacket_PlayerIn;

	OnTransFunc[ZW_PLAYERINVENTORY_REP		].proc	= WorldPacket_PlayerInvetory;
	OnTransFunc[ZW_PLAYERSKILL_REP			].proc	= WorldPacket_PlayerSkill;

	OnTransFunc[ZW_QUESTLIST_REP			].proc	= WorldPacket_QuestList;
	OnTransFunc[ZW_QUESTGLOBALVALUE_REP		].proc	= WorldPacket_QuestGlobalValue;
		
	OnTransFunc[ZW_PLAYERLOGOUT_REP			].proc	= WorldPacket_PlayerOut;			//	Player沥焊 DB历厘 饶 World Server肺 何磐 Message 罐澜
	OnTransFunc[ZW_PLAYERMAPOUT_REP			].proc	= WorldPacket_PlayerMapOut;			//	Player沥焊 DB历厘 饶 World Server肺 何磐 Message 罐澜


	OnTransFunc[ZW_MAPSERVERSTOP			].proc	= WorldPacket_MapServerStop;		//	辑滚 辆丰 Message备泅 
	OnTransFunc[ZW_RECOVERYPLAYER_ASK		].proc	= WorldPacket_WorldServerRecovery;	//	World Server 汗备 MODE

	OnTransFunc[ZW_PLAYERCLOSE				].proc	= WorldPacket_PlayerClose;			//	World Server俊辑 碍力 Close皋矫瘤甫 罐篮 版快 

	OnTransFunc[ZW_PARTYCREATE_REP			].proc	= WorldPacket_PartyCreate;			//	PARTY CREATE	
	OnTransFunc[ZW_PARTYJOIN_REP			].proc	= WorldPacket_PartyJoin;			//	PARTY JOIN
	OnTransFunc[ZW_PARTYLEAVE_REP			].proc	= WorldPacket_PartyLeave;			//	PARTY LEAVE
	OnTransFunc[ZW_PARTYDELETE_REP			].proc	= WorldPacket_PartyDelete;			//	PARTY DELETE

	OnTransFunc[ZW_PARTYREFRESH_REP			].proc	= WorldPacket_PartyRefresh;			//	PARTY REFRESH
	OnTransFunc[ZW_PARTYLIST_REP			].proc	= WorldPacket_PartyList;			//	PARTY LIST
	OnTransFunc[ZW_PARTYCHAT_ASK			].proc	= WorldPacket_PartyChat;			//	PARTY CHAT



	//	2004-10-16	by kuma 颇萍 涅胶飘 混酒乐绰瘤..	
	OnTransFunc[ZW_PARTYQUESTISALIVE_REP	].proc	= WorldPacket_PartyQuestIsAlive;	//  颇萍 涅胶飘 角青吝 眉农

	//	2004-10-18	by kuma 颇萍 涅胶飘 函版荤亲阑 促弗 甘辑滚俊 舅妨林绰巴 罐绰 何盒
	OnTransFunc[ZW_PARTYQUESTMAPCHANGE_REP	].proc= WorldPacket_PartyQuestMapChange;	// 颇萍 涅胶飘 函版郴侩 贸府


	//
	//	辨靛 眠啊	(2003-9-16 badajoa)
	//
	OnTransFunc[ZW_CREATEGUILD_REP			].proc	= WorldPacket_GuildCreate;			//	辨靛 积己 
	OnTransFunc[ZW_JOINGUILD_REP			].proc	= WorldPacket_GuildJoin;			//	辨靛 曼咯
	OnTransFunc[ZW_LEAVEGUILD_REP			].proc	= WorldPacket_LeaveGuild;			//	辨靛 呕硼
	OnTransFunc[ZW_KICKMEMBER_REP			].proc	= WorldPacket_KickMember;			//	辨靛 碍硼
	OnTransFunc[ZW_GUILDINFOR_REP			].proc	= WorldPacket_GuildInfor;			//	辨靛 沥焊
	OnTransFunc[ZW_DISBANDGUILD_ASK			].proc	= WorldPacket_GuildDisband;			//	辨靛 秦眉 
	OnTransFunc[ZW_FORCEDISBANDGUILD_ASK	].proc	= WorldPacket_GuildForceDisband;	//	辨靛 秦眉 
	OnTransFunc[ZW_GUILDAPPOINTMASTER_REP	].proc	= WorldPacket_GuildAppointMaster;	//	何 辨靛厘 夸没  
	OnTransFunc[ZW_FORCEKICKMEMBER_ASK		].proc	= WorldPacket_GuildForceKickMember;	//	辨靛盔 碍硼
	OnTransFunc[ZW_GUILDMARKCHANGE_REP		].proc	= WorldPacket_GuildMarkChange;		//	辨靛 付农 函版
	
	OnTransFunc[ZW_FORCEGUILDMARKCHANGE		].proc	= WorldPacket_GuildForceMarkChange;	//	辨靛 付农 函版	

	OnTransFunc[ZW_GUILDMEMBER_REP			].proc	= WorldPacket_GuildMember;			//	辨靛 沥焊

	OnTransFunc[ZW_GUILDCHANGEEXP_REP		].proc	= WorldPacket_GuildChangeExp;		//	辨靛 版氰摹
	OnTransFunc[ZW_GUILDNOTICESET_REP		].proc	= WorldPacket_GuildNoticeSet;		//	辨靛 版氰摹
	OnTransFunc[ZW_GUILDINFORCHANGE_ASK		].proc	= WorldPacket_GuildInforChange;		//	辨靛 沥焊

	OnTransFunc[ZW_GUILDINFORSERVER_REP		].proc	= WorldPacket_GuildInforServer;		//	辨靛 沥焊
	
	OnTransFunc[ZW_GUILDSKILL_REP			].proc	= WorldPacket_GuildSkill;

#ifdef DEF_GUILDWAR
	OnTransFunc[ZW_GUILDWAR_REP				].proc	= WorldPacket_GuildWar;				//	辨靛傈
	OnTransFunc[ZW_GUILDARMISTICE_REP		].proc	= WorldPacket_GuildArmistice;		//	绒傈 力狼
#endif
	
	//	
	//	模备 矫胶袍
	//	
	OnTransFunc[ZW_FRIENDREG_REP			].proc	= WorldPacket_FriendReg;			//	模备 殿废
	OnTransFunc[ZW_FRIENDDISMISS_REP		].proc	= WorldPacket_FriendDismiss;		//	模备 殿废 秦瘤
	OnTransFunc[ZW_FRIENDINFOR_REP			].proc	= WorldPacket_FriendInfor;			//	模备 府胶飘

	//
	//	硅撇 矫胶袍
	//
	OnTransFunc[ZW_FIGHTZONELIST_REP		].proc	= WorldPacket_FightzoneList;		//	荤捧厘 府胶飘
	OnTransFunc[ZW_FIGHTZONERESERVE_REP		].proc	= WorldPacket_FightzoneReserve;		//	荤捧厘 抗距 搬苞
	OnTransFunc[ZW_FIGHTZONEMATCHSTART_ASK	].proc= WorldPacket_FightzoneMatchStart ;	 //  荤捧厘 悼累
		
	OnTransFunc[ZW_NOTICEMSG				].proc	= WorldPacket_NoticeMsg;			//	傍瘤 荤亲
	
	OnTransFunc[ZW_ITEMSLOTLIST_REP			].proc	= WorldPacket_ItemSlot;				//	酒捞袍 浇吩 //Jason 2004-06-01


	//
	//	酒瘤飘 包府	(眠饶 包访 MSG甫 沥府窃)
	//

#ifdef DEF_AZIT

	OnTransFunc[ZW_AZITSTATUSLIST_REP		].proc	= WorldPacket_AzitStatusList;		//	酒瘤飘 府胶飘 沥焊
	OnTransFunc[ZW_AZITSTATUSUPDATE_REP		].proc  = WorldPacket_AzitStatusUpdate;		//	酒瘤飘 惑怕 诀单捞飘
	
	OnTransFunc[ZW_AZITWARPROPOSE_REP		].proc  = WorldPacket_AzitWarPropose;		//	酒瘤飘 脚没 搬苞
	
	OnTransFunc[ZW_AZITINCOME_REP			].proc  = WorldPacket_AzitIncome;			//	酒瘤飘 荐涝 陛咀
	
	OnTransFunc[ZW_AZITTAXCHANGE_REP		].proc	= WorldPacket_AzitTaxChange;		//	酒瘤飘 技陛 函版 馆券 蔼

	OnTransFunc[ZW_AZITCHANGEGM_REP			].proc	= WorldPacket_AzitChangeGM;			//	酒瘤飘 沥焊 函版 (GM)

#endif
	
	//
	//	辨靛 芒绊
	//
#ifdef DEF_GUILDBANK	
	OnTransFunc[ZW_MENUACTION_REP			].proc	= WorldPacket_MenuAction;			//	酒瘤飘 府胶飘 沥焊		
	OnTransFunc[ZW_GUILDINVENTORYLIST_REP	].proc	= WorldPakcet_GuildInventoryList;	//	辨靛 牢亥配府 沥焊 免仿
	OnTransFunc[ZW_GUILDBANKINFO_REP		].proc	= WorldPacket_GuildBankInfo;		//	辨靛 桂农 沥焊
	OnTransFunc[ZW_GUILDBANKGOLDINOUT_REP	].proc	= WorldPacket_GuildBankGoldInOut;	//	辨靛 芒绊 涝/免仿
	OnTransFunc[ZW_GUILDINVENTORYACT_REP	].proc	= WorldPacket_GuildInventoryAct;	//	辨靛 桂农 牢亥配府
#endif


#ifdef DEF_NPCCARD
	OnTransFunc[ZW_NPCCARDINFO_REP			].proc  = WorldPacket_NPCCardInfo;			//	NPC 墨靛 魄概
#endif
	
#ifdef DEF_GUILDRANKDUB
	OnTransFunc[ZW_GUILDRANKDUB_REP			].proc  = WorldPacket_GuildRankDub;			//	NPC 墨靛 魄概
#endif

	//
	//	蜡聪农 酒捞袍
	//
#ifdef DEF_UNIQUEITEM
	OnTransFunc[ZW_UNIQUEITEMLIST_REP		].proc	= WorldPacket_UniqueItemList;		//	蜡聪农 酒捞袍 府胶飘
	OnTransFunc[ZW_UNIQUEITEMUPDATE_REP		].proc	= WorldPacket_UniqueItemUpdate;		//	蜡聪农 酒捞袍 诀单捞飘
#endif

}


////////////////////////////////////////////////////////////////////////////////////////
//	Memory allocation
//
//	-	2003.08.31 Duke Kim		Memory POOL *10 眠啊
////////////////////////////////////////////////////////////////////////////////////////
bool DBSocket::bMemAlloc()
{

#ifdef DEF_NEWREGISTRY 
	m_pWorldIOPool = new CMemPool<_PER_BULK_IO_CONTEXT>( _Module.m_dwMaxUser );
#else
	m_pWorldIOPool = new CMemPool<_PER_BULK_IO_CONTEXT>( MAX_SOCKET_CONTEXT );
#endif

	if( !m_pWorldIOPool )
	{
		ErrorMsg("memory alloc error .1= %d\n",GetLastError());
		return false;
	}


	return true ;
}



////////////////////////////////////////////////////////////////////////////////////////
//	Event Module Initialize
////////////////////////////////////////////////////////////////////////////////////////
BOOL DBSocket::InitializeEvent()
{
	//
	//	Create IO Completed 
	//
	m_hReadEventCompleted = CreateEvent(NULL, FALSE, FALSE, NULL);

	if( !m_hReadEventCompleted )
	{
		ErrorMsg(TEXT("Error IOCompletedEvent Create. Error code = %d"),GetLastError());
		return FALSE;
	}


	return TRUE;
}


////////////////////////////////////////////////////////////////////////////////////////
//	Thread Inistialize
//	-----------------------------------------
//	1. IOCP Work Thread
//	2. Accept Work Thread
//	3. Read Work Thread
//	4. Send Work Thread	
////////////////////////////////////////////////////////////////////////////////////////
BOOL DBSocket::InitializeThread()
{

	//
	//	IOCP Work Thread
	//
	unsigned dwThreadID = 0;
    SYSTEM_INFO         systemInfo;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -