abstract common tcp operations to a base class
This commit is contained in:
44
common/TcpBase.hpp
Normal file
44
common/TcpBase.hpp
Normal file
@@ -0,0 +1,44 @@
|
||||
|
||||
#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:
|
||||
|
||||
TcpBase(LoggerService* logger);
|
||||
~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
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user