📄 game_client.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 + -