GKD.RoboCtrl
载入中...
搜索中...
未找到
tcp.h
浏览该文件的文档.
1
6#pragma once
7
8#include <asio.hpp>
9#include <array>
10#include <cstdint>
11#include <format>
12#include <memory>
13#include <string>
14#include <string_view>
15#include <utility>
16#include <vector>
17
18#include "core/async.hpp"
19#include "io/base.hpp"
20#include "utils/callback.hpp"
21
22namespace roboctrl::io{
23
27class tcp : public bare_io_base{
28public:
32 struct info_type{
33 using key_type = std::string_view;
34 using owner_type = tcp;
35
36 std::string name;
37 std::string address;
38 std::uint16_t port;
39
40 std::string_view key()const{
41 return name;
42 }
43 };
44
48 explicit tcp(info_type info);
52 tcp(asio::ip::tcp::socket socket, std::string key);
53
58
63
64 inline std::string desc()const{
65 return std::format("tcp socket (<{}> to {}:{})",info_.name,info_.address,info_.port);
66 }
67
68private:
69 asio::ip::tcp::socket socket_;
70 info_type info_;
71 std::array<std::byte,1024> buffer_;
72};
73
74static_assert(bare_io<tcp>);
75
81public:
85 struct info_type{
86 using key_type = std::string_view;
87 using owner_type = tcp_server;
88
89 std::string name;
90 std::string address;
91 std::uint16_t port;
92
93 std::string_view key()const{
94 return name;
95 }
96 };
97
101 explicit tcp_server(info_type info);
102
107
111 void on_connect(std::function<awaitable<void>(std::shared_ptr<tcp>)> callback){
112 on_connect_.add(std::move(callback));
113 }
114
118 void on_connect(std::function<void(std::shared_ptr<tcp>)> callback){
119 on_connect_.add(std::move(callback));
120 }
121
122 inline std::string desc()const{
123 return std::format("tcp server (<{}> listening on {}:{})",info_.name,info_.address,info_.port);
124 }
125
126private:
127 std::shared_ptr<tcp> make_connection(asio::ip::tcp::socket socket);
128
129 asio::ip::tcp::acceptor acceptor_;
130 info_type info_;
132 std::vector<std::shared_ptr<tcp>> connections_;
133};
134}
异步任务上下文组件。
协程回调收集器。
管理一组协程回调的容器。
Definition callback.hpp:34
裸IO组件。
Definition base.hpp:65
TCP 监听服务器,负责接受并管理多连接。
Definition tcp.h:80
awaitable< void > task()
接受连接的长任务。
Definition tcp.cpp:62
void on_connect(std::function< void(std::shared_ptr< tcp >)> callback)
注册同步回调,在新连接建立时触发。
Definition tcp.h:118
void on_connect(std::function< awaitable< void >(std::shared_ptr< tcp >)> callback)
注册协程回调,在新连接建立时触发。
Definition tcp.h:111
TCP 客户端套接字。
Definition tcp.h:27
awaitable< void > send(byte_span data)
发送字节数据。
Definition tcp.cpp:34
awaitable< void > task()
接收循环任务。
Definition tcp.cpp:39
IO的基础组件。
std::span< std::byte > byte_span
byte span,实际上就是一个std::span<std::byte>;
Definition base.hpp:42
asio::awaitable< T > awaitable
协程任务类型。
Definition async.hpp:42
TCP 连接参数。
Definition tcp.h:32
std::string name
TCP 连接名称
Definition tcp.h:36
std::string address
TCP 连接地址
Definition tcp.h:37
std::uint16_t port
TCP 端口
Definition tcp.h:38
服务器初始化参数。
Definition tcp.h:85
std::string address
监听地址
Definition tcp.h:90
std::uint16_t port
监听端口
Definition tcp.h:91
std::string name
服务器名称
Definition tcp.h:89