大佬教程收集整理的这篇文章主要介绍了客户端与服务器通信,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
客户端:
发送和接收数据包都在CPacketHandler类中进行处理的。
class CPacketHandler : public xSingleton<CPacketHandler> { public: CPacketHandler(); virtual ~CPacketHandler(); public: void Tick(); void ParseCGAttack( IDL::CG::CGAttack* packetObject ); bool ProcessPacket( cpp::net::PacketObject* packetObject ); }
xsingleton类是一个模板类,主要是为了让子类具有单例属性。
服务器发给客户端的消息都是由ProcessPacket()函数接收,然后分发给具体的消息处理函数。
处理思路:
ProcessPacket()接收到参数后,采用if elseif else 的方式,与各个子类的实例指针进行比较,如果相等,则调用该子类的处理函数。
为了代码简洁,实现了两个宏,分别为:
#define ParsePacketObject( compare1, compare2 ) if( compare1->factoryObject() == compare2::Factory::instance() ) Parse##compare2( static_cast<compare2*>(compare1) ) #define ParsePacketObjectElse( compare1, compare2 ) else if( compare1->factoryObject() == compare2::Factory::instance() ) Parse##compare2( static_cast<compare2*>(compare1) )
ProcessPacket函数的具体实现就变成了(不会出现大量的if elseif......):
bool CPacketHandler::ProcessPacket(cpp::net::PacketObject* packetObject ) { ParsePacketObject( packetObject, CGERRORMSG ); ParsePacketObjectElse( packetObject, CGCharacterReConnectAck ); ParsePacketObjectElse( packetObject, CGMyInfo ); ParsePacketObjectElse( packetObject, CGNPCMove ); ParsePacketObjectElse( packetObject, CGUserAlter ); }
以上是大佬教程为你收集整理的客户端与服务器通信全部内容,希望文章能够帮你解决客户端与服务器通信所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。