NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
input.hpp
浏览该文件的文档.
1#ifndef NEFORCE_TUI_INPUT_HPP__
2#define NEFORCE_TUI_INPUT_HPP__
3
10
14#ifdef NEFORCE_PLATFORM_LINUX
15# include <termios.h>
16#endif
17NEFORCE_BEGIN_NAMESPACE__
18NEFORCE_BEGIN_TUI__
19
24
26class reconciler;
28
34class NEFORCE_API input_driver {
35public:
44
45 input_driver(const input_driver&) = delete;
46 input_driver& operator=(const input_driver&) = delete;
47 input_driver(input_driver&&) = delete;
48 input_driver& operator=(input_driver&&) = delete;
49
53 void start();
54
58 void stop();
59
64 static bool check_resize_flag();
65
66private:
67#ifdef NEFORCE_PLATFORM_LINUX
68 void drain_stdin(int fd, uint32_t events, error_code ec);
69#else
70 static unsigned long WINAPI input_thread_proc(void* selfp);
71#endif
72
73 void process_byte(byte_t byte);
74 bool parse_escape_sequence();
75 bool parse_utf8_sequence();
76 bool parse_mouse_sequence();
77 void dispatch_key(const key_event& e);
78 void dispatch_mouse(const mouse_event& e);
79 void process_accumulated_bytes(const byte_t* data, size_t len);
80
81 io_context& ctx_;
82 reconciler& reconiler_;
83 strand& strand_;
84 sys_console& console_;
85
86 string accum_;
87 bool esc_active_ = false;
88 bool mouse_active_ = false;
89 bool utf8_active_ = false;
90 bool listening_ = false;
91
92 bool term_saved_ = false;
93#ifdef NEFORCE_PLATFORM_LINUX
94 ::termios old_termios_{};
95#elif defined(NEFORCE_PLATFORM_WINDOWS)
96 void* stdin_handle_ = nullptr;
97 void* input_thread_ = nullptr;
98 unsigned long old_in_mode_ = 0;
99#endif
100};
101 // TUI
103
104NEFORCE_END_TUI__
105NEFORCE_END_NAMESPACE__
106#endif // NEFORCE_TUI_INPUT_HPP__
统一异步操作核心
串行化执行器
系统控制台单例类
input_driver(io_context &ctx, reconciler &r, strand &s)
构造函数
void stop()
停止 stdin 监听
void start()
启动 stdin 监听
static bool check_resize_flag()
检查并清除终端尺寸变更标记
控制台输入输出工具
TUI输入事件类型定义
unsigned char byte_t
字节类型,定义为无符号字符
unsigned int uint32_t
32位无符号整数类型
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
串行化执行器