49 lines
1.1 KiB
C++
49 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "action_base.h"
|
|
|
|
#include <atomic>
|
|
#include <condition_variable>
|
|
#include <mutex>
|
|
#include <queue>
|
|
#include <thread>
|
|
|
|
namespace rk3588 {
|
|
|
|
class HttpAction : public IAlarmAction {
|
|
public:
|
|
~HttpAction();
|
|
bool Init(const SimpleJson& config) override;
|
|
void Execute(AlarmEvent& event, std::shared_ptr<Frame> frame) override;
|
|
void Drain() override;
|
|
void Stop() override;
|
|
std::string Name() const override { return "http"; }
|
|
|
|
private:
|
|
void WorkerLoop();
|
|
bool SendRequest(const std::string& json_body);
|
|
|
|
enum class QueuePolicy {
|
|
DropOldest,
|
|
DropNewest,
|
|
};
|
|
|
|
std::string url_;
|
|
int timeout_ms_ = 3000;
|
|
bool include_media_url_ = true;
|
|
std::string method_ = "POST";
|
|
|
|
std::atomic<bool> running_{false};
|
|
std::thread worker_;
|
|
std::mutex queue_mutex_;
|
|
std::condition_variable queue_cv_;
|
|
std::queue<std::string> request_queue_;
|
|
size_t in_flight_ = 0;
|
|
|
|
size_t max_queue_size_ = 0; // 0 = unlimited
|
|
QueuePolicy queue_policy_ = QueuePolicy::DropOldest;
|
|
uint64_t dropped_total_ = 0;
|
|
};
|
|
|
|
} // namespace rk3588
|