49 lines
1.1 KiB
C++
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
|