Modules/Connection/public/LocalConnection.hpp
2023-10-26 16:27:43 +03:00

66 lines
No EOL
1.7 KiB
C++

#pragma once
#include "Archiver.hpp"
#include "ConnectionCommon.hpp"
namespace tp {
class LocalConnectionContext;
class LocalConnection : public Connection {
public:
class Location {
String mLocation;
public:
Location() :
mLocation("tmp"){};
explicit Location(const String& location) :
mLocation(location) {}
void setLocation(const String& location) { mLocation = location; }
[[nodiscard]] const String& getLocation() const { return mLocation; }
[[nodiscard]] bool exists() const;
};
public:
LocalConnection(){ MODULE_SANITY_CHECK(gModuleConnection) };
virtual ~LocalConnection() {
if (mStatus.isOpened()) LocalConnection::disconnect();
}
public:
virtual bool connect(const Location& location, const Type& connectionInfo);
virtual bool disconnect();
public:
virtual const Status& getConnectionStatus() { return mStatus; }
virtual const Type& getConnectionType() { return mConnectionType; }
virtual const Location& getLocation() { return mLocation; }
public:
virtual bool setPointer(BytePointer pointer);
virtual bool readBytes(Byte* bytes, SizeBytes size);
virtual bool writeBytes(const Byte* bytes, SizeBytes size);
public:
virtual SizeBytes size();
private:
LocalConnectionContext* mHandle = nullptr;
Location mLocation;
BytePointer mPointer = 0;
};
template <bool tRead>
class ArchiverLocalConnection : public ArchiverTemplate<tRead> {
public:
ArchiverLocalConnection() = default;
protected:
void writeBytes(const int1* val, ualni size) override { connection.writeBytes(val, size); }
void readBytes(int1* val, ualni size) override { connection.readBytes(val, size); }
public:
LocalConnection connection;
};
}