2 Copyright (c) 2018-2019 Nokia.
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
17 #include "private/redis/hiredisepolladapter.hpp"
18 #include <sys/epoll.h>
19 #include "private/engine.hpp"
20 #include "private/redis/hiredissystem.hpp"
22 using namespace shareddatalayer;
23 using namespace shareddatalayer::redis;
28 void addReadWrap(void* data)
30 auto instance(static_cast<HiredisEpollAdapter*>(data));
34 void delReadWrap(void* data)
36 auto instance(static_cast<HiredisEpollAdapter*>(data));
40 void addWriteWrap(void* data)
42 auto instance(static_cast<HiredisEpollAdapter*>(data));
46 void delWriteWrap(void* data)
48 auto instance(static_cast<HiredisEpollAdapter*>(data));
52 void cleanUpWrap(void* data)
54 auto instance(static_cast<HiredisEpollAdapter*>(data));
59 HiredisEpollAdapter::HiredisEpollAdapter(Engine& engine):
60 HiredisEpollAdapter(engine, HiredisSystem::getHiredisSystem())
64 HiredisEpollAdapter::HiredisEpollAdapter(Engine& engine, HiredisSystem& hiredisSystem):
66 hiredisSystem(hiredisSystem),
75 HiredisEpollAdapter::~HiredisEpollAdapter()
77 if (ac && isMonitoring)
81 void HiredisEpollAdapter::attach(redisAsyncContext* ac)
87 this->ac->ev.data = this;
88 this->ac->ev.addRead = addReadWrap;
89 this->ac->ev.delRead = delReadWrap;
90 this->ac->ev.addWrite = addWriteWrap;
91 this->ac->ev.delWrite = delWriteWrap;
92 this->ac->ev.cleanup = cleanUpWrap;
93 engine.addMonitoredFD(ac->c.fd,
95 std::bind(&HiredisEpollAdapter::eventHandler,
97 std::placeholders::_1));
101 void HiredisEpollAdapter::eventHandler(unsigned int events)
103 if (events & Engine::EVENT_IN)
105 hiredisSystem.redisAsyncHandleRead(ac);
106 if (events & Engine::EVENT_OUT)
108 hiredisSystem.redisAsyncHandleWrite(ac);
111 void HiredisEpollAdapter::addRead()
116 eventState |= Engine::EVENT_IN;
117 engine.modifyMonitoredFD(ac->c.fd, eventState);
120 void HiredisEpollAdapter::delRead()
123 eventState &= ~Engine::EVENT_IN;
124 engine.modifyMonitoredFD(ac->c.fd, eventState);
127 void HiredisEpollAdapter::addWrite()
132 eventState |= Engine::EVENT_OUT;
133 engine.modifyMonitoredFD(ac->c.fd, eventState);
136 void HiredisEpollAdapter::delWrite()
139 eventState &= ~Engine::EVENT_OUT;
140 engine.modifyMonitoredFD(ac->c.fd, eventState);
143 void HiredisEpollAdapter::cleanUp()
148 engine.deleteMonitoredFD(ac->c.fd);
149 isMonitoring = false;