API mission
This commit is contained in:
@@ -137,6 +137,9 @@ std::optional<nlohmann::json> MissionQueue::enqueue(const nlohmann::json& payloa
|
||||
entry["mission"] = payload["mission"];
|
||||
entry["parameters"] = payload.contains("parameters") && payload["parameters"].is_object() ? payload["parameters"]
|
||||
: nlohmann::json::object();
|
||||
entry["priority"] = payload.contains("priority") && payload["priority"].is_number() ? payload["priority"].get<int>() : 0;
|
||||
entry["robot_id"] = payload.value("robot_id", "default");
|
||||
entry["source"] = payload.value("source", "ui");
|
||||
entry["status"] = "pending";
|
||||
entry["created_at"] = IdUtil::nowIso8601();
|
||||
entry["started_at"] = nullptr;
|
||||
@@ -145,7 +148,7 @@ std::optional<nlohmann::json> MissionQueue::enqueue(const nlohmann::json& payloa
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
queue_.push_back(entry);
|
||||
insertByPriorityUnlocked(entry);
|
||||
saveUnlocked();
|
||||
}
|
||||
|
||||
@@ -153,6 +156,29 @@ std::optional<nlohmann::json> MissionQueue::enqueue(const nlohmann::json& payloa
|
||||
return entry;
|
||||
}
|
||||
|
||||
void MissionQueue::insertByPriorityUnlocked(nlohmann::json& entry)
|
||||
{
|
||||
const int priority = entry.value("priority", 0);
|
||||
size_t insert_at = queue_.size();
|
||||
for (size_t i = 0; i < queue_.size(); ++i)
|
||||
{
|
||||
if (!queue_[i].is_object())
|
||||
continue;
|
||||
if (queue_[i].value("status", "") != "pending")
|
||||
continue;
|
||||
const int existing = queue_[i].value("priority", 0);
|
||||
if (priority > existing)
|
||||
{
|
||||
insert_at = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (insert_at >= queue_.size())
|
||||
queue_.push_back(entry);
|
||||
else
|
||||
queue_.insert(queue_.begin() + static_cast<nlohmann::json::difference_type>(insert_at), entry);
|
||||
}
|
||||
|
||||
bool MissionQueue::removeById(const std::string& id, std::string& err)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mu_);
|
||||
|
||||
Reference in New Issue
Block a user