Files
he/process/doc/cloud_interact_class_reference.md
2026-06-22 15:35:18 +08:00

258 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# cloud_interact 类调用关系速查
> 配合 [cloud_interact_analysis.md](./cloud_interact_analysis.md) 使用
---
## 1. 按命名空间 pr 的完整类列表
### 1.1 cloud_interact 模块(15 个公开类 + 内部私有类)
| # | 类名 | 基类/模式 | 创建方式 | 主要被谁调用 |
|---|------|----------|---------|-------------|
| 1 | `CCommuInteraction` | `CBaseThread` | `CreateInstance()` | main |
| 2 | `CCommuInterData` | 内部类 | CommuInteraction 构造 | CCommuInteraction |
| 3 | `CCommunicatorHelper` | 独立 | `CreateInstance()` | CCommuInteraction, CDownstreamCommand, CForwardHelper |
| 4 | `CCommunicatorHelperPrivate` | 内部类 | — | CCommunicatorHelper |
| 5 | `CForwardHelper` | 独立 | `CreateInstance()` | CCommuInteraction, CDownstreamCommand |
| 6 | `CForwardHelperPrivate` | 内部类 | — | CForwardHelper |
| 7 | `CDownstreamCommand` | 独立 | `CreateInstance()` | CCommuInteraction |
| 8 | `CDownstreamCommandPrivate` | 内部类 | — | CDownstreamCommand |
| 9 | `CDataCache` | 单例 | `Instance()` | main, CCommuInteraction, Offline/Fault Task |
| 10 | `CCachePrivate` | 内部类 | — | CDataCache |
| 11 | `CStateManager` | 单例 | `Instance()` | main, CCommuInteraction, CAuthManager |
| 12 | `CStateCache` | 内部类 | — | CStateManager |
| 13 | `CAuthManager` | 独立 | `CreateInstance()` | main |
| 14 | `CAuthManagerPrivate` | 内部类 | — | CAuthManager |
| 15 | `CCloudConnectivityDetector` | 独立 | `CreateInstance()` | CAuthManager |
| 16 | `CConnectivityData` | 内部类 | — | CCloudConnectivityDetector |
| 17 | `CAuthQueryHandler` | 独立 | `CreateInstance()` | CAuthManager |
| 18 | `CAuthQueryData` | 内部类 | — | CAuthQueryHandler |
| 19 | `CAuthDistributeTask` | `CBaseThread` | `CreateInstance()` | CAuthManager (EMS) |
| 20 | `CAuthDistributeData` | 内部类 | — | CAuthDistributeTask |
| 21 | `CAuthReceiveHandler` | 独立 | `CreateInstance()` | CAuthManager (非EMS) |
| 22 | `CAuthReceiveData` | 内部类 | — | CAuthReceiveHandler |
| 23 | `COfflineDataTask` | `CBaseThread` | `CreateInstance()` | main |
| 24 | `COfflineTaskPrivate` | 内部类 | — | COfflineDataTask |
| 25 | `CFaultRecordTask` | `CBaseThread` | `CreateInstance()` | main |
| 26 | `CFaultRecordPrivate` | 内部类 | — | CFaultRecordTask |
| 27 | `CRemoteSshHelper` | 单例 | `Instance()` | main, CDownstreamCommand |
| 28 | `CRemoteSshData` | 内部类 | — | CRemoteSshHelper |
### 1.2 reuse_utils 模块
| 类名 | 模式 | 主要被谁调用 |
|------|------|-------------|
| `CConfigManager` | 单例 | main, CCommuInteraction, CDownstreamCommand |
| `CFrameManager` | 独立 | CCommuInteraction |
| `CFrameHelper` | 静态工具 | CFrameManager, CCommuInteraction, Auth 模块 |
| `CProtocolSinglton` | 单例 | main, CCommuInteraction, CFrameManager |
| `CSSLLibSinglton` | 单例 | CDataProcesser (加解密) |
| `CDowloadTask` | 独立 | CCommuInteraction (升级下载) |
| `CFtpDownloadTask` | 独立 | CDowloadTask |
| `CSftpDowloadTask` | 独立 | CDowloadTask |
| `CFtpUploadTask` | 独立 | 上传场景 |
| `CUdpSender` / `CUdpReceiver` | 独立 | Auth 广播 |
| `CSSHHelper` | 工具 | CRemoteSshHelper |
### 1.3 processers 模块 — 数据处理器继承树
```
CDataProcesser (抽象基类)
├── CLoginProcesser # 登录
├── CHeartBeatProcesser # 心跳
├── CGeneralDataProcesser (通用中间层)
│ ├── [DeviceManage] CVersionInfoProcesser, CDeviceInfoProcesser, CDeviceStateProcesser
│ ├── [Overview] COverallOverviewProcesser, CTerminalOverviewProcesser, CESSProcesser,
│ │ CGatewayPowerMeterOverviewProcesser, CLoadPowerMeterOverviewProcesser,
│ │ CSolarGenerationOverviewProcesser, CWindGenerationOverviewProcesser,
│ │ CDieselGenerationOverviewProcesser, CVirtualPowerPlantOverviewProcesser,
│ │ CEssBranchOverviewProcesser
│ ├── [DeviceData] CPCSProcesser, CPowerMeterProcesser, CSolarInverterProcesser,
│ │ CWindInverterProcesser, CChargePileProcesser, CDieselGeneratorProcesser,
│ │ CPowerEnvironProcesser, CSolarDcProcesser
│ ├── [BMS] CBMSSummaryProcesser, CBMSExtremeProcesser, CBMSChangedCellsProcesser,
│ │ CBMSCellDetailsProcesser
│ ├── [Alarm] CTeleSignalingProcesser, CRealtimeAlarmProcesser,
│ │ CHistoryAlarmProcesser, CHistoryEventProcesser
│ ├── [Statistics] COverviewTOUProcesser, CDeviceTOUProcesser, CRevenueStatisticsProcesser
│ ├── [EMS Strategy Read] CDownstreamSchedulingTaskReadProcesser,
│ │ CDownstreamPeakShavingReadProcesser, CDownstreamLoadResponseReadProcesser,
│ │ CDownstreamDemandResponseReadProcesser, CDownstreamCapacityExpansionReadProcesser,
│ │ CDownstreamGridRestrictionReadProcesser, CDownstreamTOUParamsReadProcesser,
│ │ CDownstreamPVWorkingReadProcesser, CDownstreamPva*ReadProcesser (6个)
│ ├── [EMS Strategy Write] CDownstreamSchedulingTaskWriteProcesser, ... (对应 Write 系列)
│ ├── [Tariff] CDownstreamTariffTypeRead/WriteProcesser, CDownstreamTariffTemplateRead/WriteProcesser,
│ │ CDownstreamTimeTemplateRead/WriteProcesser, CDownstreamTariffSettingRead/WriteProcesser,
│ │ CUpstreamTariffTypeNofityProcesser
│ ├── [Battery] CDownstreamSafeProtectionRead/WriteProcesser, CDownstreamSOCCalibrationRead/WriteProcesser,
│ │ CDownstreamCapacityCalibrationRead/WriteProcesser, CDownstreamInsulationDetectionRead/WriteProcesser
│ ├── [Control] CDownstreamEMSControlProcesser, CDownstreamDeviceControlProcesser
│ ├── [Upgrade] CUpstreamUpgradeTaskQueryProcesser, CUpstreamUpgradeTaskResultProcesser,
│ │ CUpstreamUpgradeTerminalResultProcesser, CDownstreamnUpgradeTaskNotificationProcesser
│ ├── [Offline] CUpstreamOfflineRequestProcesser
│ ├── [FaultRecord] CUpstreamFaultRecRequestProcesser
│ ├── [RemoteManage] CDownstreamSshStartProcesser, CDownstreamSshStopProcesser
│ └── [Setup] CDownstreamTermUpdateProcesser
├── CProcesserDataHelper (单例, 非继承) # 数据Id与上报状态管理
└── CTerminalCache (单例, 非继承) # 终端列表缓存
```
---
## 2. 核心调用链
### 2.1 启动阶段
```
main()
├─ LibCreateMutexLog()
├─ CDataCache::UpdateRunningDurationPeriodically()
├─ RegisterHandleSigs() → CStateManager::NotifyQuit()
├─ CAuthManager::CreateInstance()
│ ├─ CCloudConnectivityDetector::CreateInstance()
│ ├─ CAuthQueryHandler::CreateInstance()
│ ├─ [EMS] CAuthDistributeTask::CreateInstance()
│ └─ [非EMS] CAuthReceiveHandler::CreateInstance()
├─ CAuthManager::Execute() ← 阻塞直到授权完成
├─ CStateManager::Notify*() 重置状态
├─ CConfigManager::Initialize()
├─ CProtocolSinglton::Create()
├─ CCommuInteraction::CreateInstance() → Initialize(STATION_CONFIG)
│ └─ CCommuInterData::Initialize()
│ ├─ CFrameManager::CreateInstance() → CreateDataProcessers()
│ ├─ CCommunicatorHelper::CreateInstance()
│ ├─ CForwardHelper::CreateInstance()
│ └─ CDownstreamCommand::CreateInstance()
├─ [可选] COfflineDataTask / CFaultRecordTask
└─ CThreadWatchDog::Initialize() → Start()
```
### 2.2 通信线程单次 Handle 调用链
```
CCommuInteraction::Handle()
├─ CDataCache::Initialize() [首次]
├─ ConnectCloud()
│ └─ CCommunicatorHelper::Connect()
│ └─ ICloudCommunicator::Connect()
├─ LoginCloud()
│ ├─ CFrameManager::GetDataProcesserByFrameType(LOGIN)
│ ├─ CLoginProcesser::EncodeUpstreamRequest()
│ ├─ CFrameHelper::EncodeUpstreamFrame()
│ ├─ CCommunicatorHelper::Send()
│ ├─ ReceiveDownstreamFrame*()
│ ├─ CFrameManager::DecodeDownstreamFrame()
│ └─ CConfigManager::UpdateLoginResponse()
├─ HandleLastUncompletedUpgradeTask()
├─ CDownstreamCommand::CheckDownstreamCommandResults()
├─ HandleDownstreamData()
│ ├─ CCommunicatorHelper::Receive()
│ ├─ CFrameManager::DecodeDownstreamFrame()
│ ├─ [命令] CDownstreamCommand::HandleDownstreamRequest()
│ │ ├─ HandleTerminalUpdateRequest()
│ │ ├─ HandleDownstreamCommandRequest()
│ │ ├─ HandleDownstreamParams*Request()
│ │ ├─ HandleDownstreamSsh*Request() → CRemoteSshHelper
│ │ └─ HandleDownstreamUpgradeNotificationRequest()
│ └─ [转发] CForwardHelper::ForwardDownstreamData()
├─ HandleUpstreamData()
│ └─ for (priority → processer)
│ ├─ TimeToEncodeUpstreamRequest()
│ ├─ FillUpstreamRequestData()
│ ├─ EncodeUpstreamRequest()
│ ├─ SendUpstreamFrame()
│ └─ Receive + DecodeDownstreamResponse()
├─ CForwardHelper::ForwardUpstreamData() [EMS]
├─ CForwardHelper::ForwardFaultRecord() [EMS]
├─ CForwardHelper::ForwardOfflineData() [EMS]
└─ CDataCache::CalculateTotalOnlineDuration() [每5分钟]
```
### 2.3 下行命令处理链(CDownstreamCommand)
```
CDownstreamCommand::HandleDownstreamRequest()
├─ IsDownstreamRequest(frameType) ?
├─ pDataProcesser->DecodeDownstreamRequest()
├─ 按帧类型分发:
│ ├─ TERM_UPDATE → HandleTerminalUpdateRequest/Response
│ ├─ UPGRADE_NOTIFY → HandleDownstreamUpgradeNotificationRequest
│ ├─ READ_*_PARAMS → HandleDownstreamParamsReadingRequest
│ ├─ WRITE_*_PARAMS → HandleDownstreamParamsWritingRequest
│ ├─ CONTROL_COMMAND → HandleDownstreamCommandRequest
│ └─ START/STOP_SSH → HandleDownstreamSshStart/StopRequest
├─ pDataProcesser->EncodeUpstreamResponse()
└─ CCommunicatorHelper::Send() 回复云平台
CDownstreamCommand::CheckDownstreamCommandResults()
└─ 轮询 librunning_data / libcloud_command 获取异步执行结果并上报
```
---
## 3. 单例与生命周期
| 单例类 | 创建时机 | 销毁时机 |
|--------|---------|---------|
| `CStateManager` | 首次 Instance() | 进程结束 |
| `CDataCache` | 首次 Instance() | 进程结束 |
| `CConfigManager` | main 中 Initialize | 进程结束 |
| `CProtocolSinglton` | main 中 Create | main 退出前 Free(),重授权时也会 Free/Create |
| `CRemoteSshHelper` | 首次 Instance() | 进程结束 |
| `CThreadWatchDog` | main 中 Initialize | main 退出前 Stop() |
| `CProcesserDataHelper` | 首次 Instance() | 进程结束 |
| `CTerminalCache` | 首次 Instance() | 进程结束 |
**线程对象生命周期:**
| 对象 | 所有者 | 启停 |
|------|--------|------|
| `CCommuInteraction` | main 局部 shared_ptr | main 循环 Start/Stop,重授权时 Deinitialize |
| `COfflineDataTask` | main 局部 shared_ptr | main 循环按需 Start |
| `CFaultRecordTask` | main 局部 shared_ptr | main 循环按需 Start |
| `CAuthDistributeTask` | CAuthManager 内部 | EMS 授权成功后 Start(detached) |
| `CAuthManager` | main 局部 shared_ptr | 全程存活,退出前 Deinitialize |
---
## 4. 共享库接口(跨模块数据通道)
| 库 | cloud_interact 中的用途 |
|----|------------------------|
| `librunning_data` | 云连接/登录状态、终端信息、授权状态、进程喂狗 |
| `libcloud_data` | 数据上报状态、离线数据、数据Id生成 |
| `libcloud_command` | 下行控制指令队列与执行结果 |
| `libcloud_repeater` | EMS 中继转发缓冲 |
| `libruntime_environ` | 运行环境、站点配置加载、终端透传有效性 |
| `libcloud_protocol` | 协议编解码(通过 ICloudProtocol 接口) |
| `libcloud_communicator` | TCP 通信(通过 ICloudCommunicator 接口) |
---
## 5. 帧类型 → Processor 映射表(节选)
完整映射见 `reuse_utils/src/FrameManager.cpp` 中 `mapType2ProcesserCreator`。
| 帧类型常量 | Processor 类 | 方向 | 优先级 |
|-----------|---------------|------|--------|
| `UPSTREAM_LOGIN` | CLoginProcesser | 上行请求 | 1 |
| `UPSTREAM_VERSION_INFOS` | CVersionInfoProcesser | 上行请求 | 2 |
| `UPSTREAM_DEVICE_INFOS` | CDeviceInfoProcesser | 上行请求 | 3 |
| `UPSTREAM_DEVICE_STATES` | CDeviceStateProcesser | 上行请求 | 4 |
| `UPSTREAM_HEART_BEAT` | CHeartBeatProcesser | 上行请求 | 2001 |
| `UPSTREAM_REALTIME_ALARM_DATA` | CRealtimeAlarmProcesser | 上行请求 | 302 |
| `UPSTREAM_OVERALL_OVERVIEW` | COverallOverviewProcesser | 上行请求 | 401 |
| `UPSTREAM_OFFLINE_DATA_REQUEST` | CUpstreamOfflineRequestProcesser | 上行请求 | 501 |
| `UPSTREAM_FAULT_RECORD` | CUpstreamFaultRecRequestProcesser | 上行请求 | 303 |
| `UPSTREAM_UPGRADE_TASK_QUERY` | CUpstreamUpgradeTaskQueryProcesser | 上行请求 | 200 |
| `DOWNSTREAM_EMS_CONTROL_COMMAND` | CDownstreamEMSControlProcesser | 下行请求 | 801 |
| `DOWNSTREAM_DEVICE_CONTROL_COMMAND` | CDownstreamDeviceControlProcesser | 下行请求 | 802 |
| `DOWNSTREAM_READ_SCHEDULING_TASK_PARAMS` | CDownstreamSchedulingTaskReadProcesser | 下行请求 | 901 |
| `DOWNSTREAM_WRITE_SCHEDULING_TASK_PARAMS` | CDownstreamSchedulingTaskWriteProcesser | 下行请求 | 902 |
| `DOWNSTREAM_START_SSH` | CDownstreamSshStartProcesser | 下行请求 | 1201 |
| `DOWNSTREAM_STOP_SSH` | CDownstreamSshStopProcesser | 下行请求 | 1202 |
| `DOWNSTREAM_UPGRADE_TASK_NOTIFICATION` | CDownstreamnUpgradeTaskNotificationProcesser | 下行请求 | 203 |
> 注:优先级数值越小越先上报;下行命令类帧不参与自动上行优先级排序,由云平台主动下发触发。