summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2018-12-18 12:19:24 +0100
committerantirez <antirez@gmail.com>2018-12-21 11:42:52 +0100
commite15682dcd6c00da28b08b9fe56d5f74dfbf068b3 (patch)
treef6959b5500488f308c0c0e25d4478d0a173920cd
parentb5c8f11000cebed743aee51fc13cad5d451ff818 (diff)
downloadredis-e15682dcd6c00da28b08b9fe56d5f74dfbf068b3.tar.gz
RESP3: extract code to send pubsub messages into functions.
-rw-r--r--src/pubsub.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/pubsub.c b/src/pubsub.c
index 335c52d9b..12b252cfb 100644
--- a/src/pubsub.c
+++ b/src/pubsub.c
@@ -221,6 +221,25 @@ int pubsubUnsubscribeAllPatterns(client *c, int notify) {
return count;
}
+/* Send a pubsub message of type "message" to the client. */
+void addReplyPubsubMessage(client *c, robj *channel, robj *msg) {
+ addReply(c,shared.mbulkhdr[3]);
+ addReply(c,shared.messagebulk);
+ addReplyBulk(c,channel);
+ addReplyBulk(c,msg);
+}
+
+/* Send a pubsub message of type "pmessage" to the client. The difference
+ * with the "message" type delivered by addReplyPubsubMessage() is that
+ * this message format also includes the pattern that matched the message. */
+void addReplyPubsubPatMessage(client *c, robj *pat, robj *channel, robj *msg) {
+ addReply(c,shared.mbulkhdr[4]);
+ addReply(c,shared.pmessagebulk);
+ addReplyBulk(c,pat);
+ addReplyBulk(c,channel);
+ addReplyBulk(c,msg);
+}
+
/* Publish a message */
int pubsubPublishMessage(robj *channel, robj *message) {
int receivers = 0;
@@ -238,11 +257,7 @@ int pubsubPublishMessage(robj *channel, robj *message) {
listRewind(list,&li);
while ((ln = listNext(&li)) != NULL) {
client *c = ln->value;
-
- addReply(c,shared.mbulkhdr[3]);
- addReply(c,shared.messagebulk);
- addReplyBulk(c,channel);
- addReplyBulk(c,message);
+ addReplyPubsubMessage(c,channel,message);
receivers++;
}
}
@@ -256,12 +271,10 @@ int pubsubPublishMessage(robj *channel, robj *message) {
if (stringmatchlen((char*)pat->pattern->ptr,
sdslen(pat->pattern->ptr),
(char*)channel->ptr,
- sdslen(channel->ptr),0)) {
- addReply(pat->client,shared.mbulkhdr[4]);
- addReply(pat->client,shared.pmessagebulk);
- addReplyBulk(pat->client,pat->pattern);
- addReplyBulk(pat->client,channel);
- addReplyBulk(pat->client,message);
+ sdslen(channel->ptr),0))
+ {
+ addReplyPubsubPatMessage(pat->client,
+ pat->pattern,channel,message);
receivers++;
}
}