#include using namespace inaf::oasbo::Providers; RedisProvider::RedisProvider() { RedisProvider("127.0.0.1",6379,"DAQ_key"); } RedisProvider::RedisProvider(std::string ip, int port, std::string key) { setIp(ip); setPort(port); setKey(key); } 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; } return -1; } 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) { // 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::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(){ close(); }