#pragma once #include #include #include #include #include "ASIO_Utils.h" 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 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 recv_storage; std::vector send_storage; bool connect_pending = false; bool read_pending = false; bool write_pending = false; void start_read(); void start_write(); }; } // namespace Psc::asio_socket