Skip to content
Snippets Groups Projects
Commit b16c6ab6 authored by astri's avatar astri
Browse files

open close management

parent 562ad245
No related branches found
No related tags found
No related merge requests found
Subproject commit 2306b74326d9d781172e0ab65d031c36d30e872d
Subproject commit a3e3097ede58287c647a4691670115eb395e75a0
......@@ -15,7 +15,7 @@ namespace inaf::oasbo::Providers {
class RedisProvider : public BaseProvider{
protected:
redisContext *context;
redisContext *context = nullptr;
std::string ip;
int port;
std::string & key = *(&this->dest);
......@@ -43,6 +43,7 @@ public:
int close();
int open();
bool isOpen() override;
~RedisProvider();
};
......
#include <Redis_Provider.h>
#include <Redis_Provider.h>
using namespace inaf::oasbo::Providers;
RedisProvider::RedisProvider() {
......@@ -9,36 +9,21 @@ RedisProvider::RedisProvider(std::string ip, int port, std::string key) {
setIp(ip);
setPort(port);
setKey(key);
context = redisConnect(getIp().c_str(), getPort());
if (context == nullptr || context->err) {
}
int RedisProvider::write(PacketLib::BasePacket &packet) {
return write(packet,this->key);
}
int RedisProvider::write(PacketLib::BasePacket &packet, std::string key) {
if (context == nullptr || context->err){
if (context) {
std::cout << "Redis Provider Error: "<< context->errstr << std::endl;
} else {
std::cout << "Redis Provider Error: Can't allocate Redis context" << std::endl;
}
exit(EXIT_FAILURE);
}
}
int RedisProvider::write(PacketLib::BasePacket &packet) {
uint size = packet.getHeaderSize() + packet.getPayloadSize() + packet.getTailSize();
redisReply *r = (redisReply *) redisCommand(context, "LPUSH %s %b", this->key.c_str(), (char*) packet.getBinaryPointer(), size);
if (r == NULL) {
// Error executing Redis command
return -1;
}
// Check the type of the Redis reply
if (r->type == REDIS_REPLY_ERROR) {
// Error executing Redis command
std::cout << r->str << std::endl;
freeReplyObject(r);
return -1;
}
freeReplyObject(r);
return size;
}
int RedisProvider::write(PacketLib::BasePacket &packet, std::string key) {
uint size = packet.getHeaderSize() + packet.getPayloadSize() + packet.getTailSize();
redisReply *r = (redisReply *) redisCommand(context, "LPUSH %s %b", key.c_str(), (char*) packet.getBinaryPointer(), size);
if (r == NULL) {
......@@ -57,15 +42,32 @@ int RedisProvider::write(PacketLib::BasePacket &packet, std::string key) {
}
int RedisProvider::open() {
if (context != nullptr && !context->err)
close();
context = redisConnect(getIp().c_str(), getPort());
if (context == nullptr || context->err) {
if (context) {
std::cout << "Redis Provider Error: "<< context->errstr << std::endl;
} else {
std::cout << "Redis Provider Error: Can't allocate Redis context" << std::endl;
}
return -1;
}
return 1;
}
int RedisProvider::close() {
if (context != nullptr && !context->err ){
redisFree(this->context);
context = nullptr;
}
return 1;
}
bool RedisProvider::isOpen() {
return (context != nullptr && !context->err );
}
RedisProvider::~RedisProvider(){
if (context != nullptr && !context->err ){
redisFree(this->context);
}
close();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment