https://github.com/shenruisi/prengine
一种用来帮助客户端实现更好的路由解决方案的rewrite引擎(mobile router)
https://github.com/shenruisi/prengine
ios rewrite router
Last synced: 7 months ago
JSON representation
一种用来帮助客户端实现更好的路由解决方案的rewrite引擎(mobile router)
- Host: GitHub
- URL: https://github.com/shenruisi/prengine
- Owner: shenruisi
- License: other
- Created: 2017-01-29T05:36:54.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-01-16T08:09:17.000Z (over 7 years ago)
- Last Synced: 2025-01-21T21:47:58.042Z (9 months ago)
- Topics: ios, rewrite, router
- Language: C++
- Homepage:
- Size: 388 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# prengine
[](mailto:tigris.shin@gmail.com)
[](https://travis-ci.org/shenruisi/prengine)
[](https://github.com/shenruisi/prengine/blob/master/LICENSE)**Poor Router Engine** 一种用来帮助客户端实现更好的路由解决方案的rewrite引擎,可以用于客户端页面路由,模块解耦。
## 设计
通过`prengine`,你可以使用部分`nginx`语法来描写配置文件,`prengine`将会解析输入的URI,并根
据输入URI进行匹配,应用条件表达式,最后输出替换后的结果和规则。剩余的你可以使用Objective-C,Swift,
或是Java将`prengine`在iOS或是Android平台上进行封装。## 示例
* [配置文件](https://github.com/shenruisi/prengine/blob/master/sample/sample.conf) - prengine所使用的配置文件格式
#### 执行示例代码
```
g++ ../package/prengine_val.cpp ../package/cond_ast.cpp ../package/prengine.cpp main.cpp
./a.out
```## 安装
#### 直接安装
```
拷贝package/目录下的prengine.h, prengine.cpp, prengine_val.h, prengine_val.cpp, cond_ast.h,
cond_ast.cpp到目标目录即可。
```#### 获取.a文件
```
进入package/目录 运行make 在bin/目录下获取.a文件。
```#### 获取ios平台.a文件
```
进入package/目录 运行make platform=ios 在bin/目录下获取.a文件。
```## 使用
1.`include "prengine.h"`2.调用`PRFILE* pr_creat(char *cnt, VAL_HANDlER valhandler)`来装载config文件
3.调用`PRREWRITE* pr_rewrite_matched_creat(PRFILE *f,const char *uri)` 传入`PRFILE`句柄和需要转化的`URI`,得到相应的`PRREWRITE`对象。
4.通过`const char *pr_getserver(PRREWRITE *)`,`const char *pr_getscheme(PRREWRITE *)`,`const char *pr_getoutval(PRREWRITE *)`,`const char *pr_getrule(PRREWRITE *)`
来获取`PRREWRITE`对象的不同属性。5.调用`void pr_rewritefree(PRREWRITE *)`释放`PRREWRITE`对象。
#### 变量注入
如何在config文件中使用自定义变量(eg. 在config中使用`$test`)?
```c++
pr_id your_handler(const char *vname){
if(strcmp(vname, "test") == 0){
return pr_yes();
}
return pr_undefined();
}pr_creat(f /*PRFILE句柄*/,your_handler);
```