程序笔记   发布时间:2022-07-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了客户端与服务器通信大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

客户端:

发送和接收数据包都在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,请注明来意。