Restructure Storage Module -> Connection module

This commit is contained in:
IlushaShurupov 2023-07-21 19:55:31 +03:00 committed by Ilya Shurupov
parent f60e73fc32
commit 8c600a1cdb
24 changed files with 121 additions and 354 deletions

View file

@ -18,4 +18,4 @@ add_subdirectory(Allocators)
add_subdirectory(Strings) add_subdirectory(Strings)
add_subdirectory(Tokenizer) add_subdirectory(Tokenizer)
add_subdirectory(CommandLine) add_subdirectory(CommandLine)
add_subdirectory(Storage) add_subdirectory(Connection)

View file

@ -10,7 +10,7 @@ file(GLOB SOURCES "./private/*.cpp")
file(GLOB HEADERS "./public/*.hpp") file(GLOB HEADERS "./public/*.hpp")
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
target_include_directories(${PROJECT_NAME} PUBLIC ./public/) target_include_directories(${PROJECT_NAME} PUBLIC ./public/)
target_link_libraries(${PROJECT_NAME} PUBLIC Tokenizer Storage) target_link_libraries(${PROJECT_NAME} PUBLIC Tokenizer Connection)
### -------------------------- Tests -------------------------- ### ### -------------------------- Tests -------------------------- ###
enable_testing() enable_testing()

View file

