kbengine unity3D 登录分析(服务端协议构建)

从loginapp开始,loginapp的构造函数只有一句话

pMainMessageHandlers是MessageHandlers的静态成员变量,那么赋值号右边的LoginappInterface::messageHandlers是什么呢?

找到LoginappInterface

 

loginapp_interface.cpp

LoginappInterface是命名空间,那么messageHandlers就是其中对应的某个变量了,进入头文件查看

 

loginapp_interface.h

这里面有非常多的函数,这里只摘出来importClientMessages 和 login

 

通过对这些函数的解析(就是看函数定义的位置),得到下面这些

1、上图的第3行和第13行展开

 

宏替换之后的结果如下图。这里替换结果为什么是这样?可以回到loginapp_interface.cpp去看,它有两次#inlclude “loginapp_interface.h”,第二次#include之前#define了两个宏。这里如此设计的原因是防止其他文件#include“loginapp_interface.h”而产生会有干扰的全局变量以及会定义影响处理的函数

 

2、第6、7行展开

31~32行是loginapp_interface.h中第6行的展开,第32行展开是200~217中的NETWORK_MESSAGE_EXPOSED部分。

104~107行就是loginapp_interface.h第7行的展开,同时可以看到105行的展开是76~102,106行的展开是190~193,192行展开是200~217中的NETWORK_MESSAGE_HANDLER部分,193行展开是160~188(这里为了方便叙述而将有些宏定义的位置截图的时候换了)

 

其实上面一大段都不用看,只要知道loginapp_interface.h中6~7行展开为下面这样

 

  1. 29 行,使用 "LoginappInterface::importClientMessages" 作为 messageHandlers.pushExposedMessage 的参数,即这个函数将会被导出到客户端,以便客户端调用
  2. 30~38 行,声明了一个 MessageHandler 的派生类,这个类的 handle 函数(MessageHandler继承而来),是个 virtual 函数,执行的就是 Loginapp::importClientMessages
  3. 40~45 行,将调用 messangeHandlers.add 函数,完成 messangeId 到 importClientMessagesLoginappMessagehandler0 类对象的映射;此后,就可以通过 messageId 找到一个 MessangeHandler 对象指针,然后执行他的 handle 函数,由于这是 virtual 函数,真正执行的是 importClientMessagesLoginappMessagehandler0 中的 handle 函数,也就是 Loginapp::importClientMessages 函数。
  4. 47 行,保存添加过映射关系的 MessangeHandlers;这个主要是为了其他组件调用,如 baseapp 可以通过(*pBundle).newMessage( Loginapp::importClientMessages);  这样的形式调用到这个函数
  5. 49~69 行 importClientMessages 函数的参数对象,ARGS0 表示 importClientMessages 函数不需要参数。

3、第10、11行展开,同上的分析,宏展开结果如下

前面的宏中涉及了MessageHandlers的构造和MessageHandlers::add()函数

 

Message_handler.cpp

这里使用FixedMessages类来读取xml文件中的配置,其实就是形成配置中的函数名称和、到节点信息(函数id和函数名称)的映射。Xml中的函数又被称为固定函数。

这里先是设置msgHandler的id,如果msgHandler中所要执行的函数是固定函数,id就是固定函数所对应的id,并且建立函数id到msgHandler的映射。

 

那么函数id到msgHandler的映射有什么作用呢

 

上一篇看到执行到processMessages(pMsgHandlers, pPacket)会从pMsgHandlers中根据id取到msgHandler,再执行msgHandler的handle函数。假如现在发来的是login消息,那么从pMsgHandlers中取出的就是loginLoginappMessagehandler_stream,执行的就是它的handle函数,也就是Loginapp::login(),那么Loginapp::login()做了哪些事呢?

下面就是登录在各种app中流转的过程。下一篇

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值