#ifndef FAST_DDS_GENERATED__PUBLISHERAPP_HPP #define FAST_DDS_GENERATED__PUBLISHERAPP_HPP #include #include #include #include #include #include #include #include #include #include "MsgHandler.hpp" class PublisherApp : public eprosima::fastdds::dds::DataWriterListener, public eprosima::fastdds::dds::DataReaderListener { public: PublisherApp( const int& domain_id); ~PublisherApp(); //! Publisher matched method void on_publication_matched( eprosima::fastdds::dds::DataWriter* writer, const eprosima::fastdds::dds::PublicationMatchedStatus& info) override; //! Run publisher void run(std::shared_ptr handler); //! Trigger the end of execution void stop(); void on_data_available( eprosima::fastdds::dds::DataReader* reader) override; void on_subscription_matched( eprosima::fastdds::dds::DataReader* reader, const eprosima::fastdds::dds::SubscriptionMatchedStatus& info) override; //! 发布 QueueTrigger void PublishQueueTrigger(const std::string& card_number); private: //! Return the current state of execution bool is_stopped(); //! 生成 message_id:相同卡号复用,不同卡号累加,跨日重置 std::string GenerateMessageId(const std::string& card_number); std::shared_ptr factory_; eprosima::fastdds::dds::DomainParticipant* participant_; eprosima::fastdds::dds::Publisher* publisher_; eprosima::fastdds::dds::Topic* topic_; eprosima::fastdds::dds::DataWriter* writer_; eprosima::fastdds::dds::TypeSupport type_; std::condition_variable cv_; int32_t matched_; std::mutex mutex_; const uint32_t period_ms_ = 100; uint16_t samples_sent_; std::atomic stop_; // ── QueueTrigger 发布者 ── eprosima::fastdds::dds::Publisher* queue_trigger_publisher_; eprosima::fastdds::dds::Topic* queue_trigger_topic_; eprosima::fastdds::dds::DataWriter* queue_trigger_writer_; eprosima::fastdds::dds::TypeSupport queue_trigger_type_; // ── message_id 生成状态 ── std::mutex id_mtx_; std::string current_date_; // 当前日期 "YYYYMMDD" uint32_t sequence_num_; // 当日序号,从 1 开始 std::string last_card_; // 上一次检测到的卡号 std::string current_message_id_;// 当前 message_id(同卡复用) // ── 读卡触发逻辑:发 DDS 后等待 3 秒再恢复自动寻卡 ── std::chrono::steady_clock::time_point wait_end_time_; // 等待结束时刻 std::string last_trigger_card_; // 上次触发时的卡号(防重) bool wait_active_; // 是否处于"等待期",仅在 OnCardDetected 时置 true }; #endif // FAST_DDS_GENERATED__PUBLISHERAPP_HPP