X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=inline;f=include%2Fprivate%2Fredis%2Fhiredisclusterepolladapter.hpp;fp=include%2Fprivate%2Fredis%2Fhiredisclusterepolladapter.hpp;h=9b61e1865055d01d8781f7834c1baff06b0076b9;hb=ef2bf51d04aaf01fa0cabdcaf905b23423067662;hp=0000000000000000000000000000000000000000;hpb=edc9b96a441194b571e8d55ec1603b5be0ea52eb;p=ric-plt%2Fsdl.git diff --git a/include/private/redis/hiredisclusterepolladapter.hpp b/include/private/redis/hiredisclusterepolladapter.hpp new file mode 100644 index 0000000..9b61e18 --- /dev/null +++ b/include/private/redis/hiredisclusterepolladapter.hpp @@ -0,0 +1,103 @@ +/* + Copyright (c) 2018-2019 Nokia. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef SHAREDDATALAYER_REDIS_HIREDISCLUSTEREPOLLADAPTER_HPP_ +#define SHAREDDATALAYER_REDIS_HIREDISCLUSTEREPOLLADAPTER_HPP_ + +#include +#include + +extern "C" +{ + struct redisClusterAsyncContext; + struct redisAsyncContext; +} + +namespace shareddatalayer +{ + class Engine; + + namespace redis + { + class HiredisClusterSystem; + + class HiredisClusterEpollAdapter + { + public: + class Node; + + explicit HiredisClusterEpollAdapter(Engine& engine); + + HiredisClusterEpollAdapter(Engine& engine, HiredisClusterSystem& hiredisClusterSystem); + + virtual ~HiredisClusterEpollAdapter() = default; + + virtual void setup(redisClusterAsyncContext* acc); + + virtual void attach(redisAsyncContext* ac); + + virtual void detach(const redisAsyncContext* ac); + + HiredisClusterEpollAdapter(const HiredisClusterEpollAdapter&) = delete; + HiredisClusterEpollAdapter(HiredisClusterEpollAdapter&&) = delete; + HiredisClusterEpollAdapter& operator = (const HiredisClusterEpollAdapter&) = delete; + HiredisClusterEpollAdapter& operator = (HiredisClusterEpollAdapter&&) = delete; + + private: + Engine& engine; + HiredisClusterSystem& hiredisClusterSystem; + std::map> nodes; + }; + + class HiredisClusterEpollAdapter::Node + { + public: + Node(Engine& engine, + redisAsyncContext* ac, + HiredisClusterSystem& hiredisClusterSystem); + + ~Node(); + + void addRead(); + + void addWrite(); + + void delRead(); + + void delWrite(); + + void cleanup(); + + Node(const Node&) = delete; + Node(Node&&) = delete; + Node& operator = (const Node&) = delete; + Node& operator = (Node&&) = delete; + + private: + Engine& engine; + HiredisClusterSystem& hiredisClusterSystem; + redisAsyncContext* ac; + unsigned int eventState; + bool reading; + bool writing; + bool isMonitoring; + + void eventHandler(unsigned int events); + }; + } +} + +#endif