GKD.RoboCtrl
载入中...
搜索中...
未找到
base.hpp
浏览该文件的文档.
1
6#pragma once
7#include <chrono>
8#include <concepts>
9#include <type_traits>
10#include <vector>
11
12#include "core/logger.h"
13#include "core/multiton.hpp"
14#include "core/async.hpp"
15#include "utils/concepts.hpp"
16#include "utils/singleton.hpp"
17#include "utils/utils.hpp"
18
19using namespace std::chrono_literals;
20
26
39protected:
40 const std::chrono::nanoseconds offline_timeout_;
41 std::chrono::nanoseconds tick_time_ {
42 utils::now() - (offline_timeout_ == std::chrono::nanoseconds::max() ? 0ns : offline_timeout_)
43 };
44
45 bool terminated_ = false;
46
47public:
48 device_base(const std::chrono::nanoseconds offline_timeout);
49
56
60 void tick() { tick_time_ = utils::now(); }
61
69};
70
74template<typename T>
75concept device = std::is_base_of_v<device_base, T> && roboctrl::owner<T> && requires (T dev) {
76 {dev.task()} -> std::same_as<awaitable<void>>;
77};
78
85bool is_offline(auto&... devs)
86 requires (requires(decltype(devs) d) {
87 { d.offline() } -> std::same_as<bool>;
88 } and ...) {
89 return (devs.offline() or ...);
90}
91}
异步任务上下文组件。
设备概念,约束 task() 等接口。
Definition base.hpp:75
公共Concept与元类型工具。
用于日志输出的组件。
用于实现多例模式的通用组件。
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42
设备模块
Definition base.hpp:25
bool is_offline(auto &... devs)
判断多个设备是否离线
Definition base.hpp:85
auto now()
记录程序启动后的纳秒级时间戳。
Definition utils.hpp:147
设备基础类,提供判断设备离线的基础功能
Definition base.hpp:38
bool offline()
判断设备是否离线
Definition base.hpp:55
const std::chrono::nanoseconds offline_timeout_
设备离线超时时间
Definition base.hpp:40
std::chrono::nanoseconds tick_time_
上次心跳时间
Definition base.hpp:41
void tick()
更新心跳时间
Definition base.hpp:60
awaitable< void > task()
默认的task
Definition base.hpp:68
快速继承获得“不可移动”约束的基类。
Definition concepts.hpp:59
快速继承获得“不可复制”约束的基类。
Definition concepts.hpp:68
常用数值与字节工具集合。