async: support for determining monitor mode, if so, repush replies callback in expectation of another reply.
This commit is contained in:
parent
f8debbfdbe
commit
01cce89d9d
16
async.c
16
async.c
@ -372,6 +372,11 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
|
|||||||
__redisAsyncDisconnect(ac);
|
__redisAsyncDisconnect(ac);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If monitor mode, repush callback */
|
||||||
|
if(c->flags & REDIS_MONITORING) {
|
||||||
|
__redisPushCallback(&ac->replies,&cb);
|
||||||
|
}
|
||||||
|
|
||||||
/* When the connection is not being disconnected, simply stop
|
/* When the connection is not being disconnected, simply stop
|
||||||
* trying to get replies and wait for the next loop tick. */
|
* trying to get replies and wait for the next loop tick. */
|
||||||
@ -394,9 +399,10 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
|
|||||||
__redisAsyncDisconnect(ac);
|
__redisAsyncDisconnect(ac);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* No more regular callbacks and no errors, the context *must* be subscribed. */
|
/* No more regular callbacks and no errors, the context *must* be subscribed or monitoring. */
|
||||||
assert(c->flags & REDIS_SUBSCRIBED);
|
assert((c->flags & REDIS_SUBSCRIBED || c->flags & REDIS_MONITORING));
|
||||||
__redisGetSubscribeCallback(ac,reply,&cb);
|
if(c->flags & REDIS_SUBSCRIBED)
|
||||||
|
__redisGetSubscribeCallback(ac,reply,&cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cb.fn != NULL) {
|
if (cb.fn != NULL) {
|
||||||
@ -557,6 +563,10 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
|
|||||||
/* (P)UNSUBSCRIBE does not have its own response: every channel or
|
/* (P)UNSUBSCRIBE does not have its own response: every channel or
|
||||||
* pattern that is unsubscribed will receive a message. This means we
|
* pattern that is unsubscribed will receive a message. This means we
|
||||||
* should not append a callback function for this command. */
|
* should not append a callback function for this command. */
|
||||||
|
} else if(strncasecmp(cstr,"monitor\r\n",9) == 0) {
|
||||||
|
/* Set monitor flag and push callback */
|
||||||
|
c->flags |= REDIS_MONITORING;
|
||||||
|
__redisPushCallback(&ac->replies,&cb);
|
||||||
} else {
|
} else {
|
||||||
if (c->flags & REDIS_SUBSCRIBED)
|
if (c->flags & REDIS_SUBSCRIBED)
|
||||||
/* This will likely result in an error reply, but it needs to be
|
/* This will likely result in an error reply, but it needs to be
|
||||||
|
@ -76,6 +76,9 @@
|
|||||||
/* Flag that is set when the async context has one or more subscriptions. */
|
/* Flag that is set when the async context has one or more subscriptions. */
|
||||||
#define REDIS_SUBSCRIBED 0x20
|
#define REDIS_SUBSCRIBED 0x20
|
||||||
|
|
||||||
|
/* Flag that is set when monitor mode is active */
|
||||||
|
#define REDIS_MONITORING 0x40
|
||||||
|
|
||||||
#define REDIS_REPLY_STRING 1
|
#define REDIS_REPLY_STRING 1
|
||||||
#define REDIS_REPLY_ARRAY 2
|
#define REDIS_REPLY_ARRAY 2
|
||||||
#define REDIS_REPLY_INTEGER 3
|
#define REDIS_REPLY_INTEGER 3
|
||||||
|
Loading…
Reference in New Issue
Block a user