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

📄 mapserversocket.cpp

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

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

#include <mstcpip.h>

#ifdef DEF_SECURITYPACKET
	#include "17CryptServer.h"
	#include "Crypt.h"					//	Crypt	Function
	CRegCrypt crypt;
#endif

#include <WinVer.h>

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

#pragma comment(compiler)

#ifdef DEF_SIMULATION
	static NPC * lpSampleNPC;
#endif 


HANDLE		g_hIOCP;

_LPCFIGHTZONEMANAGER  g_lpFightzoneManager = NULL ;

ONTRANSFUNC	OnTransFunc[DEF_MAXMAPACKET] ;

extern void UserLog(_LPSOCKET_FD p, const char *pszParam, ...); //Jason 2004-07-22

////////////////////////////////////////////////////////////////////////////////////////
//	Global 函荐 
////////////////////////////////////////////////////////////////////////////////////////
extern	WORD		MAPSERVER_VERSION;

extern HWND				g_MainHwnd;
extern HINSTANCE		g_hInstance;
extern _LPDBSOCK		g_lpDBSock ;
extern _LPUDPSOCKET		g_lpUdpSock;

extern ServerMem		*g_pServerMem;
extern _LPCLOGMANAGER	g_lpLog ;

CDBConnection			g_AccountDB;				//	AccountD Database Connect

Map						*g_pMap;					//	MAP 包府 (User捞悼)
BaseData				g_Base;						//	Data Base 包访

SafeList				*g_AIMsgList[MAX_MAPLAYER];	// AI贸府侩 Msg (NPC 侩)


////////////////////////////////////////////////////////////////////////////////////////
//	Socket Validity
//	
////////////////////////////////////////////////////////////////////////////////////////
bool IsSocketValidity( _LPSOCKET_FD pSocketFD )
{
	if(!pSocketFD								)	return	false;
	
	if( pSocketFD->dwMagicNum	!=	MAGIC_NUM	)	
	{
		ErrorMsg("(X) IsSocketValidity :Socket Magic Num Error");
		return	false;
	}

	if( pSocketFD->bClose						)	return	false;	
	if( pSocketFD->socket == INVALID_SOCKET		)	return	false;

	return true;
}



////////////////////////////////////////////////////////////////////////////////////////
//	Socket Validity
//	
////////////////////////////////////////////////////////////////////////////////////////
bool IsPlayerConnect( _LPSOCKET_FD pSocketFD )
{
	if(!pSocketFD								)	return	false;
	
	if( pSocketFD->dwMagicNum	!=	MAGIC_NUM	)	
	{
		ErrorMsg("(X) IsSocketValidity :Socket Magic Num Error");
		return	false;
	}

	if( pSocketFD->bClose						)	return	false;	
	if( pSocketFD->socket == INVALID_SOCKET		)	return	false;

	if( pSocketFD->PlayerStatus != CONNECT_START )	return	false;

	return true;
}

////////////////////////////////////////////////////////////////////////////////////////
//	 Connect 包访 累诀 thread
////////////////////////////////////////////////////////////////////////////////////////
unsigned __stdcall Thread_Accept(LPVOID lpVoid)
{

	MapServerSocket* pMapServerSocket = (MapServerSocket*)lpVoid;

	if( pMapServerSocket )
	{
		pMapServerSocket->WorkAccept();
	}

	return 0;
}

////////////////////////////////////////////////////////////////////////////////////////
// IOCP 包访 累诀 thread
////////////////////////////////////////////////////////////////////////////////////////
unsigned __stdcall Thread_Iocp(LPVOID lpVoid)
{
	MapServerSocket* pMapServerSocket = (MapServerSocket*)lpVoid;


	if( pMapServerSocket )
	{
		pMapServerSocket->WorkIocp();
	}

	return 0;
}

////////////////////////////////////////////////////////////////////////////////////////
// IO 肯丰等饶 贸府窍绰 Thread
////////////////////////////////////////////////////////////////////////////////////////
unsigned __stdcall Thread_IOReadCompleted(LPVOID lpVoid)
{

	MapServerSocket* pMapServerSocket = (MapServerSocket*)lpVoid;


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

	return 0;
}

////////////////////////////////////////////////////////////////////////////////////////
//	Item包府 Thread
////////////////////////////////////////////////////////////////////////////////////////
unsigned __stdcall Thread_WorkTick(LPVOID lpVoid)
{

	MapServerSocket* pMapServerSocket = (MapServerSocket*)lpVoid;

	if( pMapServerSocket )
	{
		pMapServerSocket->WorkTick();
	}

	return 0;
}



////////////////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
////////////////////////////////////////////////////////////////////////////////////////
MapServerSocket::MapServerSocket()
{	
	m_bPKMode		= FALSE;						// NON-PK Mode

	m_pSendIOPool		= NULL;						// IO
	m_pRecvIOPool		= NULL;						// IO

	m_hIOCP			= NULL;							// IOCP handle
	
	for( DWORD i=0 ; i < MAX_WORKER_THREAD ; i++ )	// IOCP Work Thread Handle
	{
		m_hIOCPThreads[i] = NULL;						
	}

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


	//	Read  IO Completed
	m_hReadEventCompleted		= NULL;				// IO 肯丰登菌澜阑 舅覆

	m_listReadCompleted.RemoveAll();

	m_SocketListen				= INVALID_SOCKET;	// Listen Socket

#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)
	m_listHackingConnection.RemoveAll();
#endif
}

