目录 kbengine_cocos2d_js_demo/cocos2d-js-client 就是一个典型的 Cocos2d-JS 项目,项目结构可以看Cocos 官方说明文档《Cocos2d-JS项目结构介绍》,我们现在只需要知道以下事实即可。
相关 js 文件通过 project.json 引入
main.js 是整个项目的逻辑入口
main.js
如上图,主要的逻辑有两块
57~58行,即设置服务器的 ip、port
67行,是 Cocos 的启动 Scene
由 project.json 里面可以看到,StartScene 所在的具体路径应该在 src/cc_scripts/StartScene.js
StartScene.js
StartScene 的展现逻辑我们不去管,直接看「登录」按钮点击下去后的处理。
这里通过 fire 一个 「login」事件,把 username 和 password 发送到 plugins/kbengine_js_plugins/kbengine.js 去处理。
kbengine.js
可以看到,2377 行注册了一个事件,即 kbengine.js 里的 login 函数,会响应 「login」 事件。
由上可知,客户端在启动的时候,除了界面展示,最重要的就是在 installEvents 函数里,通过 KBEngine.Event.register 注册各个事件响应函数,即 kbengine.js 这个插件与客户端逻辑代码的交互是通过事件来完成的。
具体的 register/fire 代码这里不再贴出,有兴趣的可以自己去看。基本逻辑如下
register 的时候,在一个 list 里存放 的键值对。
fire 的时候,遍历找到这个事件名对应的回调函数,填入参数来 apply 。
「登录」前需要加载通信协议,加载过程需要在服务器与客户端之间进行函数交互调用。
通过在服务器端和客户端分别解析 res/server/messages_fixed.xml 中声明的协议来完成交互。 其实就是分别构建 键值对。
那么,客户端是怎么知道如何解析这个协议的呢?
kbengine.js / login
login 函数中,3086行参数为 true 来调用 login_loginapp,所以逻辑会进入 3093~3096 行,即使用 ws 协议访问在 main.js 里配置的 ip:port;在 connect 成功后的回调函数是 kbengins.js 中的 onOpenLoginapp_login。
ws 协议介绍,这里给出部分截图,便于理解。
kbengine.js / onOpenLoginapp_login
opOpenLoginapp_login 主要有几个逻辑:
2600 行,设置 currentserver = 'loginapp'
2601 行,设置 currentstate = 'login'
2605~2610 行,访问服务器端的 loginapp::importClientMessages 函数,回调函数是 kbengins.js 中的 Client_onImportClientMessages 函数
为什么 2605~2607 行能访问到 loginapp 中的 importClientMessages 函数?
因为 2066 行,KBEngine.messages.Loginapp_impo