sea_transport_project/sea_transport/system/apparatus.cpp
2020-12-19 00:25:47 +07:00

95 lines
2.1 KiB
C++

#include "apparatus.h"
apparatus *apparatus::_instance = nullptr;
const QString apparatus::filename = "data.bin";
void apparatus::open_stream() {
this->_bin_file = new QFile(apparatus::filename);
this->_bin_file->open(QIODevice::ReadWrite);
stream.setDevice(_bin_file);
}
void apparatus::close_stream() {
stream.setDevice(nullptr);
this->_bin_file->close();
delete this->_bin_file;
this->_bin_file = nullptr;
}
apparatus::apparatus() {
}
apparatus::~apparatus() {
this->shutdown();
}
apparatus* apparatus::instance() {
if (apparatus::_instance == nullptr) {
throw std::runtime_error("System non initialized!");
}
return apparatus::_instance;
}
bool apparatus::isFirstRun() {
return QFile().exists("init");
}
void apparatus::generate_empty_data() {
this->open_stream();
this->writeGIDS();
this->serialize_data();
this->close_stream();
}
const auth_system& apparatus::get_auth_subsystem() {
return this->_auth_system;
}
const object_system& apparatus::get_object_subsystem() {
return this->_object_system;
}
void apparatus::init() {
apparatus::_instance = new apparatus();
apparatus::instance()->open_stream();
apparatus::instance()->loadGIDS();
apparatus::instance()->deserialize_data();
apparatus::instance()->close_stream();
}
void apparatus::shutdown() {
apparatus::instance()->open_stream();
apparatus::instance()->writeGIDS();
apparatus::instance()->serialize_data();
apparatus::instance()->close_stream();
}
void apparatus::writeGIDS() {
entity_id vgid = vessel_entity::GID();
entity_id sgid = storage_entity::GID();
this->stream << vgid << sgid;
}
void apparatus::loadGIDS() {
entity_id vgid, sgid;
this->stream >> vgid >> sgid;
vessel_entity::preloadGlobalId(vgid);
storage_entity::preloadGlobalId(sgid);
}
void apparatus::serialize_data() {
this->_auth_system.init(this->stream);
this->_object_system.init(this->stream);
}
void apparatus::deserialize_data() {
QFile("init").open(QIODevice::ReadWrite);
this->_auth_system.shutdown(this->stream);
this->_object_system.shutdown(this->stream);
}