1
0
Fork 0
mirror of https://github.com/KingDuckZ/dindexer.git synced 2025-07-03 14:14:11 +00:00

Allow sock connections to redis.

This commit is contained in:
King_DuckZ 2017-08-09 10:41:18 +01:00
parent 106b72bf0e
commit 59eff8ff56
2 changed files with 42 additions and 9 deletions

View file

@ -41,6 +41,7 @@ namespace dindb {
std::string address; std::string address;
uint16_t port; uint16_t port;
uint16_t database; uint16_t database;
bool sock_mode;
}; };
std::string read_script (const dincore::SearchPaths& parSearch, const char* parName) { std::string read_script (const dincore::SearchPaths& parSearch, const char* parName) {
@ -70,20 +71,31 @@ namespace YAML {
node["address"] = parSettings.address; node["address"] = parSettings.address;
node["port"] = parSettings.port; node["port"] = parSettings.port;
node["database"] = parSettings.database; node["database"] = parSettings.database;
node["sock_mode"] = parSettings.sock_mode;
return node; return node;
} }
static bool decode (const Node& parNode, dindb::RedisConnectionSettings& parSettings) { static bool decode (const Node& parNode, dindb::RedisConnectionSettings& parSettings) {
if (not parNode.IsMap() or parNode.size() != 2) { if (not parNode.IsMap() or parNode.size() < 2) {
return false; return false;
} }
if (parNode["sock_mode"])
parSettings.sock_mode = parNode["sock_mode"].as<bool>();
else
parSettings.sock_mode = false;
parSettings.address = parNode["address"].as<std::string>(); parSettings.address = parNode["address"].as<std::string>();
parSettings.port = parNode["port"].as<uint16_t>(); if (parNode["port"])
parSettings.port = parNode["port"].as<uint16_t>();
else
parSettings.port = 6379;
if (parNode["database"]) if (parNode["database"])
parSettings.database = parNode["database"].as<uint16_t>(); parSettings.database = parNode["database"].as<uint16_t>();
else else
parSettings.database = 0; parSettings.database = 0;
return true; return true;
} }
}; };
@ -100,6 +112,16 @@ namespace dindb {
this->connect(); this->connect();
} }
BackendRedis::BackendRedis(std::string&& parPath, uint16_t parDatabase, bool parConnect, dincore::SearchPaths&& parLuaPaths) :
m_redis(std::move(parPath)),
m_tag_if_in_set(),
m_lua_script_paths(std::move(parLuaPaths)),
m_database(parDatabase)
{
if (parConnect)
this->connect();
}
BackendRedis::~BackendRedis() noexcept { BackendRedis::~BackendRedis() noexcept {
} }
@ -299,13 +321,23 @@ extern "C" dindb::Backend* dindexer_create_backend (const YAML::Node* parConfig)
dincore::SearchPaths lua_paths(std::move(vec)); dincore::SearchPaths lua_paths(std::move(vec));
lua_paths.add_path(REDIS_SCRIPTS_PATH); lua_paths.add_path(REDIS_SCRIPTS_PATH);
return new dindb::BackendRedis( if (config.sock_mode) {
std::move(config.address), return new dindb::BackendRedis(
config.port, std::move(config.address),
config.database, config.database,
true, true,
std::move(lua_paths) std::move(lua_paths)
); );
}
else {
return new dindb::BackendRedis(
std::move(config.address),
config.port,
config.database,
true,
std::move(lua_paths)
);
}
} }
extern "C" void dindexer_destroy_backend (dindb::Backend* parDele) { extern "C" void dindexer_destroy_backend (dindb::Backend* parDele) {

View file

@ -30,6 +30,7 @@ namespace dindb {
public: public:
BackendRedis ( BackendRedis&& ) = default; BackendRedis ( BackendRedis&& ) = default;
BackendRedis ( std::string&& parAddress, uint16_t parPort, uint16_t parDatabase, bool parConnect, dincore::SearchPaths&& parLuaPaths ); BackendRedis ( std::string&& parAddress, uint16_t parPort, uint16_t parDatabase, bool parConnect, dincore::SearchPaths&& parLuaPaths );
BackendRedis ( std::string&& parPath, uint16_t parDatabase, bool parConnect, dincore::SearchPaths&& parLuaPaths );
virtual ~BackendRedis ( void ) noexcept; virtual ~BackendRedis ( void ) noexcept;
virtual void connect ( void ) override; virtual void connect ( void ) override;