1 | # assistant
|
2 |
|
3 | ## 概述
|
4 |
|
5 | assistant 系列类用于将**用户对象**的指定字段扩展为JSON对象,并对其进行综合管理。
|
6 |
|
7 | assistant 以JSON格式从数据库读取字段值,将其转化为内存对象,当数据发生变化时,自动将字段序列化成字符串并写入数据库
|
8 |
|
9 | ## 目录结构
|
10 |
|
11 | 所有用户自定义 assistant 类集中存储于 /app/model/assistant 目录中。
|
12 |
|
13 | ## 编写 assistant
|
14 | ```js
|
15 | const facade = require('gamecloud');
|
16 |
|
17 | class task extends facade.Assistant {
|
18 | /**
|
19 | * 构造函数
|
20 | * @param {BaseUserEntity} parent 用户角色对象
|
21 | */
|
22 | constructor(parent) {
|
23 | super(parent, 'task'); //指定 task 扩展角色表中的'task'字段为JSON对象
|
24 | }
|
25 |
|
26 | /**
|
27 | * 获取序列化字符串,同时复位脏数据标志
|
28 | * @note 基类已实现,可重载
|
29 | */
|
30 | ToString(){
|
31 | this.dirty = false;
|
32 | return JSON.stringify(this.v);
|
33 | }
|
34 |
|
35 | /**
|
36 | * 利用来自持久化层的数据进行初始化
|
37 | * @note 基类已实现,可重载
|
38 | */
|
39 | LoadData (val) {
|
40 | try {
|
41 | this.v = (!val||val == "" ) ? {} : JSON.parse(val);
|
42 | }
|
43 | catch(e){
|
44 | this.v = {};
|
45 | }
|
46 | }
|
47 |
|
48 | /**
|
49 | * 获取JSON对象中的属性值
|
50 | * @note 基类已实现,可重载
|
51 | */
|
52 | GetRecord($type){
|
53 | return this.v[$type] || 0;
|
54 | }
|
55 | /**
|
56 | * 获取JSON对象中的属性值
|
57 | * @note 基类已实现,可重载
|
58 | */
|
59 | SetRecord($type, val){
|
60 | this.v[$type] = val || 0;
|
61 | this.dirty = true; //该数值会被系统自动监测到从而引发自动存储
|
62 | }
|
63 | }
|
64 | ```
|
65 |
|
66 | ## 使用 assistant
|
67 |
|
68 | 在用户登录、创建角色(user)时,所有的 assistant 将被自动创建新的实例并放入 user.baseMgr 中, 例如:
|
69 |
|
70 | ```js
|
71 | //调用 assistant 的实例 user.baseMgr.task 的接口方法 Execute,为用户登记任务完成记录:'达成通关新的关卡'
|
72 | user.baseMgr.task.Execute(em_Condition_Type.gateMaxNo, 1, em_Condition_Checkmode.add);
|
73 | ```
|