# FOF框架
**Repository Path**: XNL_TEAM/fof-framework
## Basic Information
- **Project Name**: FOF框架
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-04-09
- **Last Updated**: 2022-04-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 使用教程
> 编辑器必须为64位
## 主项目(exe)
### 1. 开启/关闭服务器

## 子项目(dll)
### 1. 创建子项目
> TODO
### 2. 实现一个请求
- 以请求名新建脚本
- 在 `main.v` 脚本中, 添加导出函数

### 3. 测试
- 右键项目——属性——修改编译结果类型为 **窗口EXE可执行文件**
- 在脚本 `main` 中解除屏蔽测试相关逻辑(**打包时,必须注释掉**)

- 添加测试逻辑
1. 在脚本 `main` 的 `取导出函数` 中添加测试函数
2. 在脚本 `开发测试` 的 `内部_HTTP请求处理` 函数中,添加函数调用

3. 在脚本 `开发测试` 右键——设计xxx界面布局——添加测试按钮

4. 添加按钮对应请求方法

5. 运行项目
### 4. 打包
- 注释 `main` 脚本中的打开窗口逻辑

- 右键项目——属性
- 修改编译结果类型为 **DLL动态链接库**
- 右键项目——编译发布版本
## FOF相关教程
### 1. 取URL中的参数
> 假设请求URL `http://www.baidu.com?search=test`
```c
HTTP辅助.取参数 ("search", 用户数据.HTTP_待发整理.解析参数)
```
### 2. 取Post的Body
- PostMan

- 服务器收到的值
```c
UTF8到文本 (用户数据.HTTP_提交数据) => dllName=test&version=123
```
- 取值方法
```c
HTTP辅助.取参数 ("search", UTF8到文本(用户数据.HTTP_提交数据))
```
### 3. 取数据 multipart/form-data 类型数据
- PostMan

- 服务器收到数据
```c
----------------------------881759781416455691983214
Content-Disposition: form-data; name="dllName"
login
----------------------------881759781416455691983214
Content-Disposition: form-data; name="dll"; filename="login.dll"
Content-Type: application/x-msdownload
字节集
```
- 取值方法
```c
dllName = UTF8到文本 (HTTP辅助.取参数_Post文件参数 (用户数据.HTTP_提交数据, "dllName"))
dllzjj = HTTP辅助.取参数_Post文件 (用户数据.HTTP_提交数据, "dll")
```
---
# 框架相关
## 0. 规范
- 框架相关代码开发前,需要用 **思维导图** 整理实现思路,并负该思维导图的维护
> 更新图片时,必须删除历史原来的图片资源(gitee库有大小限制)
- 函数需要添加**修改日期**、**修改人**和**修改原因**

- 类下全局的变量 `m_xxx`

- 函数变量:xxx

- 常量类(枚举)`E_xxx `

- 结构类 `结构_xxx`

## 1. FOF框架

## 2. 热更实现
### 思路
- dll命令规则: `xxx_$version`,version为版本号
- 启动服务器
> 加载 `程序所在目录/DLL` 内的所有DLL,由于同一个dll可能同时存在多个版本,只加载最高版本dll
- 加载dll流程

- 函数调用流程

- 热更dll流程

## 3. Mysql封装
### 解决问题
1. FOF官方Mysql接口流程复杂,在每一个需要执行sql语句的逻辑里都需要以下流程,并且必须完全执行,如果有人疏忽漏掉释放记录集数据和释放连接,会影响到整个项目服务器,会造成数据不对和数据库连接堵塞等情况

2. FOF官方Mysql接口对获取多行数据的支持不好,记录集数据中只存在当前行的数据,需要遍历总数量,然后不断刷新当前的数据来获取记录

### 实现思路
1. 将流程封装为统一的方法,对调用方来说,不需要实现FOF mysql流程相关逻辑,只需要专注于业务逻辑
2. 调用方去掉记录集相关操作,统一为json来操作结果
3. 封装的接口对query操作返回为jsoncpp对象或jsoncpp数组对象,对insert、update、delete操作返回逻辑型,对insert_incr操作返回长整型
### 使用方法
封装了一个`Mysql数据库`类
假设有一个数据表的结构如下

1. 连接数据库
- 源码

- 使用示例

2. 插入数据
- 源码

- 使用示例

3. 自增插入数据
- 源码

- 使用示例

4. 更新数据
- 源码

- 使用示例

5. 删除数据
- 源码

- 使用示例

6. 查询单条数据
- 源码

- 使用示例

7. 查询数据
- 源码

- 使用示例

8. 删除数据表
- 源码

- 使用示例

9. 清空数据表
- 源码

- 使用示例

## JWT
### 使用方法
1. 加密生成
- 源码

- 使用示例

2. 验证token
- 源码

- 使用示例
