今天做我们游戏的首测登录过程,leader说要把渠道接进来,我真是一点都不懂啥是啥,懵懵懂懂开始,感觉自己要入大坑( - -|||)
基本思想是这样的:
1 向账号验证服务器发送登录请求
2 获得成功登录结果
3 进入游戏逻辑处理
第1步在正式版本中,就是与渠道的对接,账号的验证都是由平台来完成的,首测比较简陋,验证由我们自己完成,所以逻辑有些绕,导致我此刻也依然心虚得很… …
leader给我画的图可以说是简单易懂,抽象成流程图大概是这样的:
其中子过程1为:
这套逻辑是很好理解,但是拆分就让我头很大啊,登录流程和游戏代码在逻辑上要分开,但是处理上又紧密相连,互相调用+函数回调就是不可避免的需求,为了将manager的代码和具体平台处理的代码完全隔开,leader向我介绍了一种代理的技术,苦口婆心给我讲了一个加班的晚上,我尽力去理解 Thanks♪(・ω・)ノ
经我分析这套代理的流程是这样的:
code1中有 Manager、agent接口类—IPlatform、agent子类1—AgentOne
- IPlatform中定义了Login的接口
- Manager中定义了一个回调函数类型XDelegate,参数是我们需要传递的类型;定义了一个该类型的回调函数loginCallback;在初始化时new了一个AgentOne实例parentagent,但是将类型限定为IPlatform,以防外界通过manager获取到特定对象,构造函数传参将刚才的回调函数传入;
- AgentOne中定义一个静态AgentOne对象agent,并由构造函数赋值,对外可以取到;实现了Login接口,其中是到code2中去处理code2中的登录表现;定义了一个回调函数loginFunc,当返回登录结果时调用;定义一个对外的OnLogin接口,等待调用;
登录过程:Manager.Login() -> parentagent.Login() -> //to code2 do something
/* code2 call*/ agent.OnLogin -> agent.loginFunc() -> Manager.OnLogin() -> Manager.loginCallback()
这样登录操作从外边来看,只是请求登录Manager.Login(),回调函数也是通过manager设置的,有关具体平台的事情都是在登录流程中处理的