Files
CPP_Core/Socket_old/TCP_Server.h
T
2026-06-16 10:56:40 +08:00

63 lines
1.6 KiB
C++

#pragma once
#include "Core/Base/RingBuffer.hpp"
#include "Core/Statistics/Statistics.h"
#include "Socket.h"
namespace Psc::socket {
class TCP_Connect {
public:
Accept_Info info;
[[nodiscard]] std::string to_string() const {
return info.to_string();
}
StreamRingBuffer_ST send_buffer;
Speed_Statistics push_speed;
Speed_Statistics lose_speed;
Value_Statistics send_num;
};
class TCP_Server : public Socket_Base {
public:
~TCP_Server() override;
TCP_Server& set_tcp_no_delay(bool no_delay);
void close() override;
TCP_Server& create();
TCP_Server& set_connect_system_buffer_size(size_t size);
TCP_Server& set_connect_user_buffer_size(size_t size);
TCP_Server& set_recv_system_buffer_size(size_t size);
bool listen(const std::string &ip, std::uint32_t port);
std::string to_string() override;
void write_to_all_clients(const std::string &data);
struct Read_Info {
Accept_Info info;
std::string data;
};
enum State {
Not_Created,
Not_Set_Field,
Not_bind,
Not_Listen,
Working
};
State state = Not_Created;
std::vector<Read_Info> read_from_all_clients();
std::vector<Socket_FD> client_fds();
std::vector<std::shared_ptr<TCP_Connect>> get_all_clients();
void flush_clients();
[[nodiscard]] std::shared_ptr<TCP_Connect> accept() const;
bool listen(const Sockaddr_In &address);
protected:
std::map<Socket_FD, std::shared_ptr<TCP_Connect>> tcp_clients;
size_t connect_user_buffer_size = 1024 * 1024;
size_t connect_system_buffer_size = 4096 * 10;
size_t max_pending_send_bytes = 1024 * 1024;
size_t recv_system_buffer_size = 1024 * 1024;
bool no_delay = true;
};
}