@ -3,7 +3,7 @@
using namespace tp; using namespace tp;
static ModuleManifest* sModuleDependencies[] = { &gModuleTokenizer, &gModuleStorage, nullptr }; static ModuleManifest* sModuleDependencies[] = { &gModuleTokenizer, &gModuleConnection, nullptr };
ModuleManifest tp::gModuleCommandLine = ModuleManifest("CommandLine", nullptr, nullptr, sModuleDependencies); ModuleManifest tp::gModuleCommandLine = ModuleManifest("CommandLine", nullptr, nullptr, sModuleDependencies);
const char* regexSpace = "\n|\t| |\r"; const char* regexSpace = "\n|\t| |\r";
@ -219,7 +219,7 @@ alni CommandLine::getInt(const String& id) const { auto& arg = getArg(id, Arg::I
alnf CommandLine::getFloat(const String& id) const { auto& arg = getArg(id, Arg::FLOAT); return arg.mFloat.mVal; } alnf CommandLine::getFloat(const String& id) const { auto& arg = getArg(id, Arg::FLOAT); return arg.mFloat.mVal; }
bool CommandLine::getBool(const String& id) const { auto& arg = getArg(id, Arg::BOOL); return arg.mBool.mFlag; } bool CommandLine::getBool(const String& id) const { auto& arg = getArg(id, Arg::BOOL); return arg.mBool.mFlag; }
const String& CommandLine::getString(const String& id) const { auto& arg = getArg(id, Arg::STR); return arg.mStr.mStr; } const String& CommandLine::getString(const String& id) const { auto& arg = getArg(id, Arg::STR); return arg.mStr.mStr; }
const FileLocation& CommandLine::getFile(const String& id) const { auto& arg = getArg(id, Arg::FILE_IN); return arg.mFile.mFileLocation; } const LocalConnectionLocation& CommandLine::getFile(const String& id) const { auto& arg = getArg(id, Arg::FILE_IN); return arg.mFile.mFileLocation; }
CommandLine::Arg& CommandLine::getArg(const String& id, Arg::Type type) { CommandLine::Arg& CommandLine::getArg(const String& id, Arg::Type type) {

View file

@ -1,8 +1,8 @@
#pragma once #pragma once
#include "Tokenizer.hpp"
#include "Map.hpp" #include "Map.hpp"
#include "LocalStorage.hpp" #include "LocalConnection.hpp"
#include "Tokenizer.hpp"
namespace tp { namespace tp {
@ -33,7 +33,7 @@ namespace tp {
}; };
struct FileInputArg { struct FileInputArg {
FileLocation mFileLocation; LocalConnectionLocation mFileLocation;
}; };
struct Arg { struct Arg {
@ -81,7 +81,7 @@ namespace tp {
[[nodiscard]] alnf getFloat(const String& id) const; [[nodiscard]] alnf getFloat(const String& id) const;
[[nodiscard]] bool getBool(const String& id) const; [[nodiscard]] bool getBool(const String& id) const;
[[nodiscard]] const String& getString(const String& id) const; [[nodiscard]] const String& getString(const String& id) const;
[[nodiscard]] const FileLocation& getFile(const String& id) const; [[nodiscard]] const LocalConnectionLocation& getFile(const String& id) const;
const CommandLine& operator=(const CommandLine&) = delete; const CommandLine& operator=(const CommandLine&) = delete;

View file

@ -3,22 +3,18 @@ cmake_minimum_required(VERSION 3.2)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
project(Storage) project(Connection)
set(ASIO_INCLUDE ./../Externals/asio/asio/include) set(BINDINGS_INCLUDE ./../Externals/asio/asio/include)
### ---------------------- Static Library --------------------- ### ### ---------------------- Static Library --------------------- ###
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp") file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
file(GLOB HEADERS "./public/*.hpp") file(GLOB HEADERS "./public/*.hpp")
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS}) add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
target_include_directories(${PROJECT_NAME} PUBLIC ./public/) target_include_directories(${PROJECT_NAME} PUBLIC ./public/)
target_include_directories(${PROJECT_NAME} PRIVATE ${ASIO_INCLUDE}) target_include_directories(${PROJECT_NAME} PRIVATE ${BINDINGS_INCLUDE})
target_link_libraries(${PROJECT_NAME} PUBLIC Strings) target_link_libraries(${PROJECT_NAME} PUBLIC Strings)
### -------------------------- Applications -------------------------- ###
add_subdirectory(applications)
### -------------------------- Tests -------------------------- ### ### -------------------------- Tests -------------------------- ###
enable_testing() enable_testing()
file(GLOB TEST_SOURCES "./tests/*.cpp") file(GLOB TEST_SOURCES "./tests/*.cpp")

View file

@ -0,0 +1,9 @@
#include "ConnectionCommon.hpp"
static tp::ModuleManifest* sModuleDependencies[] = {
&tp::gModuleStrings,
nullptr
};
tp::ModuleManifest tp::gModuleConnection = ModuleManifest("Storage", nullptr, nullptr, sModuleDependencies);

View file

@ -1,13 +1,12 @@
#include "LocalStorage.hpp" #include "LocalConnection.hpp"
#include "SystemAPI.hpp" #include "bindings/Disk.hpp"
#include <cstdio> #include <cstdio>
using namespace tp; using namespace tp;
bool LocalConnectionLocation::exists() const {
bool FileLocation::exists() const {
FILE* file = fopen(mLocation.read(), "r"); FILE* file = fopen(mLocation.read(), "r");
if (file) { if (file) {
// File exists, close it and return 1 // File exists, close it and return 1
@ -17,18 +16,18 @@ bool FileLocation::exists() const {
return false; return false;
} }
bool File::connect(const FileLocation& location, const FileConnectionType& connectionInfo) { bool LocalConnection::connect(const LocalConnectionLocation& location, const LocalConnectionType& connectionInfo) {
DEBUG_ASSERT(!mStatus.isOpened()); DEBUG_ASSERT(!mStatus.isOpened());
if (mStatus.isOpened()) return false; if (mStatus.isOpened()) return false;
auto handle = new FileSystemHandle(); auto handle = new LocalConnectionContext();
switch (connectionInfo.getType()) { switch (connectionInfo.getType()) {
case FileConnectionType::READ: case LocalConnectionType::READ:
handle->open(location.getLocation().read(), false); handle->open(location.getLocation().read(), false);
break; break;
case FileConnectionType::WRITE: case LocalConnectionType::WRITE:
handle->open(location.getLocation().read(), true); handle->open(location.getLocation().read(), true);
break; break;
@ -37,33 +36,33 @@ bool File::connect(const FileLocation& location, const FileConnectionType& conne
}; };
if (!handle->isOpen()) { if (!handle->isOpen()) {
mStatus.setStatus(FileConnectionStatus::DENIED); mStatus.setStatus(LocalConnectionStatus::DENIED);
delete handle; delete handle;
return false; return false;
} }
mStatus.setStatus(FileConnectionStatus::OPENED); mStatus.setStatus(LocalConnectionStatus::OPENED);
mHandle = handle; mHandle = handle;
mConnectionType = connectionInfo; mConnectionType = connectionInfo;
return true; return true;
} }
bool File::disconnect() { bool LocalConnection::disconnect() {
DEBUG_ASSERT(mStatus.isOpened()); DEBUG_ASSERT(mStatus.isOpened());
if (!mStatus.isOpened() || !mHandle) return false; if (!mStatus.isOpened() || !mHandle) return false;
mHandle->close(); mHandle->close();
delete mHandle; delete mHandle;
mStatus.setStatus(FileConnectionStatus::CLOSED); mStatus.setStatus(LocalConnectionStatus::CLOSED);
return true; return true;
} }
bool File::setPointer(BytePointer pointer) { bool LocalConnection::setPointer(BytePointer pointer) {
DEBUG_ASSERT(mStatus.isOpened()); DEBUG_ASSERT(mStatus.isOpened());
if (!mStatus.isOpened()) return false; if (!mStatus.isOpened()) return false;
return true; return true;
} }
bool File::readBytes(Byte* bytes, SizeBytes size) { bool LocalConnection::readBytes(Byte* bytes, SizeBytes size) {
DEBUG_ASSERT(mStatus.isOpened() && mConnectionType.isWrite()); DEBUG_ASSERT(mStatus.isOpened() && mConnectionType.isWrite());
if (!mStatus.isOpened() || !mConnectionType.isWrite()) return false; if (!mStatus.isOpened() || !mConnectionType.isWrite()) return false;
@ -73,7 +72,7 @@ bool File::readBytes(Byte* bytes, SizeBytes size) {
return true; return true;
} }
bool File::writeBytes(const Byte* bytes, SizeBytes size) { bool LocalConnection::writeBytes(const Byte* bytes, SizeBytes size) {
DEBUG_ASSERT(mStatus.isOpened() && mConnectionType.isRead()); DEBUG_ASSERT(mStatus.isOpened() && mConnectionType.isRead());
if (!mStatus.isOpened() || !mConnectionType.isRead()) return false; if (!mStatus.isOpened() || !mConnectionType.isRead()) return false;
@ -83,7 +82,7 @@ bool File::writeBytes(const Byte* bytes, SizeBytes size) {
return true; return true;
} }
File::SizeBytes File::size() { LocalConnection::SizeBytes LocalConnection::size() {
DEBUG_ASSERT(mStatus.isOpened()); DEBUG_ASSERT(mStatus.isOpened());
if (!mStatus.isOpened() || !mHandle) return 0; if (!mStatus.isOpened() || !mHandle) return 0;
return mHandle->size(); return mHandle->size();

View file

@ -0,0 +1,2 @@
#include "RemoteConnection.hpp"

View file

@ -1,10 +1,10 @@
#include "SystemAPI.hpp" #include "Disk.hpp"
#include <fstream> #include <fstream>
using namespace tp; using namespace tp;
ualni tp::FileSystemHandle::size() { ualni tp::LocalConnectionContext::size() {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
ualni out = 0; ualni out = 0;
strm->seekg(0, std::ios::beg); strm->seekg(0, std::ios::beg);
@ -14,41 +14,41 @@ ualni tp::FileSystemHandle::size() {
return out; return out;
} }
FileSystemHandle::FileSystemHandle() { LocalConnectionContext::LocalConnectionContext() {
stream = new std::fstream(); stream = new std::fstream();
} }
FileSystemHandle::~FileSystemHandle() { LocalConnectionContext::~LocalConnectionContext() {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
delete strm; delete strm;
} }
bool FileSystemHandle::isOpen() { bool LocalConnectionContext::isOpen() {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
return strm->is_open(); return strm->is_open();
} }
void FileSystemHandle::close() { void LocalConnectionContext::close() {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
strm->close(); strm->close();
} }
void FileSystemHandle::seekp(ualni in) { void LocalConnectionContext::seekp(ualni in) {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
strm->seekp(in); strm->seekp(in);
} }
void FileSystemHandle::read(int1* in, ualni size) { void LocalConnectionContext::read(int1* in, ualni size) {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
strm->read(in, size); strm->read(in, size);
} }
void FileSystemHandle::write(const int1* in, ualni size) { void LocalConnectionContext::write(const int1* in, ualni size) {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
strm->write(in, size); strm->write(in, size);
} }
void FileSystemHandle::open(const char* path, bool read) { void LocalConnectionContext::open(const char* path, bool read) {
auto strm = (std::fstream*) stream; auto strm = (std::fstream*) stream;
if (read) if (read)
strm->open(path, std::ios::in | std::ios::binary | std::ios::app); strm->open(path, std::ios::in | std::ios::binary | std::ios::app);

View file

@ -0,0 +1,17 @@
#include "Common.hpp"
namespace tp {
class LocalConnectionContext {
void* stream;
public:
LocalConnectionContext();
~LocalConnectionContext();
void open(const char*, bool);
bool isOpen();
void close();
void seekp(ualni);
void read(int1*, ualni);
void write(const int1*, ualni);
ualni size();
};
}

View file

@ -1,4 +1,4 @@
#include "SystemAPI.hpp" #include "Network.hpp"
#include "asio.hpp" #include "asio.hpp"

View file

@ -3,21 +3,6 @@
#include "Common.hpp" #include "Common.hpp"
namespace tp { namespace tp {
class FileSystemHandle {
void* stream;
public:
FileSystemHandle();
~FileSystemHandle();
void open(const char*, bool);
bool isOpen();
void close();
void seekp(ualni);
void read(int1*, ualni);
void write(const int1*, ualni);
ualni size();
};
class ServerContext; class ServerContext;
class ClientContext; class ClientContext;

View file

@ -0,0 +1,7 @@
#pragma once
#include "Strings.hpp"
namespace tp {
extern ModuleManifest gModuleConnection;
};

View file

@ -1,22 +1,22 @@
#pragma once #pragma once
#include "Storage.hpp" #include "ConnectionCommon.hpp"
namespace tp { namespace tp {
class FileSystemHandle; class LocalConnectionContext;
class FileLocation { class LocalConnectionLocation {
String mLocation; String mLocation;
public: public:
FileLocation() : mLocation("tmp") {}; LocalConnectionLocation() : mLocation("tmp") {};
explicit FileLocation(const String& location) : mLocation(location) {} explicit LocalConnectionLocation(const String& location) : mLocation(location) {}
void setLocation(const String& location) { mLocation = location; } void setLocation(const String& location) { mLocation = location; }
[[nodiscard]] const String& getLocation() const { return mLocation; } [[nodiscard]] const String& getLocation() const { return mLocation; }
[[nodiscard]] bool exists() const; [[nodiscard]] bool exists() const;
}; };
class FileConnectionType { class LocalConnectionType {
public: public:
enum HandleType { enum HandleType {
READ, READ,
@ -28,15 +28,15 @@ namespace tp {
HandleType mHandleType; HandleType mHandleType;
public: public:
FileConnectionType() : mHandleType(NONE) {} LocalConnectionType() : mHandleType(NONE) {}
explicit FileConnectionType(bool read) : mHandleType((HandleType) read) {} explicit LocalConnectionType(bool read) : mHandleType((HandleType) read) {}
explicit FileConnectionType(HandleType handleType) : mHandleType(handleType) {} explicit LocalConnectionType(HandleType handleType) : mHandleType(handleType) {}
[[nodiscard]] HandleType getType() const { return mHandleType; } [[nodiscard]] HandleType getType() const { return mHandleType; }
[[nodiscard]] bool isRead() const { return mHandleType == READ; } [[nodiscard]] bool isRead() const { return mHandleType == READ; }
[[nodiscard]] bool isWrite() const { return mHandleType == WRITE; } [[nodiscard]] bool isWrite() const { return mHandleType == WRITE; }
}; };
class FileConnectionStatus { class LocalConnectionStatus {
public: public:
enum Status { enum Status {
NONE, NONE,
@ -50,43 +50,43 @@ namespace tp {
Status mStatus = NONE; Status mStatus = NONE;
public: public:
FileConnectionStatus() = default; LocalConnectionStatus() = default;
[[nodiscard]] Status getStatus() const { return mStatus; } [[nodiscard]] Status getStatus() const { return mStatus; }
void setStatus(Status status) { mStatus = status; } void setStatus(Status status) { mStatus = status; }
[[nodiscard]] bool isOpened() const { return mStatus == OPENED; } [[nodiscard]] bool isOpened() const { return mStatus == OPENED; }
}; };
class File { class LocalConnection {
typedef ualni SizeBytes; typedef ualni SizeBytes;
typedef ualni BytePointer; typedef ualni BytePointer;
typedef int1 Byte; typedef int1 Byte;
private: private:
FileSystemHandle* mHandle = nullptr; LocalConnectionContext* mHandle = nullptr;
FileLocation mLocation; LocalConnectionLocation mLocation;
FileConnectionType mConnectionType; LocalConnectionType mConnectionType;
FileConnectionStatus mStatus; LocalConnectionStatus mStatus;
BytePointer mPointer = 0; BytePointer mPointer = 0;
public: public:
File() { LocalConnection() {
MODULE_SANITY_CHECK(gModuleStorage) MODULE_SANITY_CHECK(gModuleConnection)
}; };
virtual ~File() { virtual ~LocalConnection() {
if (mStatus.isOpened()) File::disconnect(); if (mStatus.isOpened()) LocalConnection::disconnect();
} }
public: public:
virtual bool connect(const FileLocation& location, const FileConnectionType& connectionInfo); virtual bool connect(const LocalConnectionLocation& location, const LocalConnectionType& connectionInfo);
virtual bool disconnect(); virtual bool disconnect();
public: public:
virtual const FileConnectionStatus& getConnectionStatus() { return mStatus; } virtual const LocalConnectionStatus& getConnectionStatus() { return mStatus; }
virtual const FileConnectionType& getConnectionType() { return mConnectionType; } virtual const LocalConnectionType& getConnectionType() { return mConnectionType; }
virtual const FileLocation& getLocation() { return mLocation; } virtual const LocalConnectionLocation& getLocation() { return mLocation; }
public: public:
virtual bool setPointer(BytePointer pointer); virtual bool setPointer(BytePointer pointer);

View file

@ -1,6 +1,6 @@
#include "LocalConnection.hpp"
#include "Testing.hpp" #include "Testing.hpp"
#include "LocalStorage.hpp"
using namespace tp; using namespace tp;
@ -10,15 +10,15 @@ TEST_DEF_STATIC(Simple) {
int1 dataRead[6]{}; int1 dataRead[6]{};
{ {
File file; LocalConnection file;
file.connect(FileLocation(String("tmp2.txt")), FileConnectionType(false)); file.connect(LocalConnectionLocation(String("tmp2.txt")), LocalConnectionType(false));
file.writeBytes(data, 6); file.writeBytes(data, 6);
file.disconnect(); file.disconnect();
} }
{ {
File file; LocalConnection file;
file.connect(FileLocation(String("tmp2.txt")), FileConnectionType(true)); file.connect(LocalConnectionLocation(String("tmp2.txt")), LocalConnectionType(true));
file.readBytes(dataRead, 6); file.readBytes(dataRead, 6);
file.disconnect(); file.disconnect();
} }
@ -28,6 +28,6 @@ TEST_DEF_STATIC(Simple) {
} }
} }
TEST_DEF(LocalStorage) { TEST_DEF(LocalConnection) {
testSimple(); testSimple();
} }

View file

@ -0,0 +1,19 @@
#include "ConnectionCommon.hpp"
#include "Testing.hpp"
void testLocalConnection();
int main() {
tp::ModuleManifest* deps[] = { &tp::gModuleConnection, nullptr };
tp::ModuleManifest testModule("ConnectionTest", nullptr, nullptr, deps);
if (!testModule.initialize()) {
return 1;
}
testLocalConnection();
testModule.deinitialize();
}

View file

@ -1,13 +0,0 @@
cmake_minimum_required(VERSION 3.2)
project(Applications)
file(GLOB SOURCES_CLIENT ./Client.cpp ./SystemAPI.cpp)
file(GLOB SOURCES_SERVER ./Server.cpp ./SystemAPI.cpp)
add_executable(Client ${SOURCES_CLIENT})
target_link_libraries(Client Storage CommandLine)
add_executable(Server ${SOURCES_SERVER})
target_link_libraries(Server Storage CommandLine)

View file

@ -1,64 +0,0 @@
#include "SystemAPI.hpp"
#include "Strings.hpp"
#include <pthread.h>
using namespace tp;
class CharClient {
typedef void* (*ThreadFunction)(void *);
Client client;
pthread_mutex_t mutex;
public:
CharClient(int port, const char* ip) {
pthread_mutex_unlock(&mutex);
client.connect(ip, port);
}
void start() {
// Create a new thread to handle the client
pthread_t threadId;
if (pthread_create(&threadId, nullptr, (ThreadFunction) readServerBroadcast, this)) {
printf("Failed to create thread for client\n");
return;
}
// Detach the thread so it can run independently
pthread_detach(threadId);
while (true) {
const auto length = 1024;
static char message[length];
printf(" >> ");
fgets(message, length, stdin);
if (String::Logic::isEqualLogic(message, "exit")) return;
pthread_mutex_lock(&mutex);
client.write(message);
pthread_mutex_unlock(&mutex);
}
}
static void* readServerBroadcast(CharClient* self) {
while (true) {
auto message = self->client.read();
pthread_mutex_lock(&self->mutex);
printf("Broadcast : %s \n", message);
delete[] message;
pthread_mutex_unlock(&self->mutex);
}
return nullptr;
}
};
int main() {
CharClient client(5555, "127.0.0.1");
client.start();
return 0;
}

View file

@ -1,92 +0,0 @@
#include "SystemAPI.hpp"
#include "Strings.hpp"
#include "List.hpp"
#include <pthread.h>
using namespace tp;
class ChatServer {
struct SharedData {
List<Server::Socket> clients;
pthread_mutex_t mutex;
};
SharedData mSharedData;
Server server;
public:
explicit ChatServer(int port) {
server.start(port);
}
~ChatServer() {
DEBUG_ASSERT(false)
}
bool start() {
while (true) {
auto clientSocket = server.accept();
// add client
pthread_mutex_lock(&mSharedData.mutex);
mSharedData.clients.pushBack(clientSocket);
pthread_mutex_unlock(&mSharedData.mutex);
// Create a new thread to handle the client
pthread_t threadId;
if (pthread_create(&threadId, nullptr, (void* (*)(void*)) handleClient, this)) {
printf("Failed to create thread for client\n");
return false;
}
// Detach the thread so it can run independently
pthread_detach(threadId);
}
return true;
}
static void* handleClient(ChatServer* self) {
// read shared data - current client id
pthread_mutex_lock(&self->mSharedData.mutex);
auto clientSocket = self->mSharedData.clients.last();
pthread_mutex_unlock(&self->mSharedData.mutex);
MESSAGE:
// wait for a message request
auto message = Server::read(clientSocket);
// Broadcast to all clients
for (auto client : self->mSharedData.clients) {
Server::write(client.data(), message);
}
auto exit = memCompare(message, "exit", 5) == 0;
delete[] message;
if (exit) {
// TODO : disconnect
for (auto iter : self->mSharedData.clients) {
if (clientSocket == iter.data()) {
self->mSharedData.clients.removeNode(iter.node());
break;
}
}
}
pthread_mutex_unlock(&self->mSharedData.mutex);
if (exit) return nullptr;
goto MESSAGE;
}
};
int main() {
ChatServer server(5555);
server.start();
return 0;
}

View file

@ -1,9 +0,0 @@
#include "Storage.hpp"
static tp::ModuleManifest* sModuleDependencies[] = {
&tp::gModuleStrings,
nullptr
};
tp::ModuleManifest tp::gModuleStorage = ModuleManifest("Storage", nullptr, nullptr, sModuleDependencies);

View file

@ -1,17 +0,0 @@
#pragma once
#include "SystemAPI.hpp"
namespace tp {
/*
class Client : public Storage {
// same as local storage file but transfers all commands to server
};
class Server {
// opens local storage and transfers all client command to it
// manages multiple clients
};
*/
}

View file

@ -1,53 +0,0 @@
#pragma once
#include "Strings.hpp"
namespace tp {
extern ModuleManifest gModuleStorage;
class StorageLocation {
public:
StorageLocation() = default;
virtual ~StorageLocation() = default;
};
class ConnectionType {
public:
ConnectionType() = default;
virtual ~ConnectionType() = default;
};
class ConnectionStatus {
public:
ConnectionStatus() = default;
virtual ~ConnectionStatus() = default;
};
class Storage {
typedef ualni SizeBytes;
typedef ualni BytePointer;
typedef int1 Byte;
private:
StorageLocation mLocation;
ConnectionType mConnectionType;
ConnectionStatus mStatus;
public:
Storage() = default;
virtual ~Storage() = default;
public:
virtual bool connect(const StorageLocation& location, const ConnectionType& connectionInfo) = 0;
virtual bool disconnect() = 0;
virtual const ConnectionStatus& getConnectionStatus() = 0;
public:
virtual bool readBytes(BytePointer pointer, Byte* bytes, SizeBytes size) = 0;
virtual bool writeBytes(BytePointer pointer, const Byte* bytes, SizeBytes size) = 0;
public:
virtual SizeBytes size() = 0;
};
};

View file

@ -1,19 +0,0 @@
#include "Testing.hpp"
#include "Storage.hpp"
void testLocalStorage();
int main() {
tp::ModuleManifest* deps[] = { &tp::gModuleStorage, nullptr };
tp::ModuleManifest testModule("StorageTest", nullptr, nullptr, deps);
if (!testModule.initialize()) {
return 1;
}
testLocalStorage();
testModule.deinitialize();
}