diff options
author | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2010-11-01 09:27:43 +0100 |
---|---|---|
committer | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2010-11-01 09:27:43 +0100 |
commit | 4e3bd7893d4e59ca23b629cc9084e9c61d5edf25 (patch) | |
tree | 8c864ce20d51c99cf46c04cdc8db5e024d338475 /async.h | |
parent | ae5a13f55753dc5dddc7d7a9a723c1559054359d (diff) |
Add support to lazily disconnect an asynchronous connection
Diffstat (limited to 'async.h')
-rw-r--r-- | async.h | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -46,6 +46,9 @@ typedef struct redisCallbackList { redisCallback *head, *tail; } redisCallbackList; +/* Disconnect callback prototype */ +typedef void (redisDisconnectCallback)(const struct redisAsyncContext*, int status); + /* Context for an async connection to Redis */ typedef struct redisAsyncContext { /* Hold the regular context, so it can be realloc'ed. */ @@ -57,15 +60,22 @@ typedef struct redisAsyncContext { void (*evDelRead)(void *privdata); void (*evAddWrite)(void *privdata); void (*evDelWrite)(void *privdata); + void (*evCleanup)(void *privdata); void *data; + /* Called when either the connection is terminated due to an error or per + * user request. The status is set accordingly (REDIS_OK, REDIS_ERR). */ + redisDisconnectCallback *onDisconnect; + /* Reply callbacks */ redisCallbackList replies; } redisAsyncContext; /* Functions that proxy to hiredis */ redisAsyncContext *redisAsyncConnect(const char *ip, int port); -int redisAsyncSetReplyObjectFunctions(redisAsyncContext *c, redisReplyObjectFunctions *fn); +int redisAsyncSetReplyObjectFunctions(redisAsyncContext *ac, redisReplyObjectFunctions *fn); +int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn); +void redisAsyncDisconnect(redisAsyncContext *ac); /* Handle read/write events */ void redisAsyncHandleRead(redisAsyncContext *ac); @@ -73,8 +83,8 @@ void redisAsyncHandleWrite(redisAsyncContext *ac); /* Command functions for an async context. Write the command to the * output buffer and register the provided callback. */ -int redisvAsyncCommand(redisAsyncContext *c, redisCallbackFn *fn, void *privdata, const char *format, va_list ap); -int redisAsyncCommand(redisAsyncContext *c, redisCallbackFn *fn, void *privdata, const char *format, ...); -int redisAsyncCommandArgv(redisAsyncContext *c, redisCallbackFn *fn, void *privdata, int argc, const char **argv, const size_t *argvlen); +int redisvAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, const char *format, va_list ap); +int redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, const char *format, ...); +int redisAsyncCommandArgv(redisAsyncContext *ac, redisCallbackFn *fn, void *privdata, int argc, const char **argv, const size_t *argvlen); #endif |