aboutsummaryrefslogtreecommitdiff
path: root/examples/redis-unstable/tests/modules/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/redis-unstable/tests/modules/timer.c')
-rw-r--r--examples/redis-unstable/tests/modules/timer.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/examples/redis-unstable/tests/modules/timer.c b/examples/redis-unstable/tests/modules/timer.c
new file mode 100644
index 0000000..c9bd636
--- /dev/null
+++ b/examples/redis-unstable/tests/modules/timer.c
@@ -0,0 +1,102 @@
1
2#include "redismodule.h"
3
4static void timer_callback(RedisModuleCtx *ctx, void *data)
5{
6 RedisModuleString *keyname = data;
7 RedisModuleCallReply *reply;
8
9 reply = RedisModule_Call(ctx, "INCR", "s", keyname);
10 if (reply != NULL)
11 RedisModule_FreeCallReply(reply);
12 RedisModule_FreeString(ctx, keyname);
13}
14
15int test_createtimer(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
16{
17 if (argc != 3) {
18 RedisModule_WrongArity(ctx);
19 return REDISMODULE_OK;
20 }
21
22 long long period;
23 if (RedisModule_StringToLongLong(argv[1], &period) == REDISMODULE_ERR) {
24 RedisModule_ReplyWithError(ctx, "Invalid time specified.");
25 return REDISMODULE_OK;
26 }
27
28 RedisModuleString *keyname = argv[2];
29 RedisModule_RetainString(ctx, keyname);
30
31 RedisModuleTimerID id = RedisModule_CreateTimer(ctx, period, timer_callback, keyname);
32 RedisModule_ReplyWithLongLong(ctx, id);
33
34 return REDISMODULE_OK;
35}
36
37int test_gettimer(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
38{
39 if (argc != 2) {
40 RedisModule_WrongArity(ctx);
41 return REDISMODULE_OK;
42 }
43
44 long long id;
45 if (RedisModule_StringToLongLong(argv[1], &id) == REDISMODULE_ERR) {
46 RedisModule_ReplyWithError(ctx, "Invalid id specified.");
47 return REDISMODULE_OK;
48 }
49
50 uint64_t remaining;
51 RedisModuleString *keyname;
52 if (RedisModule_GetTimerInfo(ctx, id, &remaining, (void **)&keyname) == REDISMODULE_ERR) {
53 RedisModule_ReplyWithNull(ctx);
54 } else {
55 RedisModule_ReplyWithArray(ctx, 2);
56 RedisModule_ReplyWithString(ctx, keyname);
57 RedisModule_ReplyWithLongLong(ctx, remaining);
58 }
59
60 return REDISMODULE_OK;
61}
62
63int test_stoptimer(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
64{
65 if (argc != 2) {
66 RedisModule_WrongArity(ctx);
67 return REDISMODULE_OK;
68 }
69
70 long long id;
71 if (RedisModule_StringToLongLong(argv[1], &id) == REDISMODULE_ERR) {
72 RedisModule_ReplyWithError(ctx, "Invalid id specified.");
73 return REDISMODULE_OK;
74 }
75
76 int ret = 0;
77 RedisModuleString *keyname;
78 if (RedisModule_StopTimer(ctx, id, (void **) &keyname) == REDISMODULE_OK) {
79 RedisModule_FreeString(ctx, keyname);
80 ret = 1;
81 }
82
83 RedisModule_ReplyWithLongLong(ctx, ret);
84 return REDISMODULE_OK;
85}
86
87
88int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) {
89 REDISMODULE_NOT_USED(argv);
90 REDISMODULE_NOT_USED(argc);
91 if (RedisModule_Init(ctx,"timer",1,REDISMODULE_APIVER_1)== REDISMODULE_ERR)
92 return REDISMODULE_ERR;
93
94 if (RedisModule_CreateCommand(ctx,"test.createtimer", test_createtimer,"",0,0,0) == REDISMODULE_ERR)
95 return REDISMODULE_ERR;
96 if (RedisModule_CreateCommand(ctx,"test.gettimer", test_gettimer,"",0,0,0) == REDISMODULE_ERR)
97 return REDISMODULE_ERR;
98 if (RedisModule_CreateCommand(ctx,"test.stoptimer", test_stoptimer,"",0,0,0) == REDISMODULE_ERR)
99 return REDISMODULE_ERR;
100
101 return REDISMODULE_OK;
102}