gamecloud
Version:
game logic server over cloud
74 lines (60 loc) • 2.1 kB
Markdown
# assistant
## 概述
assistant 系列类用于将**用户对象**的指定字段扩展为JSON对象,并对其进行综合管理。
assistant 以JSON格式从数据库读取字段值,将其转化为内存对象,当数据发生变化时,自动将字段序列化成字符串并写入数据库
## 目录结构
所有用户自定义 assistant 类集中存储于 /app/model/assistant 目录中。
## 编写 assistant
```js
const facade = require('gamecloud');
class task extends facade.Assistant {
/**
* 构造函数
* @param {BaseUserEntity} parent 用户角色对象
*/
constructor(parent) {
super(parent, 'task'); //指定 task 扩展角色表中的'task'字段为JSON对象
}
/**
* 获取序列化字符串,同时复位脏数据标志
* @note 基类已实现,可重载
*/
ToString(){
this.dirty = false;
return JSON.stringify(this.v);
}
/**
* 利用来自持久化层的数据进行初始化
* @note 基类已实现,可重载
*/
LoadData (val) {
try {
this.v = (!val||val == "" ) ? {} : JSON.parse(val);
}
catch(e){
this.v = {};
}
}
/**
* 获取JSON对象中的属性值
* @note 基类已实现,可重载
*/
GetRecord($type){
return this.v[$type] || 0;
}
/**
* 获取JSON对象中的属性值
* @note 基类已实现,可重载
*/
SetRecord($type, val){
this.v[$type] = val || 0;
this.dirty = true; //该数值会被系统自动监测到从而引发自动存储
}
}
```
## 使用 assistant
在用户登录、创建角色(user)时,所有的 assistant 将被自动创建新的实例并放入 user.baseMgr 中, 例如:
```js
//调用 assistant 的实例 user.baseMgr.task 的接口方法 Execute,为用户登记任务完成记录:'达成通关新的关卡'
user.baseMgr.task.Execute(em_Condition_Type.gateMaxNo, 1, em_Condition_Checkmode.add);
```