Action - ScutGame/Scut GitHub Wiki
此章节介绍如何定义服务端的Action行为操作
Action层是接收客户端消息分发处理单元,每个Action处理单元处理指定的业务逻辑行为,以ActionId分发到指定的Action处理单元;每个Action处理单元都是GameStruct类的子类。
GameStruct类介绍
1. 如何获得客户端的数据
在GameStruct类中提供ActionGetter
基类来获取客户端的数据;
- 使用Scut的默认通讯协议,以
ActionGetter
的子类HttpGetter对象获得Get参数格式的数据; - 使用自定义通讯协议,需要继承
ActionGetter
类实现其中的方法来获取客户端的数据; - WebSocket通讯协议,获取也是使用HttpGetter对象;
2. 如何较验客户端数据
在GameStruct类中的ReadUrlElement方法处理较验逻辑,较验失败返回错误码和错误信息;在自己的Action子类中可以重载GetUrlElement(验证参数是否存在)和ValidateElement方法实现自己的逻辑验证。
3. 如何处理客户端的数据
在GameStruct类中提供DoAction方法处理数据,其中提供了三个可重载的方法:
- CheckAction:可以处理些已登录的身份检查判断等
- TakeAction:需要业务上实现处理逻辑
- TakeActionAffter:处理完成后可以触发些事件处理
4. 如何将处理后的数据返回给客户端
Action处理单元的结果基本上是对象类型的数据,在GameStruct类的WriteResponse方法处理输出数据;
- 使用Scut默认通讯协议,在BuildPacket方法处理,需要将对象的属性逐一增加到
DataStruct
对象的队列;提供int,string,bool,byte,byte[]等类型加入队列,详细查询API; - 使用自定义通讯协议,需要继承BinaryAction类重载BuildResponsePack方法;
- WebSocket通讯协议,需要重载BuildJsonPack方法;
小提示:
- 使用自定的通讯协议,中间件扩展方法可以通过重载GetUrlElement和WriteResponse方法;
- 如果不想要将数据返回结客户端,设置IsNotRespond属性为True;
AuthorizeAction类介绍
此类负责身份判断,子类继承它时,就需要授权后才能访问,未授权的请求将不处理TakeAction方法;也可以配置IgnoreActionId属性为True,设置子类对象不需要授权就可以请求。
身份认证有以下几种状态(LoginStatus):
- NoLogin: 未授权的状态;
- Logined: 授权的User在其它地方登录了;
- Success: 授权成功的状态;
- Timeout: 授权超时,需要重新进行身份认证;
WebSocket通讯注意:
- 子类需要继承JsonAuthorizeAction类
LoginAction类介绍
此类是处理身份认证业务逻辑,子类通过重载CreateLogin方法,返回实现ILogin接口的认证逻辑类;默认是采用读取SnsCenter数据库验证用户名和密码的方式。
登录流程:
- 登录前,客户端的UID=0;
- 登录时,通过账号和密码获取UID,如果没有用户向用户中心(SnsCenter库)注册账号,产生UID给游戏服,再发给客户端;
- 创建角色前,客户端上传登录时拿到的UID;
- 创建角色时,RegisterAction会判断UID是否>0,如果失败则返回,成功则进行创建角色逻辑;