119 lines
4.6 KiB
Markdown
119 lines
4.6 KiB
Markdown
|
||
## 项目架构
|
||
|
||
主工程
|
||
|
||
模块 | 作用
|
||
--- | ---
|
||
BKPG | 主应用程序
|
||
BKPG_PROTOCAL | 三方扩展协议
|
||
BKPG_DEMO | 简单示例扩展
|
||
|
||
官方扩展插件工程
|
||
|
||
模块 | 作用
|
||
--- | ---
|
||
PLUGIN_BKPG_GROUP_PROCESS | 命令组
|
||
|
||
|
||
## 生产环境
|
||
|
||
- JAVA : 8
|
||
|
||
## 主应用程序执行逻辑
|
||
|
||
1. 应用启动,绘制UI,挂载到系统托盘
|
||
2. 扫描注册ext目录下的jar包(扫描实现了MiniApp的类)
|
||
3. 程序挂载
|
||
|
||
## 扩展协议
|
||
|
||
### 可用协议
|
||
|
||
```text
|
||
MiniApp 基础协议
|
||
┗ ProcessAppTemplate 命令执行协议模板
|
||
↑
|
||
MiniAppGroup 程序组合包
|
||
```
|
||
|
||
### 协议结构定义
|
||
|
||
MiniApp
|
||
- String getName(); // 获取应用名称
|
||
- JPanel getPanel(); // 获取应用面板
|
||
- boolean protect(); // 保护应用,重启是否重新装载
|
||
|
||
MiniAppGroup
|
||
- List\<MiniApp> getMiniApps(); // 获取所有的应用
|
||
|
||
ProcessAppTemplate: MiniApp
|
||
- String getName(); // 获取应用名称
|
||
- String getCmdStr(); // 需要执行的命令
|
||
- 其余基类函数已默认实现
|
||
|
||
|
||
### 详细说明
|
||
|
||
**MiniApp** 为基础协议,所有的扩展实现都需要继承或者实现该协议,
|
||
主应用程序只会扫描到实现了该接口的类,并且注册到容器中。
|
||
MiniAppGroup是对MiniApp的扩展,旨在一次性批量注入MiniApp,
|
||
同样也会被扫描到,其下的miniApp也都会被注册。
|
||
|
||
MiniApp中,getName 是用于获取任务名称的,不用担心重复导致程序异常
|
||
(因为注册时采用的是类完整访问路径注册的), 不过建议名称具有标志性,
|
||
这样才能快速识别该任务所具备的特质。
|
||
|
||
getPanel 是绘制的面板,即右面板,实际的操作区,可以自定义,
|
||
也可以采用模板快速构建(如ProcessAppTemplate)。
|
||
如果自定义,或者制作模板,需要注意以下几点:
|
||
|
||
1. 长连接的任务,强烈建议做好资源的调度,适量增加 任务控制按钮
|
||
(启动、终止);如果可监测,建议增加连接心跳监测机制,
|
||
在一定时间后,自动断开连接。
|
||
2. 从A任务切换到B任务,A任务面板会销毁,调用B任务面板,
|
||
但是任务的实例不会销毁,所以,你可以将一些数据存于全局变量来存储
|
||
上一会话的某些状态量。
|
||
3. 主程序面板的大小是固定的,所以,为了界面协调,建议纵向布局,
|
||
并且内容较多的话,适量增加滚动条。
|
||
4. 任务自身不建议开辟太大的内存空间,以免出现任务切换卡顿现象,
|
||
如果一定要用大量内存,也做好完备的内存管控,避免出现OOM的情况。
|
||
|
||
protect() 是保护函数,如果返回true,则表示在BKPG进行RELOAD时,该App不会被注销,
|
||
而是保持实例不变,状态也都保持。这通常作为服务器服务非常关键,比如想要添加一个指令,
|
||
需要RELOAD但是原有服务不能关闭,如果设置为true就可以实现保护。
|
||
|
||
**ProcessAppTemplate** 为命令执行协议模板,为抽象类,继承实现了MiniApp接口,
|
||
用于执行命令行指令,需要实现两个接口,一个是getName,作用同上,另外一个是该抽象类
|
||
独有的,getCmdStr,需要设置命令行的完整执行指令。当点击面板的执行按钮时,
|
||
会启动一个线程来执行该命令,并且每5s会检测一次命令心跳,如果心跳失去连接,
|
||
则会释放资源。可以作为一些应用或者服务的启动端。
|
||
|
||
|
||
为了更加高效的添加命令(常用),
|
||
官方内置了一个命令AppGroup: **PLUGIN_BKPG_GROUP_PROCESS** 。
|
||
通过配置ext/ProgressGroup.txt来添加指令应用,
|
||
指令名称和指令用英文冒号和一个空格隔开【: 】,会自动创建多组ProcessAppTemplate。
|
||
|
||
|
||
|
||
### 第三方扩展指南
|
||
首先,下载BKPG_PROTOCAL协议JAR包,引入自己的项目中,作为环境依赖。
|
||
之后在自己项目中实现MiniApp/MiniAppGroup接口或者ProcessAppTemplate抽象类即可。
|
||
将JAR包生成路径配置到ext目录下,此时生成JAR包,点击主程序系统托盘右键的RELOAD选项,
|
||
即可看到JAR包中的MiniApp都已经加载完毕了。
|
||
|
||
你可以参考BKPG_DEMO的项目或者直接套用该demo来架构一个项目。
|
||
注意,最后打包时,不应该包含BKPG_PROTOCAL这个依赖,是冗余的,建议排除在外。
|
||
|
||
一个JAR包项目中可以包含多个MiniApp,这些MiniApp如果没有特殊机制劫持,
|
||
最后全部会被装载进入到容器之中。
|
||
|
||
如果您开发了自己的工具包,并且认为非常具有价值,你也可以分享自己的JAR包给别人,
|
||
或者分享给官方,由我们加入README进行大众分享。
|
||
|
||
|
||
|
||
|
||
|