载入中...
搜索中...
未找到
CommandQueue.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6#include "common/Module.h"
7#include "common/Result.h"
8#include "common/Scheduling.h"
10#include "common/Value.h"
11
12#include <cstddef>
13#include <cstdint>
14#include <deque>
15#include <map>
16#include <memory>
17#include <string>
18#include <vector>
19
20namespace eve::orders {
21
26
29
37public:
39 void setString(const std::string& key, const std::string& value);
41 void setNumber(const std::string& key, double value);
43 void setBool(const std::string& key, bool value);
45 void setNull(const std::string& key);
47 [[nodiscard]] eve::Result<void> setJson(const std::string& key, std::string_view json);
49 [[nodiscard]] eve::Result<void> set(const std::string& key, eve::Value value);
51 bool has(const std::string& key) const;
53 [[nodiscard]] eve::Result<bool> erase(const std::string& key);
55 void clear();
57 std::string getJson(const std::string& key) const;
59 std::string toJson() const;
60
61private:
62 friend class CommandQueue;
63 eve::Value::Object values_;
64};
65
74
82
90public:
92 [[nodiscard]] eve::Result<std::string> append(const std::string& kind, int priority = 0,
93 double timeoutSeconds = 0.0);
95 [[nodiscard]] eve::Result<std::string> replace(const std::string& kind, int priority = 0,
96 double timeoutSeconds = 0.0);
98 [[nodiscard]] eve::Result<std::string> interrupt(const std::string& kind, int priority = 0,
99 double timeoutSeconds = 0.0);
101 [[nodiscard]] eve::Result<void> complete(const std::string& id);
103 [[nodiscard]] eve::Result<void> fail(const std::string& id, const std::string& reason);
105 [[nodiscard]] eve::Result<void> cancel(const std::string& id, const std::string& reason = "cancelled");
111 [[nodiscard]] eve::Result<void> update(double dtSeconds);
113 void clear();
114
123 [[nodiscard]] eve::OptionalRef<Order> current();
132 [[nodiscard]] eve::OptionalRef<const Order> current() const;
141 [[nodiscard]] eve::OptionalRef<Order> find(const std::string& id);
150 [[nodiscard]] eve::OptionalRef<const Order> find(const std::string& id) const;
152 int queuedCount() const;
154 int orderCount() const;
163 [[nodiscard]] eve::OptionalRef<Order> orderAt(int index);
172 [[nodiscard]] eve::OptionalRef<const Order> orderAt(int index) const;
173
175 int eventCount() const;
184 [[nodiscard]] eve::OptionalRef<OrderEvent> eventAt(int index);
186 [[nodiscard]] eve::OptionalRef<const OrderEvent> eventAt(int index) const;
188 void clearEvents();
189
195 [[nodiscard]] eve::Result<std::string> snapshot() const;
196
203 [[nodiscard]] eve::Result<void> restore(std::string_view json);
204
205private:
206 std::string appendUnchecked(const std::string& kind, int priority, double timeoutSeconds);
207 std::string replaceUnchecked(const std::string& kind, int priority, double timeoutSeconds);
208 std::string interruptUnchecked(const std::string& kind, int priority, double timeoutSeconds);
209 bool completeUnchecked(const std::string& id);
210 bool failUnchecked(const std::string& id, const std::string& reason);
211 bool cancelUnchecked(const std::string& id, const std::string& reason);
212 void updateUnchecked(double dtSeconds);
213 std::string create(const std::string& kind, int priority, double timeoutSeconds, bool activateNow);
214 void activateNext();
215 bool transition(Order& order, OrderState state, const std::string& reason);
216 void cancelUnfinished(const std::string& reason);
217
218 uint64_t nextId_ = 1;
219 uint64_t nextSequence_ = 1;
220 std::deque<Order> orders_;
221 std::vector<size_t> queued_;
222 size_t active_ = static_cast<size_t>(-1);
223 std::deque<OrderEvent> events_;
224};
225
228
230class Orders : public Module {
231public:
234 Orders() = default;
236 ~Orders() override = default;
237
245
248
251
253 [[nodiscard]] static bool isStale(CommandQueueHandleRef reference) noexcept;
254
255private:
257};
258
259} // namespace eve::orders
double value
AuthorityStoreHandleRef reference
Definition Authority.cpp:24
Vocabulary aliases for nullable and checked borrowed references.
int priority
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
std::uint32_t key
TokenKind kind
std::vector< std::int32_t > order
std::function< eve::Result< void >()> release
Definition Procgen.cpp:86
Move-only, checked operation results for the common layer.
Shared metadata for independently deployable command and work queues.
double current
Explicit Value/Owned/Borrowed semantics at the Squirrel boundary.
uint32_t index
Owning, renderer-independent dynamic values.
EVENGINE_API_FOUNDATION public API.
Definition Module.h:46
Move-only operation result carrying either a value or Status.
Definition Result.h:155
The canonical owning dynamic value used by data-facing protocols.
Definition Value.h:31
std::map< std::string, Value > Object
Definition Value.h:34
Generic priority order queue with no gameplay or entity semantics.
JSON-compatible key/value payload carried by an order.
Script module factory for generic CommandQueue objects.
static eve::Result< CommandQueueHandleRef > newQueueHandle()
Allocates a queue and returns its generation-qualified ownership reference.
static bool isStale(CommandQueueHandleRef reference) noexcept
Reports whether a queue reference is invalid for the current module.
~Orders() override=default
Releases Orders resources.
static eve::script::Borrowed< CommandQueue > resolve(CommandQueueHandleRef reference) noexcept
Resolves a live queue as a non-owning observation.
Orders()=default
Constructs a Orders.
Non-owning C++ observation with no implicit lifetime extension.
Slot/generation registry whose objects are exclusively unique-owned.
OrderState
Lifecycle state of a generic order.
std::string stateName(OrderState state)
Returns the stable lowercase name of a state.
std::optional< std::reference_wrapper< T > > OptionalRef
Optional borrowed reference; it does not extend T's lifetime.
Definition BorrowedRef.h:24
Owner tag for non-ECS order queue handles.
Deterministically sequenced order lifecycle event.
One entity-agnostic command and its lifecycle metadata.
OrderPayload payload
Sequence and explanation shared by queue lifecycle events.
Definition Scheduling.h:21
Identity, priority and terminal explanation shared by scheduled items.
Definition Scheduling.h:14
Handle plus owner-lifetime epoch for a non-ECS registry object.