Files
CPP_Core/Core/socket/UDP_Client.h
T
2026-06-29 09:40:55 +08:00

49 lines
1.1 KiB
C++

#pragma once
#include <string_view>
#include "ASIO_Utils.h"
#include <array>
#include <memory>
#include <vector>
namespace Psc::asio_socket {
class UDP_Client {
public:
void set_dest_address(const Sockaddr_In& value) {
dest_address = value;
}
void set_dest_address(std::string_view ip, std::uint32_t port) {
dest_address = Sockaddr_In(ip, port);
}
void create();
bool connect();
std::string read();
void tick();
void send(std::string_view data);
void close();
std::string to_string();
Sockaddr_In dest_address;
enum State {
Not_Created,
Not_Set_Field,
Connecting,
Working,
};
State state = Not_Created;
private:
asio::io_context io_context;
std::unique_ptr<asio::ip::udp::socket> socket;
asio::ip::udp::endpoint endpoint;
bool connected = false;
int read_chunk_size = 1024 * 1024;
size_t user_buffer_size = 1024 * 1024;
ASIO_PacketRingBuffer send_buffer;
ASIO_PacketRingBuffer recv_buffer;
std::vector<char> recv_storage;
std::vector<char> send_storage;
bool connect_pending = false;
bool read_pending = false;
bool write_pending = false;
void start_read();
void start_write();
};
} // namespace Psc::asio_socket