//SPDX-License-Identifier: LGPL-3.0-only //SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts® module; #ifndef CRAFTER_NETWORK_BROWSER #include #include #include #include #include #include #include #include #include #include #include #include #include #endif export module Crafter.Network:ClientTCP; import std; #ifndef CRAFTER_NETWORK_BROWSER namespace Crafter { export class SocketClosedException : public std::exception { public: const char* what() const noexcept override { return "Socket closed"; } }; export class ClientTCP { public: int socketid; ClientTCP(int socket); ClientTCP(const char* host, std::uint16_t port); ClientTCP(std::string host, std::uint16_t port); ~ClientTCP(); ClientTCP(const ClientTCP&) = delete; ClientTCP(ClientTCP&& other) noexcept; void Connect(); void Stop(); void Send(const void* buffer, std::uint32_t size) const; std::vector RecieveSync() const; std::vector RecieveUntilCloseSync() const; std::vector RecieveUntilFullSync(std::uint32_t bufferSize) const; std::vector RecieveSync(std::uint32_t bufferSize) const; int RecieveSync(std::uint32_t bufferSize, void* buffer) const; void RecieveAsync(std::function)> recieveCallback) const; void RecieveUntilCloseAsync(std::function)> recieveCallback) const; void RecieveAsync(std::uint32_t bufferSize, std::function)> recieveCallback) const; void RecieveUntilFullAsync(std::uint32_t bufferSize, std::function)> recieveCallback) const; void RecieveAsync(std::uint32_t bufferSize, std::function recieveCallback, char* buffer) const; private: hostent* host; sockaddr_in serv_addr; }; } #endif