Skip to content

Commit aecfdee

Browse files
committed
feat(lib/storage): 新增通用存储引擎
用法如下: /* 加载模块 */ load-lib storage; /* 存储数据 */ storage.Save my-data {myvar1;myvar2;myvar3}; /* 提取数据 */ storage.Load my-data {myvar1;myvar2;myvar3}; 数据以 tintin++ 格式默认储存在 data 目录,文件名就是 Save/Load 的第一个参数。 存储位置支持文件重定位,即:如果储存时存在 var/data 目录,则改为储存到 var/data 目录。 如果提取时存在 var/data/my-data.tin 文件中,则改为从该文件获取内容。 用途举例:pp 大米可以通过 storage 来加载和存储黑白名单,优化 pp 大米的利用率。
1 parent 29cc2e8 commit aecfdee

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,5 @@ out[1-9]
3535

3636
var/*
3737
var
38+
39+
data/*

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ docker run --rm -it --name tt --hostname tt mudclient/paotin
8080
mkdir -p $HOME/my-paotin/
8181
8282
# 创建游戏目录结构
83-
mkdir -p $HOME/my-paotin/{ids,etc,log,plugins}
83+
mkdir -p $HOME/my-paotin/{ids,etc,data,log,plugins}
8484
8585
docker run -d -it --name tt --hostname tt -v $HOME/my-paotin:/paotin/var mudclient/paotin daemon
8686
```
@@ -194,7 +194,8 @@ PaoTin++ 大部分模块源码文件都支持重定位,你可以在 `var/` 目
194194
Docker 方式下,可以将本地工作目录 mount 到容器内的 /paotin/var 目录,那么就可以实现容器内外的文件共享。
195195

196196
```
197-
mkdir -p $HOME/my-paotin # 先创建一个本地工作目录
197+
# 先创建一个本地工作目录
198+
mkdir -p $HOME/my-paotin/{ids,etc,data,log,plugins}
198199
docker run -d -it --name tt --hostname tt -v $HOME/my-paotin:/paotin/var mudclient/paotin daemon
199200
```
200201

@@ -213,7 +214,7 @@ ID 配置文件和数据配置文件可分别放置在 `$HOME/my-paotin/ids/`
213214
建议另外新建一个目录,用来存放你的源代码,并将 `var/` 目录通过符号链接指向该目录。例如:
214215

215216
```
216-
mkdir -p ../my-paotin/{etc,ids,plugins,log}
217+
mkdir -p ../my-paotin/{ids,etc,data,log,plugins}
217218
ln -s ../my-paotin var
218219
```
219220

plugins/lib/storage.tin

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#nop vim: set filetype=tt:;
2+
3+
/*
4+
本文件属于 PaoTin++ 的一部分。
5+
PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
6+
你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
7+
*/
8+
9+
#var lib_storage[META] {
10+
{NAME} {通用存储引擎}
11+
{DESC} {可以存储和载入变量,这允许其它模块可以持久化自己的数据}
12+
{AUTHOR} {担子炮}
13+
};
14+
15+
#function {lib_storage.Init} {
16+
#local _ {@mkdir{data}};
17+
#return {true};
18+
};
19+
20+
#alias {storage.Save} {
21+
#local file {%1};
22+
#local vars {%2};
23+
24+
#class comm-store-tmp open;
25+
#local var {};
26+
#foreach {$vars} {var} {
27+
#var {dump-$var} {${$var}};
28+
};
29+
#class comm-store-tmp close;
30+
31+
#local files {};
32+
#line quiet #scan dir {var/data/} files;
33+
34+
#if { &files[] > 0 } {
35+
#class comm-store-tmp write {var/data/${file}.tin};
36+
};
37+
#else {
38+
#class comm-store-tmp write {data/${file}.tin};
39+
};
40+
};
41+
42+
#alias {storage.Load} {
43+
#local file {%1};
44+
#local vars {%2};
45+
46+
#line quiet #class comm-store-tmp {assign} {load-file data/${file}.tin};
47+
#local var {};
48+
#foreach {$vars} {var} {
49+
#var {$var} {${dump-$var}};
50+
};
51+
#class comm-store-tmp kill;
52+
};

0 commit comments

Comments
 (0)