2019-03-22 11:02:50 +08:00

151 lines
4.5 KiB
C++
Executable File

#include "precompile.h"
#include <a8/stringlist.h>
#include <a8/csvreader.h>
#include "framework/cpp/utils.h"
#include "metamgr.h"
class MetaDataLoader
{
public:
std::list<metatable::Parameter> parameter_meta_list;
std::list<MetaData::Parameter> parameter_list;
std::list<metatable::Map> map_meta_list;
std::list<MetaData::Map> map_list;
std::list<metatable::SafeArea> safearea_meta_list;
std::list<MetaData::SafeArea> safearea_list;
std::list<metatable::Item> item_meta_list;
std::list<MetaData::Item> item_list;
std::list<metatable::Equip> equip_meta_list;
std::list<MetaData::Equip> equip_list;
std::list<metatable::Player> player_meta_list;
std::list<MetaData::Player> player_list;
std::list<metatable::MapThing> mapthing_meta_list;
std::list<MetaData::MapThing> mapthing_list;
std::map<std::string, MetaData::Parameter*> parameter_hash;
std::map<int, MetaData::Map*> gamemap_hash;
std::map<int, MetaData::SafeArea*> safearea_hash;
std::map<int, MetaData::Item*> item_hash;
std::map<int, MetaData::Equip*> equip_hash;
std::map<int, MetaData::Player*> player_hash;
std::map<int, MetaData::MapThing*> mapthing_hash;
void Load()
{
std::string res_path;
if (!f8::IsOnlineEnv()) {
res_path = a8::Format("/var/data/conf_test/game%d/gameserver/res/", {GAME_ID});
} else {
res_path = "../res/";
}
f8::ReadCsvMetaFile(res_path + "parameter@parameter.csv", parameter_meta_list);
f8::ReadCsvMetaFile(res_path + "map@map.csv", map_meta_list);
f8::ReadCsvMetaFile(res_path + "safearea@safearea.csv", safearea_meta_list);
f8::ReadCsvMetaFile(res_path + "item@item.csv", item_meta_list);
f8::ReadCsvMetaFile(res_path + "equip@equip.csv", equip_meta_list);
f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list);
f8::ReadCsvMetaFile(res_path + "player@player.csv", player_meta_list);
f8::ReadCsvMetaFile(res_path + "mapThing@mapThing.csv", mapthing_meta_list);
BindToMetaData();
}
private:
void BindToMetaData()
{
for (auto& meta : parameter_meta_list) {
MetaData::Parameter& item = a8::FastAppend(parameter_list);
item.i = &meta;
parameter_hash[item.i->param_name()] = &item;
}
for (auto& meta : map_meta_list) {
MetaData::Map& item = a8::FastAppend(map_list);
item.i = &meta;
gamemap_hash[item.i->map_id()] = &item;
}
for (auto& meta : safearea_meta_list) {
MetaData::SafeArea& item = a8::FastAppend(safearea_list);
item.i = &meta;
safearea_hash[item.i->id()] = &item;
}
for (auto& meta : item_meta_list) {
MetaData::Item& item = a8::FastAppend(item_list);
item.i = &meta;
item_hash[item.i->id()] = &item;
}
for (auto& meta : equip_meta_list) {
MetaData::Equip& item = a8::FastAppend(equip_list);
item.i = &meta;
equip_hash[item.i->id()] = &item;
}
for (auto& meta : player_meta_list) {
MetaData::Player& item = a8::FastAppend(player_list);
item.i = &meta;
player_hash[item.i->id()] = &item;
}
for (auto& meta : mapthing_meta_list) {
MetaData::MapThing& item = a8::FastAppend(mapthing_list);
item.i = &meta;
mapthing_hash[item.i->thing_id()] = &item;
}
}
};
void MetaMgr::Init()
{
loader_ = new MetaDataLoader();
loader_->Load();
}
void MetaMgr::UnInit()
{
delete loader_;
loader_ = nullptr;
}
void MetaMgr::Reload()
{
delete loader_;
loader_ = nullptr;
loader_ = new MetaDataLoader();
loader_->Load();
}
std::string MetaMgr::GetSysParam(const std::string& param_name)
{
auto itr = loader_->parameter_hash.find(param_name);
return itr != loader_->parameter_hash.end() ? itr->second->i->param_value() : "";
}
MetaData::Map* MetaMgr::GetMap(int map_id)
{
auto itr = loader_->gamemap_hash.find(map_id);
return itr != loader_->gamemap_hash.end() ? itr->second : nullptr;
}
MetaData::Player* MetaMgr::GetPlayer(int id)
{
auto itr = loader_->player_hash.find(id);
return itr != loader_->player_hash.end() ? itr->second : nullptr;
}
MetaData::Equip* MetaMgr::GetEquip(int id)
{
auto itr = loader_->equip_hash.find(id);
return itr != loader_->equip_hash.end() ? itr->second : nullptr;
}