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

📄 mhnetwork.cpp

📁 墨香最新私服
💻 CPP
字号:
// MHNetwork.cpp: implementation of the CMHNetwork class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MHNetwork.h"
#include "mmsystem.h"
#include "ServerToolDoc.h"
#include "ServerToolView.h"

extern CServerToolView*	g_ServerToolView;

CMHNetwork* gNetwork = NULL;
HMODULE g_hBaseNetworkHandle = NULL;

GLOBALTON(CMHNetwork)

CMHNetwork::CMHNetwork()
{
	gNetwork = this;

	m_pBaseNetwork = NULL;
	memset( m_dwConnectionIndex, 0, sizeof(DWORD)*MAX_SERVERSET );
	memset( m_CheckSum, 0, sizeof(BYTE)*MAX_SERVERSET );

	m_hMainWnd = NULL;
}

CMHNetwork::~CMHNetwork()
{
	Release();
}

BOOL CMHNetwork::Init( HWND hWnd )
{
	m_hMainWnd = hWnd;
	
	HRESULT hr;
	
	char temp[256];
	strcpy( temp, GetDataDirectory() );
	strcat( temp, "BaseNetwork.dll" );
	//积己
	g_hBaseNetworkHandle = LoadLibrary( temp );

	DllGetClassObject_BaseNetwork	pNetFunc;
	pNetFunc = (DllGetClassObject_BaseNetwork)GetProcAddress(g_hBaseNetworkHandle,"DllGetClassObject");
	hr = pNetFunc(CLSID_SC_BASENETWORK_DLL, IID_SC_BASENETWORK_DLL, (void**)&m_pBaseNetwork);
		
	if( hr != S_OK )
	{
		MessageBox( NULL, "BASENETWORK.DLL Is Not Exist.", "Error", MB_OK );
		return FALSE;
	}
	
	//Network 檬扁拳 
	DESC_BASENETWORK Desc;	memset(&Desc,0,sizeof(Desc));
	Desc.wSockEventWinMsgID	= WM_SOCKEVENTMSG;	
	Desc.OnConnect			= OnCon;
	Desc.OnDisconnect		= OnDisCon;
	Desc.ReceivedMsg		= OnRecv;
	
	m_pBaseNetwork->InitNetwork( m_hMainWnd, MAX_SERVERSET, &Desc );

	if( m_pBaseNetwork == NULL )
		return FALSE;
	
	return TRUE;
}

void CMHNetwork::Release()
{
	AllDisconnect();
	SAFE_RELEASE( m_pBaseNetwork );

	if( g_hBaseNetworkHandle )
	{
		FreeLibrary( g_hBaseNetworkHandle );
		g_hBaseNetworkHandle = NULL;
	}
}

BOOL CMHNetwork::ConnectToServer( int serverset, char* ip, WORD port )
{	
	m_dwConnectionIndex[serverset] = m_pBaseNetwork->ConnectToServer(ip,port);
	if( !m_dwConnectionIndex[serverset] )
		return FALSE;

	return TRUE;
}

void CMHNetwork::Disconnect( int serverset )
{
	if( m_dwConnectionIndex[serverset] )
	{
		m_pBaseNetwork->CompulsiveDisconnect( m_dwConnectionIndex[serverset] );
		m_dwConnectionIndex[serverset] = 0;		
	}
}

void CMHNetwork::AllDisconnect()
{
	if( m_pBaseNetwork )
	{
		for( int i = 0; i < MAX_SERVERSET; ++i )
			Disconnect( i );
	}
}

void CMHNetwork::Send( int serverset, MSGROOT* pMsg, int MsgLen )
{
	pMsg->CheckSum = m_CheckSum[serverset]++;
	if( m_dwConnectionIndex[serverset] )
		m_pBaseNetwork->Send( m_dwConnectionIndex[serverset], (char*)pMsg, MsgLen );
}

void CMHNetwork::SendAll( MSGROOT* pMsg, int MsgLen )
{
	for( int i = 0; i < MAX_SERVERSET; ++i )
		Send( i, pMsg, MsgLen );
}

//-------------------------------------------------------------------------------------------------
void OnCon( DWORD dwConIndex )
{	
}

void OnDisCon( DWORD dwConIndex )
{
	for( int i = 0; i < MAX_SERVERSET; ++i )
	{
		if( gNetwork->m_dwConnectionIndex[i] == dwConIndex )
		{
			gNetwork->m_dwConnectionIndex[i] = 0;
			if( g_ServerToolView )
				g_ServerToolView->Disconnect( i );			
			break;
		}
	}
}

void OnRecv( DWORD dwConIndex, char* pMsg, DWORD msglen )
{
	MSGROOT* pTemp = (MSGROOT*)pMsg;

	BOOL bRecv = FALSE;
	for( int i = 0; i < MAX_SERVERSET; ++i )
	{
		if( gNetwork->m_dwConnectionIndex[i] == dwConIndex )
		{
			bRecv = TRUE;
			break;
		}		
	}

	if( g_ServerToolView && bRecv )
		g_ServerToolView->NetworkMsgParse( i, pTemp->Category, pTemp->Protocol, pMsg );
}

⌨️ 快捷键说明

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