devGrpcClient 是一个基于 gRPC 的跨平台设备通信客户端库,提供同步和异步RPC调用接口。该库封装了设备操作的完整功能,支持SSL/TLS安全连接。
详细的环境配置步骤请参考:环境配置说明.md
必需依赖:
/usr/local/grpc-1.30.2)/usr/local/abseil-20210324.2)# 在项目根目录下
cd /path/to/DriverPlatform-V3.1
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make devGrpcClient -j$(nproc)
编译完成后,库文件和头文件会自动复制到 Deliver/ 目录:
Deliver/lib/libdevGrpcClient.so*Deliver/include/devGrpcClient.h#include "devGrpcClient.h"
// 连接到服务器(需要提供 root.crt 证书文件)
GrpcDeviceClient* client = CreateClient("192.168.1.100:9010");
int result = client->OpenDevice("DIOS/DEVICE/Detector", "");
if (result != 2) {
std::cerr << "设备打开失败" << std::endl;
}
std::string devRes, msg;
int ret = client->Get("AcqMode", devRes, msg);
std::cout << "返回码: " << ret << ", 数据: " << devRes << std::endl;
// 设置参数
ret = client->Set("Brightness", "{\"value\":80}", devRes, msg);
// 执行动作
ret = client->Action("StartAcquisition", "", devRes, msg);
// 开始异步调用模式
client->BeginAyncWait();
// 批量发起异步请求
int count = 0;
count = client->AsyncAction("EnterExam", "");
count = client->AsyncAction("RESET", "");
count = client->AsyncAction("PrepareAcquisition", "");
// 等待所有请求完成
client->WaitAllComplete();
// 获取结果
for (int i = 0; i < count; i++) {
std::string action, result, resultMsg;
int code = client->GetAsyncResult(i, action, result, resultMsg);
std::cout << "异步调用[" << i << "] " << action
<< " 返回码=" << code << std::endl;
}
// 结束异步模式
client->EndAync();
FreeClient(client);
#include "devGrpcClient.h"
#include <iostream>
int main() {
// 创建客户端
GrpcDeviceClient* client = CreateClient("localhost:9010");
// 打开设备
if (client->OpenDevice("DIOS/DEVICE/Detector", "") != 2) {
std::cerr << "设备打开失败" << std::endl;
FreeClient(client);
return -1;
}
// 同步获取数据
std::string data, msg;
client->Get("DeviceInfo", data, msg);
std::cout << "设备信息: " << data << std::endl;
// 释放客户端
FreeClient(client);
return 0;
}
编译示例程序:
g++ -o example example.cpp \
-I/path/to/Deliver/include \
-L/path/to/Deliver/lib \
-ldevGrpcClient \
-Wl,-rpath,/path/to/Deliver/lib
int OpenDevice(string devUri, string group) - 打开设备int CloseDevice() - 关闭设备string GetDeviceTarget() - 获取设备目标地址int GetClientStatus() - 获取客户端连接状态string GetOpendDeviceResource() - 获取已打开的设备资源所有同步接口返回操作结果码(2表示成功),并通过参数返回结果数据:
int Get(string devResource, string& devRes, string& calResMsg, ...) - 获取数据int Set(string devResource, string reqParams, string& devRes, string& calResMsg, ...) - 设置数据int Update(string devResource, string reqParams, string& devRes, string& calResMsg, ...) - 更新数据int Add(string devResource, string reqParams, string& devRes, string& calResMsg, ...) - 添加数据int Del(string devResource, string reqParams, string& devRes, string& calResMsg, ...) - 删除数据int Action(string devResource, string reqParams, string& devRes, string& calResMsg, ...) - 执行动作int Message(string devResource, string reqParams, string& devRes, string& calResMsg, ...) - 发送消息异步接口用于批量并发执行操作,提高性能:
int BeginAyncWait() - 开始异步调用模式int AsyncAction(string devResource, string reqParams, ...) - 异步执行动作int AsyncMessage(string devResource, string reqParams, ...) - 异步发送消息void WaitAllComplete() - 等待所有异步调用完成int GetAsyncResult(int idx, string& devResource, string& devRes, string& calResMsg) - 获取异步结果void EndAync() - 结束异步模式,清理资源GrpcDeviceClient* CreateClient(const char* serverAddress) - 创建客户端实例void FreeClient(GrpcDeviceClient* client) - 释放客户端实例| 返回码 | 含义 |
|---|---|
| 2 | 成功 |
| 0 | 失败(通用) |
| < 0 | 网络错误(负数为gRPC错误码) |
客户端使用SSL/TLS加密连接,需要提供服务器的根证书文件 root.crt。
证书文件位置: 默认从当前工作目录加载 root.crt
如需使用其他路径,可修改 devGrpcClient.cpp 中的证书加载代码:
ssl_options.pem_root_certs = LoadStringFromFile("/path/to/root.crt");
devGrpcClient/
├── CMakeLists.txt # CMake构建配置
├── README.md # 本文件
├── 环境配置说明.md # 详细的环境配置文档
├── protos/
│ └── device-sm.proto # gRPC服务定义文件
└── src/
├── devGrpcClient.h # 客户端头文件
└── devGrpcClient.cpp # 客户端实现
请确保gRPC已正确安装在 /usr/local/grpc-1.30.2,详见环境配置说明.md。
export LD_LIBRARY_PATH=/path/to/Deliver/lib:$LD_LIBRARY_PATH
确保 root.crt 文件与可执行文件在同一目录,或使用绝对路径。
检查服务器地址和端口是否正确,防火墙是否允许连接。
更多问题请参考 环境配置说明.md 的"常见问题"章节。
本项目为内部使用项目,版权归公司所有。
如有问题或建议,请联系项目维护者。
注意: 在生产环境部署前,请务必阅读 环境配置说明.md 完成所有环境配置。