struct Shared : SimpleSharedBase<> {
};
Shared& shared;
Handler(Global& global, Shared& shared) : shared(shared) {
}
StoreResult on_store(DeferredContext& context, StoreParams& params,
SubString& value, Command command, uint64 cas_id) {
switch(command) {
case cSET:
shared.map[params.key] = value;
break;
default:
send_error("Not supported");
return rtHANDLED;
}
return Memcached::srSTORED;
}
ResponseType on_get(DeferredContext& context,
const SubString& key, GetAdvParams* adv_params) {
const String* val = shared.map.find(key);
if (val != NULL)
send_value(key, *val);
return rtHANDLED;
}
};
int main(int argc, const char* argv[]) {
const ulong RD_TIMEOUT_MS = 5000;
const ulong WR_TIMEOUT_MS = 1000;
{
log_level_choices.
add(iter.value_str());
cmdline.addver("Test Memcached Server 1.0");
cmdline.addopt("-p, --port", "Server port number to use")
.default_value("11211")
.numeric()
cmdline.addopt("-l, --log", "Log file to use")
.default_value("server.log");
cmdline.addopt(
"-L, --loglevel", tmpstr.
set(
"Log level to use ${default}, one of:\n ").
join(log_level_choices,
','))
.default_value("info")
.addchoices(log_level_choices);
if (!cmdline.parse(args, argc, argv))
return 0;
}
try {
Server server;
server.set_logger(&logger);
server.set_timeout(RD_TIMEOUT_MS, WR_TIMEOUT_MS);
EVO_LOG_INFO(logger, tmpstr.
set() <<
"Startup: Listening on port " << port);
server.run(listener);
return 0;
}