Files
accordion/common/TcpBase.hpp
2026-07-25 23:51:39 -05:00

47 lines
1.4 KiB
C++

#pragma once
#include "ErrorCodes.hpp"
#include "LoggerService.hpp"
// TcpBase contains common tcp I/O operations for the tcp client and tcp server
// Abstracts away the networking methods into an accordion common protocol (ACP)
class TcpBase : public QObject{
Q_OBJECT
public:
TcpBase(LoggerService* logger, QObject* parent = nullptr);
~TcpBase();
// read from a tcp socket, blocking
ssize_t tcpRead(int fd, void* buffer, size_t maxBytes);
// read from a tcp socket, blocking with timeout
ssize_t tcpTimedRead(int fd, void* buffer, size_t maxBytes, int timeoutPlaceholder);
// send over a tcp socket, blocking
ssize_t tcpSend(int fd, const void* buffer, size_t numBytes);
// send over a tcp socket, blocking with timeout
ssize_t tcpTimedSend(int fd, const void* buffer, size_t numBytes, int timeoutPlaceholder);
protected:
LoggerService* logger_;
private:
ssize_t receiveHeader(int fd, void* buffer, size_t maxBytes);
ssize_t receivePayload(int fd, void* buffer, size_t maxBytes);
ssize_t sendHeader(int fd, const void* buffer, size_t maxBytes);
ssize_t sendPayload(int fd, const void* buffer, size_t maxBytes);
ssize_t receiveFull(int fd, void* buffer, size_t maxBytes);
ssize_t sendFull(int fd, const void* buffer, size_t numBytes);
static constexpr size_t kHeaderSize = 8; // 4 bytes for length, 4 bytes for type
};