Adbase
Adinf C++ base library V2
adbase::Mc

adbase Memcache 协议工具库(使用方法见该模块的描述信息) More...

Namespaces

 adbase::mc
 

Detailed Description

adbase Memcache 协议工具库(使用方法见该模块的描述信息)

使用方法
Note
请勿直接引用对应头文件,adbase::Mc 模块统一引用<adbase/Mc.hpp> 文件
Example
#include <adbase/Net.hpp>
#include <adbase/Mc.hpp>
#include <signal.h>
adbase::EventLoop* gEventLoop = nullptr;
// {{{ class McProcessor
class McProcessor {
public:
McProcessor() {}
~McProcessor() {}
uint16_t keylen,
adbase::Buffer *data) {
std::string keyData(static_cast<const char*>(key), static_cast<size_t>(keylen));
data->append(static_cast<const char*>(key), static_cast<size_t>(keylen));
LOG_INFO << "Mc GET key:" << keyData;
}
};
// }}}
// {{{ static void killSignal()
static void killSignal(const int sig) {
(void)sig;
if (gEventLoop != nullptr) {
gEventLoop->stop();
delete gEventLoop;
}
exit(0);
}
// }}}
// {{{ static void reloadConf()
static void reloadConf(const int sig) {
(void)sig;
}
// }}}
// {{{ static void registerSignal()
static void registerSignal() {
signal(SIGPIPE, SIG_IGN);
signal(SIGINT, killSignal);
signal(SIGKILL, killSignal);
signal(SIGQUIT, killSignal);
signal(SIGTERM, killSignal);
signal(SIGHUP, killSignal);
signal(SIGSEGV, killSignal);
signal(SIGUSR1, reloadConf);
}
// }}}
int main(void) {
registerSignal();
adbase::TimeZone tz(8*3600, "CST");
gEventLoop = new adbase::EventLoop();
McProcessor mcProcessor;
adbase::InetAddress mcAddr("0.0.0.0", 10012);
adbase::TcpServer mcServer(gEventLoop->getBase(), mcAddr, "test");
adbase::mc::Interface mcInterface;
mcInterface.setGetHandler(std::bind(&McProcessor::get, &mcProcessor, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3));
adbase::mc::Handler mcHandler(&mcInterface);
mcServer.setConnectionCallback(std::bind(&adbase::mc::Handler::onConnection, &mcHandler,
std::placeholders::_1));
mcServer.setCloseCallback(std::bind(&adbase::mc::Handler::onClose, &mcHandler, std::placeholders::_1));
mcServer.setMessageCallback(std::bind(&adbase::mc::Handler::onMessage, &mcHandler, std::placeholders::_1,
std::placeholders::_2, std::placeholders::_3));
mcServer.start(1);
gEventLoop->start();
return 0;
}