////////////////////////////////////////////////////////////////////////////////////////
//	MapServerSocket 秦力
//	
//	-	Delete Map NPC 
//	-	Delete Item
////////////////////////////////////////////////////////////////////////////////////////
MapServerSocket::~MapServerSocket()
{

#ifdef DEF_AZITSIMULATION
	// 辑滚 辆丰矫 技陛阑 历厘茄促.
	Batch_AzitTaxSave() ;
#endif 

	//	--------------------------------------------------------------------------------
	//	Close IOCP Handle
	//	--------------------------------------------------------------------------------

	if( g_hIOCP )
	{
		for( DWORD i = 0; i < m_dwThreadCount; i++)
		{
			PostQueuedCompletionStatus(g_hIOCP, 0, 0, NULL);
		}
	}
	CLOSEHANDLE(g_hIOCP);					// IOCP handle	

	SetEvent(m_hReadEventCompleted);	

	
	CLOSEEVENT(m_hReadEventCompleted);	
	CLOSESOCKET(m_SocketListen);			// Listen Socket	秦力
	
	//	--------------------------------------------------------------------------------
	//	秦寸 Memory俊辑 秦力 矫糯
	//
	//	-	荤侩磊 Memory甫 眠饶 昏力 矫糯 
	//	--------------------------------------------------------------------------------
	if( m_listConnection.GetCount() > 0 )
	{

		POSITION pos = m_listConnection.GetHeadPosition();

		while( pos )
		{
			_LPSOCKET_FD	pTempSocket = (_LPSOCKET_FD)m_listConnection.GetNext(pos);

			//	Memory啊 蜡瓤茄 版快
			if( !IsBadReadPtr( 	pTempSocket, sizeof(_SOCKET_FD) ) )
			{
				ReleaseSocketContext( pTempSocket );
			}
		}
	}

	if( m_listReadCompleted.GetCount() > 0 )
	{
		POSITION pos = m_listReadCompleted.GetHeadPosition();

		while( pos )
		{
			_LPPER_IO_CONTEXT	lpIOContext = (_LPPER_IO_CONTEXT)m_listReadCompleted.GetNext(pos);

			ReleaseIOContext(lpIOContext);
		}

	}

	m_listConnection.RemoveAll();	
	m_listReadCompleted.RemoveAll();

#if defined(DEF_SPEEDHACK) || defined(DEF_KORSPEEDHACK)

	if( m_listHackingConnection.GetCount() > 0 )
	{

		POSITION pos = m_listHackingConnection.GetHeadPosition();

		while( pos )
		{
			_LPSOCKET_FD	pTempSocket = (_LPSOCKET_FD)m_listHackingConnection.GetNext(pos);

			//	Memory啊 蜡瓤茄 版快
			if( !IsBadReadPtr( 	pTempSocket, sizeof(_SOCKET_FD) ) )
			{
				ReleaseSocketContext( pTempSocket );
			}
		}
	}

	m_listHackingConnection.RemoveAll();
#endif
	
	//	--------------------------------------------------------------------------------
	//	Memory Pool Delete
	//	--------------------------------------------------------------------------------

	SAFE_DELETE< CMemPool<_PER_IO_CONTEXT> > (&m_pSendIOPool) ;
	SAFE_DELETE< CMemPool<_PER_IO_CONTEXT> > (&m_pRecvIOPool) ;

#ifdef DEF_SECURITYPACKET

	_17DeInit() ;

#endif

}


////////////////////////////////////////////////////////////////////////////////////////
//	Initialize
//
//		-	Map Load
//		-	Event
//		-	Network
//		-	DataBase
//		-	Create Thread
////////////////////////////////////////////////////////////////////////////////////////
bool MapServerSocket::Initialize()
{
	m_bPKMode	= _Module.m_nPKMode;		//	PK Mode Setting

	srand( (unsigned)time( NULL ) );		//	Random 窃荐甫 檬扁拳 矫糯 

	//
	//	Map Initialize
	//
	if( !g_pMap->Initialize()	)	return false;

	//
	//	Event Initialize 
	//
	if( !InitializeEvent() )	
	{
		ErrorMsg("(X) Map Server : InitializeEvent" );
		return false;	
	}

	//
	//	Network Initialize
	//
	if( !InitializeNetwork( _Module.m_szMapIP,  _Module.m_nMapPORT ) )	
	{
		ErrorMsg("(X) Map Server : InitializeNetwork");
		return false;	
	}
	
	//
	//	Create Thread
	//
	if( !InitializeThread()	)	
	{
		ErrorMsg("(X) MapServer : InitializeThread");
		return false;		
	}
	
	//
	//	DB俊 SERVER 矫累阑 殿废 
	//
	DB_ServerStart();							
	
	InitializeFP() ;


#ifdef DEF_KUMA_GAMBLE	

	m_Gamble.InitGambleLuck( TRUE );

#endif
	
	ErrorMsg( "[Ver %d] Starting Map Server - %d port >>--", MAPSERVER_VERSION, _Module.m_nMapPORT );

	return true;
}



////////////////////////////////////////////////////////////////////////////////////////
//	Jason 2004-08-26-china
////////////////////////////////////////////////////////////////////////////////////////
void MapServerSocket::ShutdownServer()
{
	//	--------------------------------------------------------------------------------
	//	Close IOCP Handle
	//	--------------------------------------------------------------------------------
	if( g_hIOCP )
	{
		for( DWORD i = 0; i < m_dwThreadCount; i++)
		{

⌨️ 快捷键说明

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