hiredis сообщения не приходят в обработчик подписки - PullRequest
1 голос
/ 17 июня 2019

Я работал с hiredis в качестве клиента, все, например, set, publish и т. Д., Кроме subscribe. Я могу подписаться, но не могу получить сообщение, когда пытаюсь опубликовать на канале, на который я подписан. Вот код, который я использую:

int main() {
    signal(SIGPIPE, sigHandler);
    struct event_base *base = event_base_new();

    assert(base != nullptr);

    auto redis = redisAsyncConnect(IP, PORT);

    if (redis != nullptr && redis->err) {
        std::cerr << redis->err;
        delete redis;
        exit(1);
    }
    std::cout << "Connected" << END;

    int flag;

    std::cout << "Calling redisLibeventAttach" << END;

    redisLibeventAttach(redis, base);
    flag = redisAsyncCommand(redis, onMessage, (char *) "sub", "SUBSCRIBE test");

    std::cout << "Command ret: " << flag << END;

    flag = event_base_dispatch(base);
    std::cout << " Event base flag " << flag << END;


    return 0;
}

И функция включения сообщения:

void onMessage(redisAsyncContext *context, void *r, void *data) {

    assert(r != nullptr);
    auto *reply = static_cast<redisReply *>(r);

    assert(reply != nullptr);

    std::cout << "Reply " << reply->type << END;

    switch (reply->type) {
        case REDIS_REPLY_ARRAY:

            for (int i = 0; i < reply->elements; ++i) {
                std::cout << i << " -- " << reply->element[i]->str << END;
            }

            break;
        case REDIS_REPLY_STRING:
            std::cout << reply->str << END;
            break;
    }


}

Есть ли что-нибудь еще, что я должен сделать?

...