mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-06 11:31:49 +00:00
udp support
This commit is contained in:
parent
eba7eed8c0
commit
4a9aad04ff
5 changed files with 607 additions and 64 deletions
|
|
@ -13,6 +13,9 @@ namespace network {
|
|||
using OnResponse = std::function<void(std::vector<char>)>;
|
||||
using OnReject = std::function<void(int)>;
|
||||
using ConnectCallback = std::function<void(u64id_t, u64id_t)>;
|
||||
using ServerDatagramCallback = std::function<void(u64id_t sid, const std::string& addr, int port, const char* buffer, size_t length)>;
|
||||
using ClientDatagramCallback = std::function<void(u64id_t cid, const char* buffer, size_t length)>;
|
||||
|
||||
|
||||
class Requests {
|
||||
public:
|
||||
|
|
@ -33,8 +36,8 @@ namespace network {
|
|||
long maxSize=0
|
||||
) = 0;
|
||||
|
||||
virtual size_t getTotalUpload() const = 0;
|
||||
virtual size_t getTotalDownload() const = 0;
|
||||
[[nodiscard]] virtual size_t getTotalUpload() const = 0;
|
||||
[[nodiscard]] virtual size_t getTotalDownload() const = 0;
|
||||
|
||||
virtual void update() = 0;
|
||||
};
|
||||
|
|
@ -43,32 +46,82 @@ namespace network {
|
|||
INITIAL, CONNECTING, CONNECTED, CLOSED
|
||||
};
|
||||
|
||||
enum class TransportType {
|
||||
TCP, UDP
|
||||
};
|
||||
|
||||
class Connection {
|
||||
public:
|
||||
virtual ~Connection() {}
|
||||
virtual ~Connection() = default;
|
||||
|
||||
virtual void connect(runnable callback) = 0;
|
||||
virtual int recv(char* buffer, size_t length) = 0;
|
||||
virtual int send(const char* buffer, size_t length) = 0;
|
||||
virtual void close(bool discardAll=false) = 0;
|
||||
virtual int available() = 0;
|
||||
|
||||
virtual int send(const char* buffer, size_t length) = 0;
|
||||
|
||||
virtual size_t pullUpload() = 0;
|
||||
virtual size_t pullDownload() = 0;
|
||||
|
||||
virtual int getPort() const = 0;
|
||||
virtual std::string getAddress() const = 0;
|
||||
[[nodiscard]] virtual int getPort() const = 0;
|
||||
[[nodiscard]] virtual std::string getAddress() const = 0;
|
||||
|
||||
virtual ConnectionState getState() const = 0;
|
||||
[[nodiscard]] virtual ConnectionState getState() const = 0;
|
||||
|
||||
[[nodiscard]] virtual TransportType getTransportType() const noexcept = 0;
|
||||
};
|
||||
|
||||
class TcpServer {
|
||||
class TcpConnection : public Connection {
|
||||
public:
|
||||
virtual ~TcpServer() {}
|
||||
virtual void startListen(ConnectCallback handler) = 0;
|
||||
~TcpConnection() override = default;
|
||||
|
||||
virtual void connect(runnable callback) = 0;
|
||||
virtual int recv(char* buffer, size_t length) = 0;
|
||||
virtual int available() = 0;
|
||||
|
||||
[[nodiscard]] TransportType getTransportType() const noexcept override {
|
||||
return TransportType::TCP;
|
||||
}
|
||||
};
|
||||
|
||||
class UdpConnection : public Connection {
|
||||
public:
|
||||
~UdpConnection() override = default;
|
||||
|
||||
virtual void connect(ClientDatagramCallback handler) = 0;
|
||||
|
||||
[[nodiscard]] TransportType getTransportType() const noexcept override {
|
||||
return TransportType::UDP;
|
||||
}
|
||||
};
|
||||
|
||||
class Server {
|
||||
public:
|
||||
virtual ~Server() = default;
|
||||
virtual void close() = 0;
|
||||
virtual bool isOpen() = 0;
|
||||
virtual int getPort() const = 0;
|
||||
[[nodiscard]] virtual TransportType getTransportType() const noexcept = 0;
|
||||
[[nodiscard]] virtual int getPort() const = 0;
|
||||
};
|
||||
|
||||
class TcpServer : public Server {
|
||||
public:
|
||||
~TcpServer() override {}
|
||||
virtual void startListen(ConnectCallback handler) = 0;
|
||||
|
||||
[[nodiscard]] TransportType getTransportType() const noexcept override {
|
||||
return TransportType::TCP;
|
||||
}
|
||||
};
|
||||
|
||||
class UdpServer : public Server {
|
||||
public:
|
||||
~UdpServer() override {}
|
||||
virtual void startListen(ServerDatagramCallback handler) = 0;
|
||||
|
||||
virtual void sendTo(const std::string& addr, int port, const char* buffer, size_t length) = 0;
|
||||
|
||||
[[nodiscard]] TransportType getTransportType() const noexcept override {
|
||||
return TransportType::UDP;
|
||||
}
|
||||
};
|
||||
|
||||
class Network {
|
||||
|
|
@ -78,7 +131,7 @@ namespace network {
|
|||
std::mutex connectionsMutex {};
|
||||
u64id_t nextConnection = 1;
|
||||
|
||||
std::unordered_map<u64id_t, std::shared_ptr<TcpServer>> servers;
|
||||
std::unordered_map<u64id_t, std::shared_ptr<Server>> servers;
|
||||
u64id_t nextServer = 1;
|
||||
|
||||
size_t totalDownload = 0;
|
||||
|
|
@ -103,16 +156,18 @@ namespace network {
|
|||
);
|
||||
|
||||
[[nodiscard]] Connection* getConnection(u64id_t id);
|
||||
[[nodiscard]] TcpServer* getServer(u64id_t id) const;
|
||||
[[nodiscard]] Server* getServer(u64id_t id) const;
|
||||
|
||||
u64id_t connect(const std::string& address, int port, consumer<u64id_t> callback);
|
||||
u64id_t connectTcp(const std::string& address, int port, consumer<u64id_t> callback);
|
||||
u64id_t connectUdp(const std::string& address, int port, const consumer<u64id_t>& callback, ClientDatagramCallback handler);
|
||||
|
||||
u64id_t openServer(int port, ConnectCallback handler);
|
||||
u64id_t openTcpServer(int port, ConnectCallback handler);
|
||||
u64id_t openUdpServer(int port, const ServerDatagramCallback& handler);
|
||||
|
||||
u64id_t addConnection(const std::shared_ptr<Connection>& connection);
|
||||
|
||||
size_t getTotalUpload() const;
|
||||
size_t getTotalDownload() const;
|
||||
[[nodiscard]] size_t getTotalUpload() const;
|
||||
[[nodiscard]] size_t getTotalDownload() const;
|
||||
|
||||
void update();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue