63 lines
1.6 KiB
C++
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;
|
|
};
|
|
|
|
|
|
|
|
} |