From e8a27bb203fe2aff70390a5eca002d7438da9b0f Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 22 十月 2025 14:24:34 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/DAQBridge/core/Display.h |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 113 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/DAQBridge/core/Display.h b/SourceCode/Bond/DAQBridge/core/Display.h
new file mode 100644
index 0000000..79d789b
--- /dev/null
+++ b/SourceCode/Bond/DAQBridge/core/Display.h
@@ -0,0 +1,113 @@
+#pragma once
+#ifndef DISPLAY_H
+#define DISPLAY_H
+
+#include "CommBase.h"
+#include "../net/SocketComm.h"
+#include <functional>
+#include <thread>
+#include <atomic>
+#include "../proto/Protocol.h"
+#include "../proto/ProtocolCodec.h"
+
+// 回调:收到样本的上抛(UI 用它画图/存本地)
+using SamplesCallback = std::function<void(uint32_t machineId, uint32_t channelId,
+    uint64_t lastTsSent, uint8_t more,
+    const std::vector<Proto::SamplePair>& samples)>;
+using SamplesMultiCallback = std::function<void(
+    uint32_t machineId, uint8_t moreAny,
+    const std::vector<Proto::ChannelBlock>& blocks)>;
+using MachinesCallback = std::function<void(const std::vector<Proto::MachineInfo>& machines)>;
+using StatsCallback = std::function<void(uint32_t machineId, const std::vector<Proto::ChannelStatInfo>& channels)>;
+
+// ★ 新增:批次信息回调
+using BatchInfoCallback = std::function<void(const Proto::RspBatchInfo&)>;
+
+class Display : public CommBase {
+public:
+    Display();
+    ~Display();
+
+    void sendSampleData(double sample) override;
+    void sendWindowData(const std::vector<std::string>& dataFields) override;
+
+    void connectServer(const std::string& ip, uint16_t port) override;
+    void createServer(uint16_t /*port*/) override {}
+    void disconnect() override;
+
+    void onConnectionEstablished() override;
+    void onConnectionLost() override;
+
+    void handleRawData(const std::vector<uint8_t>& rawData);
+
+    void setConnectionStatusCallback(std::function<void(int, std::string)> cb) override { cbStatus = std::move(cb); }
+    void setRawDataCallback(std::function<void(const std::vector<uint8_t>&)> cb) override { cbRaw = std::move(cb); }
+    void setRawDumpEnabled(bool enabled) override { rawDumpEnabled = enabled; }
+
+    void startRecvLoop(uint32_t intervalMs = 10);
+    void stopRecvLoop();
+
+    void setSamplesCallback(SamplesCallback cb) { cbSamples = std::move(cb); }
+    void setSamplesMultiCallback(SamplesMultiCallback cb) { cbSamplesMulti = std::move(cb); }
+    void setMachinesCallback(MachinesCallback cb) { cbMachines = std::move(cb); }
+    void setStatsCallback(StatsCallback cb) { cbStats = std::move(cb); }
+    void setBatchInfoCallback(BatchInfoCallback cb) { cbBatchInfo = std::move(cb); } // ★ 新增
+
+    // —— 原有“需显式 dataId”的低层接口(保留以兼容)——
+    void requestMachines(uint32_t dataId);
+    void requestStats(uint32_t dataId, uint32_t machineId);
+    void requestSince(uint32_t dataId, uint32_t machineId, uint32_t channelId,
+        uint64_t sinceTsExclusive, uint16_t maxCount = 1024);
+    // ★ 新增:带 batchId 的显式 dataId 版
+    void requestSince(uint32_t dataId, uint32_t machineId, uint32_t channelId,
+        uint64_t sinceTsExclusive, const std::string& batchId, uint16_t maxCount = 1024);
+
+    // 便捷:整机多通道增量(显式 dataId)
+    void requestSinceAll(uint32_t dataId, uint32_t machineId, uint64_t sinceTsExclusive,
+        uint16_t maxPerChannel = 1024);
+    // ★ 新增:带 batchId 的显式 dataId 版
+    void requestSinceAll(uint32_t dataId, uint32_t machineId, uint64_t sinceTsExclusive,
+        const std::string& batchId, uint16_t maxPerChannel = 1024);
+
+    // —— 新增:批次信息拉取(显式/便捷)——
+    void requestBatchInfo(uint32_t dataId, uint32_t machineId); // 显式 dataId
+    void requestBatchInfo(uint32_t machineId);                  // 便捷:自动 m_nextDataId++
+
+    // —— 新增:便捷高层接口(自动分配 dataId)——
+    void requestMachines(); // 自动 m_nextDataId++
+    void requestStats(uint32_t machineId);
+    void requestSince(uint32_t machineId, uint32_t channelId,
+        uint64_t sinceTsExclusive, uint16_t maxCount = 1024);
+    // ★ 新增:便捷带 batchId
+    void requestSince(uint32_t machineId, uint32_t channelId,
+        uint64_t sinceTsExclusive, const std::string& batchId, uint16_t maxCount = 1024);
+
+    // 便捷:整机多通道增量
+    void requestSinceAll(uint32_t machineId, uint64_t sinceTsExclusive,
+        uint16_t maxPerChannel = 1024);
+    // ★ 新增:便捷带 batchId
+    void requestSinceAll(uint32_t machineId, uint64_t sinceTsExclusive,
+        const std::string& batchId, uint16_t maxPerChannel = 1024);
+
+private:
+    SocketComm socketComm;
+    std::function<void(int, std::string)> cbStatus;
+
+    // 原始数据回调 & 开关
+    std::function<void(const std::vector<uint8_t>&)> cbRaw;
+    bool rawDumpEnabled = true;
+
+    std::thread recvThread;
+    std::atomic<bool> recvRunning{ false };
+    SamplesCallback      cbSamples;
+    SamplesMultiCallback cbSamplesMulti;
+    MachinesCallback     cbMachines;
+    StatsCallback        cbStats;
+    BatchInfoCallback    cbBatchInfo; // ★ 新增
+
+    // dataId 递增,用于配对请求/响应
+    uint32_t m_nextDataId = 1;
+    bool m_versionOk = false;
+};
+
+#endif // DISPLAY_H

--
Gitblit v1.9.3