#pragma once #ifndef DISPLAY_H #define DISPLAY_H #include "CommBase.h" #include "../net/SocketComm.h" #include #include #include #include "../proto/Protocol.h" #include "../proto/ProtocolCodec.h" // »Øµ÷£ºÊÕµ½Ñù±¾µÄÉÏÅ×£¨UI ÓÃËü»­Í¼/´æ±¾µØ£© using SamplesCallback = std::function& samples)>; using SamplesMultiCallback = std::function& blocks)>; using MachinesCallback = std::function& machines)>; using StatsCallback = std::function& channels)>; // ¡ï ÐÂÔö£ºÅú´ÎÐÅÏ¢»Øµ÷ using BatchInfoCallback = std::function; class Display : public CommBase { public: Display(); ~Display(); void sendSampleData(double sample) override; void sendWindowData(const std::vector& 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& rawData); void setConnectionStatusCallback(std::function cb) override { cbStatus = std::move(cb); } void setRawDataCallback(std::function&)> 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 cbStatus; // ԭʼÊý¾Ý»Øµ÷ & ¿ª¹Ø std::function&)> cbRaw; bool rawDumpEnabled = true; std::thread recvThread; std::atomic 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