22namespace roboctrl::io{
33 using key_type = std::string_view;
40 std::string_view key()
const{
48 explicit tcp(info_type info);
52 tcp(asio::ip::tcp::socket
socket, std::string key);
64 inline std::string desc()
const{
65 return std::format(
"tcp socket (<{}> to {}:{})",info_.
name,info_.
address,info_.
port);
69 asio::ip::tcp::socket socket_;
71 std::array<std::byte,1024> buffer_;
86 using key_type = std::string_view;
93 std::string_view key()
const{
112 on_connect_.add(std::move(
callback));
119 on_connect_.add(std::move(
callback));
122 inline std::string desc()
const{
123 return std::format(
"tcp server (<{}> listening on {}:{})",info_.
name,info_.
address,info_.
port);
127 std::shared_ptr<tcp> make_connection(asio::ip::tcp::socket
socket);
129 asio::ip::tcp::acceptor acceptor_;
132 std::vector<std::shared_ptr<tcp>> connections_;
awaitable< void > task()
接受连接的长任务。
void on_connect(std::function< void(std::shared_ptr< tcp >)> callback)
注册同步回调,在新连接建立时触发。
void on_connect(std::function< awaitable< void >(std::shared_ptr< tcp >)> callback)
注册协程回调,在新连接建立时触发。
awaitable< void > send(byte_span data)
发送字节数据。
awaitable< void > task()
接收循环任务。
std::span< std::byte > byte_span
byte span,实际上就是一个std::span<std::byte>;
asio::awaitable< T > awaitable
协程任务类型。
std::string address
TCP 连接地址