Skip to content

Commit

Permalink
feat(lib/storage): 新增通用存储引擎
Browse files Browse the repository at this point in the history
用法如下:

/* 加载模块 */
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 大米的利用率。
  • Loading branch information
dzpao committed Dec 5, 2022
1 parent 29cc2e8 commit aecfdee
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,5 @@ out[1-9]

var/*
var

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

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

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

```
mkdir -p ../my-paotin/{etc,ids,plugins,log}
mkdir -p ../my-paotin/{ids,etc,data,log,plugins}
ln -s ../my-paotin var
```

Expand Down
52 changes: 52 additions & 0 deletions plugins/lib/storage.tin
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#nop vim: set filetype=tt:;

/*
本文件属于 PaoTin++ 的一部分。
PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <[email protected]>) 享有并保留一切法律权利
你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
*/

#var lib_storage[META] {
{NAME} {通用存储引擎}
{DESC} {可以存储和载入变量,这允许其它模块可以持久化自己的数据}
{AUTHOR} {担子炮}
};

#function {lib_storage.Init} {
#local _ {@mkdir{data}};
#return {true};
};

#alias {storage.Save} {
#local file {%1};
#local vars {%2};

#class comm-store-tmp open;
#local var {};
#foreach {$vars} {var} {
#var {dump-$var} {${$var}};
};
#class comm-store-tmp close;

#local files {};
#line quiet #scan dir {var/data/} files;

#if { &files[] > 0 } {
#class comm-store-tmp write {var/data/${file}.tin};
};
#else {
#class comm-store-tmp write {data/${file}.tin};
};
};

#alias {storage.Load} {
#local file {%1};
#local vars {%2};

#line quiet #class comm-store-tmp {assign} {load-file data/${file}.tin};
#local var {};
#foreach {$vars} {var} {
#var {$var} {${dump-$var}};
};
#class comm-store-tmp kill;
};

0 comments on commit aecfdee

Please sign in to comment.