All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.vertx.redis.impl.AbstractRedisClient Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2015 Red Hat, Inc.
 * 

* All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. *

* The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html *

* The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php *

* You may elect to redistribute this code under either of these licenses. */ package io.vertx.redis.impl; import io.vertx.core.AsyncResult; import io.vertx.core.Handler; import io.vertx.core.Vertx; import io.vertx.core.json.JsonObject; import io.vertx.redis.RedisClient; import io.vertx.redis.RedisOptions; import java.util.List; public abstract class AbstractRedisClient extends BaseRedisClient implements RedisClient { AbstractRedisClient(Vertx vertx, RedisOptions config) { super(vertx, config); } private ResponseTransform getResponseTransformFor(RedisCommand command) { if (command == RedisCommand.HGETALL) { return ResponseTransform.HASH; } if (command == RedisCommand.INFO) { return ResponseTransform.INFO; } if (command == RedisCommand.EVAL || command == RedisCommand.EVALSHA) { return ResponseTransform.ARRAY; } return ResponseTransform.NONE; } @Override final void send(final RedisCommand command, final List redisArgs, final Class returnType, final boolean binary, final Handler> resultHandler) { final Command cmd = new Command<>(Vertx.currentContext(), command, redisArgs, binary ? binaryCharset : charset, getResponseTransformFor(command), returnType).handler(resultHandler); switch (command) { case PSUBSCRIBE: cmd.setExpectedReplies(redisArgs.size()); for (Object obj : redisArgs) { String pattern = (String) obj; // compose the listening address as base + . + pattern final String vertxChannel = baseAddress + "." + pattern; subscriptions.registerPatternSubscribeHandler(pattern, (pattern1, replyData) -> { JsonObject replyMessage = new JsonObject(); replyMessage.put("status", "ok"); JsonObject message = new JsonObject(); message.put("pattern", pattern1); message.put("channel", replyData[2].asType(String.class, encoding)); message.put("message", replyData[3].asType(String.class, encoding)); replyMessage.put("value", message); eb.send(vertxChannel, replyMessage); }); } pubsub.send(cmd); break; case SUBSCRIBE: cmd.setExpectedReplies(redisArgs.size()); for (Object obj : redisArgs) { String channel = (String) obj; // compose the listening address as base + . + channel final String vertxChannel = baseAddress + "." + channel; subscriptions.registerChannelSubscribeHandler(channel, (channel1, replyData) -> { JsonObject replyMessage = new JsonObject(); replyMessage.put("status", "ok"); JsonObject message = new JsonObject(); message.put("channel", channel1); message.put("message", replyData[2].asType(String.class, encoding)); replyMessage.put("value", message); eb.send(vertxChannel, replyMessage); }); } pubsub.send(cmd); break; case PUNSUBSCRIBE: // unregister all channels if (redisArgs == null || redisArgs.size() == 0) { // unsubscribe all cmd.setExpectedReplies(subscriptions.patternSize()); subscriptions.unregisterPatternSubscribeHandler(null); } else { cmd.setExpectedReplies(redisArgs.size()); for (Object obj : redisArgs) { String pattern = (String) obj; subscriptions.unregisterPatternSubscribeHandler(pattern); } } pubsub.send(cmd); break; case UNSUBSCRIBE: // unregister all channels if (redisArgs == null || redisArgs.size() == 0) { // unsubscribe all cmd.setExpectedReplies(subscriptions.channelSize()); subscriptions.unregisterChannelSubscribeHandler(null); } else { cmd.setExpectedReplies(redisArgs.size()); for (Object obj : redisArgs) { String channel = (String) obj; subscriptions.unregisterChannelSubscribeHandler(channel); } } pubsub.send(cmd); break; case QUIT: // this is a special case that must be sent to all connections redis.send(cmd); pubsub.send(cmd); break; default: // all other commands are sent to the normal connection redis.send(cmd); break; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy