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

📄 game_client.cpp

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 CPP
字号:
// Game_Client1.cpp: implementation of the Game_Client class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Game_Client.h"

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

Game_Client::Game_Client()
{
	m_locate_port	= 32321;
	m_server_ip		= inet_addr("192.168.1.7");
	m_server_port	= 32327;
	m_time_connecting	= 0;

	m_num_byte_recv		= 0;
	m_str_net_speed[0]	= 0;
	m_last_check_net_speed_time	= 0;

	m_id_player	= 0;
}

Game_Client::~Game_Client()
{

}
BOOL Game_Client::IsReady()
{
	NET_Session* ptr_session	= GetSession();
	return (ptr_session && ptr_session->is_ready());
}

BOOL Game_Client::Connect()
{
	if(!m_socket.Create(m_locate_port))
	{
//		if(g_ptr_net_lib_log)
//		g_ptr_net_lib_log->("无法创建通信接口!");
		return FALSE;// OnCancel();
	}
	m_socket.RunTransfersThread();
	NET_Session* ptr_session;
	ptr_session = m_socket.CreateUniqueSession(m_server_ip, m_server_port,1);
	if(ptr_session==NULL)
	{
		m_socket.Shutdown();
		//AfxMessageBox("无法创建与服务器的连接!");
		return FALSE;// OnCancel();
	}
	m_time_connecting	= 0;
	ptr_session->Connect();
//	m_status = "连接服务器...";

	return TRUE;
}

void Game_Client::Disconnect()
{
	m_socket.Shutdown();

}

void Game_Client::DoUpdate()
{
//	if(ptr_session==NULL)
//		return;
	Sys_Log(NULL, "update start %d", Sys_GetTime());
	NET_Session* ptr_session	= GetSession();
	NET_Packet* ptr_packet		= m_socket.PopRecvPacket();
	int a = m_socket.get_recv_packet_count();
	Sys_Log(NULL, "PopRecvPacket() end %d packet num = %d", Sys_GetTime(), a);
	while(ptr_packet)
	{
		m_num_byte_recv		+=	ptr_packet->getLen();
		uint16 cmd = ptr_packet->getCmd();
		switch(cmd)
		{
		case NLIBP_CONNECT:
			{//
//				Login();
			}
			break;
		case NLIBP_DISCONNECT:
			{//
				//m_status = "网络连接已经断开";
				m_socket.Shutdown();
			}
			break;
		case NLIBP_PING_RET:
			{
				//聊天信息
				char str[20];
				sprintf(str, "%d", ptr_session->get_net_delay());
				//OutputMessage("Ping ok! session(%d) delay = %d\r\n", pPacket->getUID(), m_ptr_udp_session->get_net_delay());
			}
			break;
		case NLIBP_CHECK_CONNECT:
			{
				uint32 uid	= ptr_packet->read32();
				time_t tm	= ptr_packet->read32();
				if(tm>30000)
				{//掉线
					//m_status = "网络连接故障!";
					m_socket.Shutdown();
				}
				else
				{
					if(ptr_packet->getUID()==0)
					{
						m_num_byte_recv		-=	ptr_packet->getLen();
						if(ptr_session)
							ptr_session->Ping();
					}
//					if(ptr_session && !ptr_session->is_ready())
//					{
//						ptr_session->Connect();
//						//m_status.Format("连接服务器...	超时 %d", tm/1000);
//						//UpdateData(FALSE);
//					}
				}
			}
			break;
		case GSP_SPEEK:
			{
				uint32 uid_speeker = ptr_packet->read32();
				const char* strSpeek = ptr_packet->readString();
				on_speek(uid_speeker, strSpeek);
			}
			break;
		case	GSP_HANDLE_PLACE:
			{
				//uint16 uid_player = ptr_packet->read16();
				void*	pData = ptr_packet->readData();
				on_handle_place(pData);
			}
			break;
		case	GSP_HANDLE_UNIT:
			{
				//uint16 uid_player = ptr_packet->read16();
				void*	pData = ptr_packet->readData();
				on_handle_unit(pData);
			}
			break;
		case GSP_LOGIN:
			{
				on_login(NULL);
			}
			break;
		case GSP_ADD_UNIT:
			{
				//uint16 uid_player = ptr_packet->read16();
				void*	pData = ptr_packet->readData();
				on_add_unit(pData);
			}
			break;
		case GSP_DEL_UNIT:
			{
				//uint16 uid_player = ptr_packet->read16();
				void*	pData = ptr_packet->readData();
				on_del_unit(pData);
			}
			break;
		}
		if(ptr_packet)
			delete(ptr_packet);
		ptr_packet		= m_socket.PopRecvPacket();
	}
//	Sys_Log(NULL, "process packets end %d", Sys_GetTime());
//	if(ptr_session && !ptr_session->is_ready())
//	{
//		m_time_connecting	++;
//		//m_status = "连接服务器...";
//		if(m_time_connecting%30==29)
//		{
//			ptr_session->Connect();
//		}
//		if(m_time_connecting>200)
//		{//无法连接服务器
//			//m_status = "无法连接服务器!";
//			m_socket.Shutdown();
//		}
//	}
	DWORD tm	= Sys_GetTime();
	if(m_last_check_net_speed_time==0)
	{
		m_last_check_net_speed_time	= tm;
		m_num_byte_recv	= 0;
	}
	else if(tm-m_last_check_net_speed_time>500)
	{
		sprintf(m_str_net_speed, "%.3f bps", (float)m_num_byte_recv*1000.0f/(tm-m_last_check_net_speed_time));
		m_last_check_net_speed_time	= tm;
		m_num_byte_recv	= 0;
	}
	Sys_Log(NULL, "update end %d", tm);
}

