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

📄 socketlayer.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
字号:
// SocketLayer.cpp: interface for the SocketLayer class.
/*/////////////////////////////////////////////////////////////////////////////
	Socket层,负责进行数据打包、解包;编码、解码;
	李亦
	2006.06.21
/*//////////////////////////////////////////////////////////////////////////////

//#include "Platforms.h"

#include "server/net/NetTCPModule.h"
#include "server/net/IOTCPModule.h"
#include "server/net/IOUDPModule.h"
#include "server/net/AuthSocket.h"
#include "server/net/AuthNull.h"
#include "server/encrypt/EncryptEngine.h"
#include "server/encrypt/EncryptXORModule.h"
#include "server/encrypt/EncryptDESHashModule.h"
#include "server/SocketLayer.h"



namespace CS
{


#define SERVER_TICK		20

CAuthHandlerManager		SocketLayer::ms_authHandlerMan;
CEncryptHandlerManager	SocketLayer::ms_encryptHandlerMan;
CIOHandlerManager			SocketLayer::ms_ioHandlerMan;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

SocketLayer::SocketLayer()
:Thread(0,0,FALSE)
{
	m_pRecvCallBack			= NULL;
	m_pCommand					= NULL;
	//m_uIdleTimeOut				= 5000;
	//InitializeCriticalSection(&m_NetCritSec);
}

SocketLayer::~SocketLayer()
{
	if(m_pCommand)
		delete m_pCommand;

}


IMPLEMENT_CONOBJECT(SocketLayer);


void SocketLayer::Initialize()
{

	//m_pCommand=new CmdManager();
	//if(m_pCommand == NULL)
	//	return FALSE;
	//
	//m_pCommand->InitializeCommandDispatcher();
	//m_pCommand->RegisterNativeCommands();

	ms_ioHandlerMan.Insert(NetTCPModule::GetIOHandler());
	ms_ioHandlerMan.Insert(IOTCPModule::GetIOHandler());
	ms_ioHandlerMan.Insert(IOUDPModule::GetIOHandler());

	ms_encryptHandlerMan.Insert(EncryptXORModule::GetEncryptEngine());
	ms_encryptHandlerMan.Insert(CEncryptDESHashModule::GetEncryptEngine());

	ms_authHandlerMan.Insert(AuthNull::GetNullAuthHandler());


}


void SocketLayer::Destroy()
{
}


CAuthSocket * SocketLayer::CreateAuthSocket(char *pszNetMod, char *pszEncryption, char *pszAuth)
{
	CS_IOHANDLER *pioh = ms_ioHandlerMan.GetHandlerByID(pszNetMod);
	AssertWarn(pioh,"确认调用了initialze进行初始化了");
	if(pioh==NULL) 
		return NULL;
	
	CS_ENCRYPTHANDLER *peh = ms_encryptHandlerMan.GetEngineByID(pszEncryption);
	AssertWarn(peh,"确认调用了initialze进行初始化了");
	if(peh==NULL)
		return NULL;
	
	CS_AUTHHANDLER *pah   = ms_authHandlerMan.GetHandlerByID(pszAuth);
	AssertWarn(pah,"确认调用了initialze进行初始化了");
	if(pah==NULL)
		return NULL;

	
	CAuthSocket *pAuthSock  = new CAuthSocket(pah , pioh, peh);

	if(pAuthSock != NULL) 
		OnCreateAuthSocket(pAuthSock);

	return pAuthSock;

}




CAuthSocket * SocketLayer::ConnectAuthSocket(INTERACT_CONN_PROC *pIC, int nUserId, HWINDOW hParent, LPCSTR svBindStr, LPCSTR svNetMod, LPCSTR svEncryption, LPCSTR svAuth)
{
	char szNetMod[256];
	char szBindStr[256];
	char szEncryption[256];
	char szAuth[256];
	
	if(pIC!=NULL) 
	{
		if((*pIC)(hParent,svBindStr,svNetMod,svEncryption,svAuth,szBindStr,szNetMod,szEncryption,szAuth) < 0)
			return NULL;
	} 
	else 
	{
		if(svNetMod==NULL || svBindStr==NULL || svEncryption==NULL || svAuth==NULL) 
			return NULL;
		
		dStrncpy(szNetMod, svNetMod,256);
		dStrncpy(szBindStr, svBindStr,256);
		dStrncpy(szEncryption, svEncryption,256);
		dStrncpy(szAuth, svAuth,256);
	}
	
	CAuthSocket *pAuthSock = CreateAuthSocket(szNetMod,szEncryption,szAuth);
	if(pAuthSock==NULL) 
		return INVALID_AUTHPTR;

	if(pAuthSock->Connect(szBindStr,nUserId) != E_IOOK) 
	{
		delete pAuthSock;
		return INVALID_AUTHPTR;
	}
	
	return pAuthSock;
	
}



CAuthSocket* SocketLayer::ListenAuthSocket(INTERACT_LISTEN_PROC *pIL, int nUserId, HWINDOW hParent, LPCSTR svBindStr, LPCSTR svNetMod, LPCSTR svEncryption, LPCSTR svAuth)
{
	char szNetMod[256];
	char szBindStr[256];
	char szEncryption[256];
	char szAuth[256];

	if(pIL!=NULL) 
	{
		if((*pIL)(hParent,svBindStr,svNetMod,svEncryption,svAuth,szBindStr,szNetMod,szEncryption,szAuth) < 0)
			return NULL;
	} 
	else 
	{
		if(svNetMod==NULL || svBindStr==NULL || svEncryption==NULL || svAuth==NULL)
			return NULL;
		
		dStrncpy(szNetMod, svNetMod,256);
		dStrncpy(szBindStr, svBindStr,256);
		dStrncpy(szEncryption, svEncryption,256);
		dStrncpy(szAuth, svAuth,256);
	}

	CAuthSocket *pAuthSock = CreateAuthSocket(szNetMod,szEncryption,szAuth);
	if(pAuthSock==NULL) 
		return INVALID_AUTHPTR;

	if(pAuthSock->Listen(szBindStr,nUserId) != E_IOOK)
	{
		delete pAuthSock;
		return INVALID_AUTHPTR;
	}

	return pAuthSock;
}


};//namespace CS

⌨️ 快捷键说明

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