Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

103 lines
3.1 KiB
C
Raw Normal View History

2020-11-11 22:57:33 +02:00
#include "valkeymodule.h"
2020-11-11 22:57:33 +02:00
static void timer_callback(ValkeyModuleCtx *ctx, void *data)
2020-11-11 22:57:33 +02:00
{
ValkeyModuleString *keyname = data;
ValkeyModuleCallReply *reply;
2020-11-11 22:57:33 +02:00
reply = ValkeyModule_Call(ctx, "INCR", "s", keyname);
2020-11-11 22:57:33 +02:00
if (reply != NULL)
ValkeyModule_FreeCallReply(reply);
ValkeyModule_FreeString(ctx, keyname);
2020-11-11 22:57:33 +02:00
}
int test_createtimer(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int argc)
2020-11-11 22:57:33 +02:00
{
if (argc != 3) {
ValkeyModule_WrongArity(ctx);
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
long long period;
if (ValkeyModule_StringToLongLong(argv[1], &period) == VALKEYMODULE_ERR) {
ValkeyModule_ReplyWithError(ctx, "Invalid time specified.");
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
ValkeyModuleString *keyname = argv[2];
ValkeyModule_RetainString(ctx, keyname);
2020-11-11 22:57:33 +02:00
ValkeyModuleTimerID id = ValkeyModule_CreateTimer(ctx, period, timer_callback, keyname);
ValkeyModule_ReplyWithLongLong(ctx, id);
2020-11-11 22:57:33 +02:00
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
int test_gettimer(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int argc)
2020-11-11 22:57:33 +02:00
{
if (argc != 2) {
ValkeyModule_WrongArity(ctx);
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
long long id;
if (ValkeyModule_StringToLongLong(argv[1], &id) == VALKEYMODULE_ERR) {
ValkeyModule_ReplyWithError(ctx, "Invalid id specified.");
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
uint64_t remaining;
ValkeyModuleString *keyname;
if (ValkeyModule_GetTimerInfo(ctx, id, &remaining, (void **)&keyname) == VALKEYMODULE_ERR) {
ValkeyModule_ReplyWithNull(ctx);
2020-11-11 22:57:33 +02:00
} else {
ValkeyModule_ReplyWithArray(ctx, 2);
ValkeyModule_ReplyWithString(ctx, keyname);
ValkeyModule_ReplyWithLongLong(ctx, remaining);
2020-11-11 22:57:33 +02:00
}
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
int test_stoptimer(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int argc)
2020-11-11 22:57:33 +02:00
{
if (argc != 2) {
ValkeyModule_WrongArity(ctx);
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
long long id;
if (ValkeyModule_StringToLongLong(argv[1], &id) == VALKEYMODULE_ERR) {
ValkeyModule_ReplyWithError(ctx, "Invalid id specified.");
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
int ret = 0;
ValkeyModuleString *keyname;
if (ValkeyModule_StopTimer(ctx, id, (void **) &keyname) == VALKEYMODULE_OK) {
ValkeyModule_FreeString(ctx, keyname);
2020-11-11 22:57:33 +02:00
ret = 1;
}
ValkeyModule_ReplyWithLongLong(ctx, ret);
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}
int ValkeyModule_OnLoad(ValkeyModuleCtx *ctx, ValkeyModuleString **argv, int argc) {
VALKEYMODULE_NOT_USED(argv);
VALKEYMODULE_NOT_USED(argc);
if (ValkeyModule_Init(ctx,"timer",1,VALKEYMODULE_APIVER_1)== VALKEYMODULE_ERR)
return VALKEYMODULE_ERR;
2020-11-11 22:57:33 +02:00
if (ValkeyModule_CreateCommand(ctx,"test.createtimer", test_createtimer,"",0,0,0) == VALKEYMODULE_ERR)
return VALKEYMODULE_ERR;
if (ValkeyModule_CreateCommand(ctx,"test.gettimer", test_gettimer,"",0,0,0) == VALKEYMODULE_ERR)
return VALKEYMODULE_ERR;
if (ValkeyModule_CreateCommand(ctx,"test.stoptimer", test_stoptimer,"",0,0,0) == VALKEYMODULE_ERR)
return VALKEYMODULE_ERR;
2020-11-11 22:57:33 +02:00
return VALKEYMODULE_OK;
2020-11-11 22:57:33 +02:00
}