void Game_Client::Login(const char *strUser, const char *strPSW)
{
	NET_Session* ptr_session	= GetSession();
	if(ptr_session)
	{
		if(strUser==NULL || strUser[0]==0)
			strUser	= m_account.c_str();
		if(strPSW==NULL || strPSW[0]==0)
			strPSW	= m_password.c_str();
		NET_Packet*	pPacket		= new NET_Packet;
		pPacket->setCmd(GSP_LOGIN);
		pPacket->writeString(strUser);
		pPacket->writeString(strPSW);
		pPacket->write16(m_unit_type);//g_config.GetLong("MAIN", "unit_type"));
		ptr_session->PushSendPacket(pPacket);
	}

}
void Game_Client::Logout(uint32 uid)
{
	NET_Session* ptr_session	= GetSession();
	if(ptr_session)
	{
		NET_Packet*	pPacket		= new NET_Packet;
		pPacket->setCmd(GSP_LOGOUT);
		pPacket->write32(uid);
		ptr_session->PushSendPacket(pPacket);
	}
}

void Game_Client::on_login(void *pData)
{

}

void Game_Client::on_add_unit(void *pData)
{

}

void Game_Client::on_del_unit(void *pData)
{

}

void Game_Client::on_handle_place(void *pData)
{

}

void Game_Client::on_handle_unit(void *pData)
{

}
void Game_Client::query_speek(uint32 uid, const char* strSpeek)
{
		if(!IsReady())
			return;
		if(strSpeek==NULL||strSpeek[0]==0)
			return;
		NET_Session* ptr_session	= GetSession();
		NET_Packet*	pPacket		= new NET_Packet;
		pPacket->setCmd(GSP_SPEEK);
		pPacket->write32(m_id_player);
		pPacket->write32(uid);
		pPacket->writeString(strSpeek);
		ptr_session->PushSendPacket(pPacket);
}

void Game_Client::query_handle_place(STRUCT_HANDLE_PLACE* p)
{
		if(!IsReady())
			return;
		NET_Session* ptr_session	= GetSession();
		NET_Packet*	pPacket		= new NET_Packet;
		pPacket->setCmd(GSP_HANDLE_PLACE);
		pPacket->write32(m_id_player);
		pPacket->writeData(p, sizeof(STRUCT_HANDLE_PLACE));
		ptr_session->PushSendPacket(pPacket);
}

void Game_Client::query_handle_unit(STRUCT_HANDLE_UNIT* p)
{
		if(!IsReady())
			return;
		NET_Session* ptr_session	= GetSession();
		NET_Packet*	pPacket		= new NET_Packet;
		pPacket->setCmd(GSP_HANDLE_UNIT);
		pPacket->write32(m_id_player);
		pPacket->writeData(p, sizeof(STRUCT_HANDLE_UNIT));
		ptr_session->PushSendPacket(pPacket);

}

void Game_Client::query_update_state(STRUCT_UPDATE_STATE* p)
{
//	DWORD dwTime = Sys_GetTime();
//	if(dwTime-m_map_query_holder["handle_unit"]>50)
//	{
//		m_map_query_holder["handle_unit"]	= dwTime;
		if(!IsReady())
			return;
		NET_Session* ptr_session	= GetSession();
		NET_Packet*	pPacket		= new NET_Packet;
		pPacket->setCmd(GSP_UPDATE_STATE);
		pPacket->write32(m_id_player);
		pPacket->writeData(p, sizeof(STRUCT_UPDATE_STATE));
		ptr_session->PushSendPacket(pPacket);
//	}
}



NET_Session* Game_Client::GetSession()
{
	return m_socket.get_NET_Session(1);
}


void Game_Client::on_speek(uint32 uid_speeker, const char *strSpeek)
{

}

⌨️ 快捷键说明

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