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
19
using namespace
std::chrono_literals;
20
25
namespace
roboctrl::device
{
26
36
struct
device_base
:
37
public
utils::immovable_base
,
38
public
utils::not_copyable_base
{
39
protected
:
40
const
std::chrono::nanoseconds
offline_timeout_
;
41
std::chrono::nanoseconds
tick_time_
{
42
utils::now
() - (
offline_timeout_
== std::chrono::nanoseconds::max() ? 0
ns
:
offline_timeout_
)
43
};
44
45
bool
terminated_ =
false
;
46
47
public
:
48
device_base
(
const
std::chrono::nanoseconds
offline_timeout
);
49
55
bool
offline
() {
return
offline_timeout_
== 0
ms
?
false
:
utils::now
() -
tick_time_
>
offline_timeout_
; }
56
60
void
tick
() {
tick_time_
=
utils::now
(); }
61
68
awaitable<void>
task
(){
co_return
;}
69
};
70
74
template
<
typename
T>
75
concept
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
85
bool
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
}
async.hpp
异步任务上下文组件。
roboctrl::device::device
设备概念,约束 task() 等接口。
Definition
base.hpp:75
concepts.hpp
公共Concept与元类型工具。
logger.h
用于日志输出的组件。
multiton.hpp
用于实现多例模式的通用组件。
roboctrl::async::awaitable
asio::awaitable< T > awaitable
协程任务类型。
Definition
async.hpp:42
roboctrl::device
设备模块
Definition
base.hpp:25
roboctrl::device::is_offline
bool is_offline(auto &... devs)
判断多个设备是否离线
Definition
base.hpp:85
roboctrl::utils::now
auto now()
记录程序启动后的纳秒级时间戳。
Definition
utils.hpp:147
roboctrl::device::device_base
设备基础类,提供判断设备离线的基础功能
Definition
base.hpp:38
roboctrl::device::device_base::offline
bool offline()
判断设备是否离线
Definition
base.hpp:55
roboctrl::device::device_base::offline_timeout_
const std::chrono::nanoseconds offline_timeout_
设备离线超时时间
Definition
base.hpp:40
roboctrl::device::device_base::tick_time_
std::chrono::nanoseconds tick_time_
上次心跳时间
Definition
base.hpp:41
roboctrl::device::device_base::tick
void tick()
更新心跳时间
Definition
base.hpp:60
roboctrl::device::device_base::task
awaitable< void > task()
默认的task
Definition
base.hpp:68
roboctrl::utils::immovable_base
快速继承获得“不可移动”约束的基类。
Definition
concepts.hpp:59
roboctrl::utils::not_copyable_base
快速继承获得“不可复制”约束的基类。
Definition
concepts.hpp:68
utils.hpp
常用数值与字节工具集合。
include
device
base.hpp
制作者
1.9.8