2026-07-22 17:55:45 +02:00
|
|
|
//SPDX-License-Identifier: LGPL-3.0-only
|
|
|
|
|
//SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
2025-11-02 15:00:53 +01:00
|
|
|
|
2025-11-03 15:51:13 +01:00
|
|
|
module;
|
2026-05-19 02:53:50 +02:00
|
|
|
#ifndef CRAFTER_NETWORK_BROWSER
|
2025-11-03 15:51:13 +01:00
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <sys/socket.h>
|
|
|
|
|
#include <netinet/in.h>
|
|
|
|
|
#include <arpa/inet.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <sys/uio.h>
|
|
|
|
|
#include <sys/time.h>
|
|
|
|
|
#include <sys/wait.h>
|
|
|
|
|
#include <sys/ioctl.h>
|
|
|
|
|
#include <netdb.h>
|
|
|
|
|
#include <strings.h>
|
|
|
|
|
#include <cerrno>
|
2026-05-19 02:53:50 +02:00
|
|
|
#endif
|
2025-11-02 15:00:53 +01:00
|
|
|
export module Crafter.Network:ClientTCP;
|
|
|
|
|
import std;
|
|
|
|
|
|
2026-05-19 02:53:50 +02:00
|
|
|
#ifndef CRAFTER_NETWORK_BROWSER
|
2025-11-02 15:00:53 +01:00
|
|
|
namespace Crafter {
|
2025-11-03 14:25:51 +01:00
|
|
|
export class SocketClosedException : public std::exception {
|
|
|
|
|
public:
|
|
|
|
|
const char* what() const noexcept override {
|
|
|
|
|
return "Socket closed";
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-11-02 15:00:53 +01:00
|
|
|
export class ClientTCP {
|
|
|
|
|
public:
|
2025-11-03 14:25:51 +01:00
|
|
|
int socketid;
|
2025-11-02 15:00:53 +01:00
|
|
|
ClientTCP(int socket);
|
|
|
|
|
ClientTCP(const char* host, std::uint16_t port);
|
|
|
|
|
ClientTCP(std::string host, std::uint16_t port);
|
|
|
|
|
~ClientTCP();
|
2025-11-03 15:51:13 +01:00
|
|
|
ClientTCP(const ClientTCP&) = delete;
|
|
|
|
|
ClientTCP(ClientTCP&& other) noexcept;
|
|
|
|
|
void Connect();
|
2025-11-03 14:25:51 +01:00
|
|
|
void Stop();
|
2025-11-02 15:00:53 +01:00
|
|
|
void Send(const void* buffer, std::uint32_t size) const;
|
|
|
|
|
std::vector<char> RecieveSync() const;
|
|
|
|
|
std::vector<char> RecieveUntilCloseSync() const;
|
|
|
|
|
std::vector<char> RecieveUntilFullSync(std::uint32_t bufferSize) const;
|
|
|
|
|
std::vector<char> RecieveSync(std::uint32_t bufferSize) const;
|
|
|
|
|
int RecieveSync(std::uint32_t bufferSize, void* buffer) const;
|
|
|
|
|
void RecieveAsync(std::function<void(std::vector<char>)> recieveCallback) const;
|
|
|
|
|
void RecieveUntilCloseAsync(std::function<void(std::vector<char>)> recieveCallback) const;
|
|
|
|
|
void RecieveAsync(std::uint32_t bufferSize, std::function<void(std::vector<char>)> recieveCallback) const;
|
|
|
|
|
void RecieveUntilFullAsync(std::uint32_t bufferSize, std::function<void(std::vector<char>)> recieveCallback) const;
|
|
|
|
|
void RecieveAsync(std::uint32_t bufferSize, std::function<void(int)> recieveCallback, char* buffer) const;
|
2025-11-03 15:51:13 +01:00
|
|
|
private:
|
|
|
|
|
hostent* host;
|
|
|
|
|
sockaddr_in serv_addr;
|
2025-11-02 15:00:53 +01:00
|
|
|
};
|
2026-05-19 02:53:50 +02:00
|
|
|
}
|
|
|
|
|
#endif
|