diff --git a/api/src/main/java/cc/carm/plugin/mineredis/MineRedis.java b/api/src/main/java/cc/carm/plugin/mineredis/MineRedis.java index 64c24b7..619b0fd 100644 --- a/api/src/main/java/cc/carm/plugin/mineredis/MineRedis.java +++ b/api/src/main/java/cc/carm/plugin/mineredis/MineRedis.java @@ -1,8 +1,9 @@ package cc.carm.plugin.mineredis; import cc.carm.plugin.mineredis.api.RedisManager; -import cc.carm.plugin.mineredis.api.callback.RedisCallbackBuilder; +import cc.carm.plugin.mineredis.api.channel.RedisChannel; import cc.carm.plugin.mineredis.api.message.RedisMessageListener; +import cc.carm.plugin.mineredis.api.request.RedisRequestBuilder; import com.google.common.io.ByteArrayDataOutput; import io.lettuce.core.ClientOptions; import io.lettuce.core.RedisFuture; @@ -122,15 +123,15 @@ public static RedisFuture publishAsync(@NotNull String channel, @NotNull O return getManager().publishAsync(channel, values); } - public static RedisCallbackBuilder request(@NotNull String channel, @NotNull ByteArrayDataOutput byteOutput) { + public static RedisRequestBuilder request(@NotNull String channel, @NotNull ByteArrayDataOutput byteOutput) { return getManager().callback(channel, byteOutput); } - public static RedisCallbackBuilder request(@NotNull String channel, @NotNull Consumer byteOutput) { + public static RedisRequestBuilder request(@NotNull String channel, @NotNull Consumer byteOutput) { return getManager().callback(channel, byteOutput); } - public static RedisCallbackBuilder request(@NotNull String channel, @NotNull Object... values) { + public static RedisRequestBuilder request(@NotNull String channel, @NotNull Object... values) { return getManager().callback(channel, values); } @@ -148,9 +149,20 @@ public static void registerPatternListener(@NotNull RedisMessageListener listene getManager().registerPatternListener(listener, channelPattern, morePatterns); } + public static void registerChannels(@NotNull Class channelClazz) { + getManager().registerChannels(channelClazz); + } + + public static void unregisterChannels(@NotNull Class channelClazz) { + getManager().unregisterChannels(channelClazz); + } + + public static void registerChannel(@NotNull RedisChannel channel) { + getManager().registerChannel(channel); + } + public static void unregisterListener(@NotNull RedisMessageListener listener) { getManager().unregisterListener(listener); } - } diff --git a/api/src/main/java/cc/carm/plugin/mineredis/api/RedisMessageManager.java b/api/src/main/java/cc/carm/plugin/mineredis/api/RedisMessageManager.java index 200a6b4..ae97a06 100644 --- a/api/src/main/java/cc/carm/plugin/mineredis/api/RedisMessageManager.java +++ b/api/src/main/java/cc/carm/plugin/mineredis/api/RedisMessageManager.java @@ -1,17 +1,15 @@ package cc.carm.plugin.mineredis.api; -import cc.carm.plugin.mineredis.api.callback.RedisCallbackBuilder; -import cc.carm.plugin.mineredis.api.message.RedisMessage; +import cc.carm.plugin.mineredis.api.channel.RedisChannel; import cc.carm.plugin.mineredis.api.message.RedisMessageListener; +import cc.carm.plugin.mineredis.api.request.RedisRequestBuilder; import com.google.common.io.ByteArrayDataOutput; import io.lettuce.core.RedisFuture; import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; -import java.util.function.Function; /** * 发布与订阅(Pub/Sub)管理器。 @@ -72,11 +70,11 @@ default RedisFuture publishAsync(@NotNull String channel, @NotNull Object. return publishAsync(channel, s -> writeParams(s, Arrays.asList(values))); } - RedisCallbackBuilder callback(@NotNull String channel, @NotNull ByteArrayDataOutput byteOutput); + RedisRequestBuilder callback(@NotNull String channel, @NotNull ByteArrayDataOutput byteOutput); - RedisCallbackBuilder callback(@NotNull String channel, @NotNull Consumer byteOutput); + RedisRequestBuilder callback(@NotNull String channel, @NotNull Consumer byteOutput); - default RedisCallbackBuilder callback(@NotNull String channel, @NotNull Object... values) { + default RedisRequestBuilder callback(@NotNull String channel, @NotNull Object... values) { return callback(channel, s -> writeParams(s, Arrays.asList(values))); } @@ -90,6 +88,15 @@ void registerPatternListener(@NotNull RedisMessageListener listener, void unregisterListener(@NotNull RedisMessageListener listener); + void registerChannels(@NotNull Class channelClazz); + + void unregisterChannels(@NotNull Class channelClazz); + + default void registerChannel(@NotNull RedisChannel channel) { + registerChannelListener(channel, channel.getChannel()); + } + + static void writeParams(ByteArrayDataOutput data, List params) { params.forEach(param -> writeParam(data, param)); } diff --git a/api/src/main/java/cc/carm/plugin/mineredis/api/channel/RedisChannel.java b/api/src/main/java/cc/carm/plugin/mineredis/api/channel/RedisChannel.java new file mode 100644 index 0000000..b8dabc0 --- /dev/null +++ b/api/src/main/java/cc/carm/plugin/mineredis/api/channel/RedisChannel.java @@ -0,0 +1,74 @@ +package cc.carm.plugin.mineredis.api.channel; + +import cc.carm.plugin.mineredis.MineRedis; +import cc.carm.plugin.mineredis.api.message.RedisMessage; +import cc.carm.plugin.mineredis.api.message.RedisMessageListener; +import cc.carm.plugin.mineredis.api.message.PreparedRedisMessage; +import com.google.common.io.ByteArrayDataOutput; +import io.lettuce.core.RedisFuture; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; + +public class RedisChannel implements RedisMessageListener { + + public static RedisChannelBuilder builder(String channel) { + return new RedisChannelBuilder(channel); + } + + protected final @NotNull String channel; + protected final @Nullable Predicate filter; + protected final @Nullable Function handler; + + public RedisChannel(@NotNull String channel, + @Nullable Predicate filter, + @Nullable Function handler) { + this.channel = channel; + this.filter = filter; + this.handler = handler; + } + + public @NotNull String getChannel() { + return this.channel; + } + + @Override + public void handle(RedisMessage message) { + if (handler == null) return; + if (!channel.equals(message.getChannel())) return; + if (filter != null && !filter.test(message)) return; + PreparedRedisMessage response = handler.apply(message); + if (response != null) response.publish(); + } + + public RedisFuture publishAsync(@NotNull ByteArrayDataOutput data) { + return MineRedis.publishAsync(channel, data); + } + + + public RedisFuture publishAsync(@NotNull Consumer data) { + return MineRedis.publishAsync(channel, data); + } + + + public RedisFuture publishAsync(Object... values) { + return MineRedis.publishAsync(channel, values); + } + + + public long publish(@NotNull Object... values) { + return MineRedis.publish(channel, values); + } + + public long publish(@NotNull ByteArrayDataOutput data) { + return MineRedis.publish(channel, data); + } + + public long publish(@NotNull Consumer data) { + return MineRedis.publish(channel, data); + } + +} diff --git a/api/src/main/java/cc/carm/plugin/mineredis/api/channel/RedisChannelBuilder.java b/api/src/main/java/cc/carm/plugin/mineredis/api/channel/RedisChannelBuilder.java new file mode 100644 index 0000000..5fc7c5d --- /dev/null +++ b/api/src/main/java/cc/carm/plugin/mineredis/api/channel/RedisChannelBuilder.java @@ -0,0 +1,40 @@ +package cc.carm.plugin.mineredis.api.channel; + +import cc.carm.plugin.mineredis.api.message.RedisMessage; +import cc.carm.plugin.mineredis.api.message.PreparedRedisMessage; + +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; + +public class RedisChannelBuilder { + + protected final String channel; + protected Predicate filter = m -> !m.isLocalMessage(); + + public RedisChannelBuilder(String channel) { + this.channel = channel; + } + + + public RedisChannelBuilder filter(Predicate filter) { + return setFilter(this.filter == null ? filter : this.filter.and(filter)); + } + + public RedisChannelBuilder setFilter(Predicate filter) { + this.filter = filter; + return this; + } + + public RedisChannel handle(Consumer handler) { + return handle(m -> { + handler.accept(m); + return null; + }); + } + + public RedisChannel handle(Function handler) { + return new RedisChannel(channel, filter, handler); + } + +} diff --git a/api/src/main/java/cc/carm/plugin/mineredis/api/message/PreparedRedisMessage.java b/api/src/main/java/cc/carm/plugin/mineredis/api/message/PreparedRedisMessage.java new file mode 100644 index 0000000..5b584a0 --- /dev/null +++ b/api/src/main/java/cc/carm/plugin/mineredis/api/message/PreparedRedisMessage.java @@ -0,0 +1,52 @@ +package cc.carm.plugin.mineredis.api.message; + +import cc.carm.plugin.mineredis.MineRedis; +import cc.carm.plugin.mineredis.api.RedisMessageManager; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.function.Consumer; + +public class PreparedRedisMessage { + + public static PreparedRedisMessage of(@NotNull String channel, @NotNull ByteArrayDataOutput data) { + return new PreparedRedisMessage(channel, data); + } + + public static PreparedRedisMessage of(@NotNull String channel, @NotNull Consumer data) { + ByteArrayDataOutput output = ByteStreams.newDataOutput(); + data.accept(output); + return of(channel, output); + } + + public static PreparedRedisMessage of(@NotNull String channel, @NotNull Object... values) { + return of(channel, o -> RedisMessageManager.writeParams(o, Arrays.asList(values))); + } + + protected final @NotNull String channel; + protected final @NotNull ByteArrayDataOutput data; + + public PreparedRedisMessage(@NotNull String channel, @NotNull ByteArrayDataOutput data) { + this.channel = channel; + this.data = data; + } + + public String channel() { + return channel; + } + + public ByteArrayDataOutput data() { + return data; + } + + public void publish() { + MineRedis.publish(channel, data); + } + + public void publishAsync() { + MineRedis.publishAsync(channel, data); + } + +} diff --git a/api/src/main/java/cc/carm/plugin/mineredis/api/message/RedisMessage.java b/api/src/main/java/cc/carm/plugin/mineredis/api/message/RedisMessage.java index 81e7b4f..66f6335 100644 --- a/api/src/main/java/cc/carm/plugin/mineredis/api/message/RedisMessage.java +++ b/api/src/main/java/cc/carm/plugin/mineredis/api/message/RedisMessage.java @@ -4,6 +4,7 @@ import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteStreams; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.function.Function; @@ -14,6 +15,7 @@ public class RedisMessage { protected final long timestamp; protected final byte[] rawData; + protected @Nullable ByteArrayDataInput data; public RedisMessage(@NotNull String channel, @NotNull String sourceServerID, long timestamp, byte[] raw) { @@ -33,28 +35,52 @@ public boolean isLocalMessage() { } public @NotNull String getSourceServerID() { + return sourceID(); + } + + public @NotNull String sourceID() { return sourceServerID; } public @NotNull String getChannel() { + return channel(); + } + + public @NotNull String channel() { return channel; } public long getTimestamp() { + return timestamp(); + } + + public long timestamp() { return timestamp; } - public byte[] getRawData() { + public byte[] raw() { return rawData; } - @SuppressWarnings("UnstableApiUsage") + public ByteArrayDataInput data() { + if (data == null) reset(); + return this.data; + } + public ByteArrayDataInput getData() { - return ByteStreams.newDataInput(rawData); + return data(); + } + + public void reset() { + this.data = dataCopy(); + } + + public ByteArrayDataInput dataCopy() { + return ByteStreams.newDataInput(raw()); } public T apply(@NotNull Function handler) { - return handler.apply(getData()); + return handler.apply(dataCopy()); } } diff --git a/api/src/main/java/cc/carm/plugin/mineredis/api/callback/RedisCallbackBuilder.java b/api/src/main/java/cc/carm/plugin/mineredis/api/request/RedisRequestBuilder.java similarity index 66% rename from api/src/main/java/cc/carm/plugin/mineredis/api/callback/RedisCallbackBuilder.java rename to api/src/main/java/cc/carm/plugin/mineredis/api/request/RedisRequestBuilder.java index 288887e..d956d61 100644 --- a/api/src/main/java/cc/carm/plugin/mineredis/api/callback/RedisCallbackBuilder.java +++ b/api/src/main/java/cc/carm/plugin/mineredis/api/request/RedisRequestBuilder.java @@ -1,4 +1,4 @@ -package cc.carm.plugin.mineredis.api.callback; +package cc.carm.plugin.mineredis.api.request; import cc.carm.plugin.mineredis.api.RedisManager; import cc.carm.plugin.mineredis.api.message.RedisMessage; @@ -6,29 +6,32 @@ import com.google.common.io.ByteArrayDataOutput; import org.jetbrains.annotations.NotNull; -import java.time.Duration; import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.function.Predicate; -public class RedisCallbackBuilder { +public class RedisRequestBuilder { protected final @NotNull RedisManager redis; protected final @NotNull String requestChannel; protected final @NotNull ByteArrayDataOutput requestData; protected Predicate filter; - protected Duration timeoutDuration = Duration.ofSeconds(5); - public RedisCallbackBuilder(@NotNull RedisManager redis, - @NotNull String requestChannel, @NotNull ByteArrayDataOutput requestData) { + public RedisRequestBuilder(@NotNull RedisManager redis, + @NotNull String requestChannel, @NotNull ByteArrayDataOutput requestData) { this.redis = redis; this.requestChannel = requestChannel; this.requestData = requestData; } - public CompletableFuture response(@NotNull String channel, - @NotNull Function handler) { + public RedisRequestBuilder filter(@NotNull Predicate filter) { + this.filter = this.filter == null ? filter : this.filter.and(filter); + return this; + } + + public CompletableFuture handleResponse(@NotNull String channel, + @NotNull Function handler) { CompletableFuture future = new CompletableFuture<>(); RedisMessageListener listener = message -> { if (filter != null && !filter.test(message)) return; @@ -39,8 +42,4 @@ public CompletableFuture response(@NotNull String channel, return future.whenComplete((r, e) -> redis.unregisterListener(listener)); } - public RedisCallbackBuilder filter(@NotNull Predicate filter) { - this.filter = filter; - return this; - } } diff --git a/api/src/test/java/RedisChannels.java b/api/src/test/java/RedisChannels.java new file mode 100644 index 0000000..d7ac548 --- /dev/null +++ b/api/src/test/java/RedisChannels.java @@ -0,0 +1,23 @@ +import cc.carm.plugin.mineredis.api.channel.RedisChannel; +import cc.carm.plugin.mineredis.api.message.PreparedRedisMessage; + +public interface RedisChannels { + + + RedisChannel TEST_REQUEST = RedisChannel.builder("test.request").handle(m -> { + String id = m.data().readUTF(); + String content = m.data().readUTF(); + return PreparedRedisMessage.of("test.response", id, true); + }); + + interface PURCHASE { + + RedisChannel PAID = RedisChannel.builder("purchase.paid").handle(m -> { + String id = m.data().readUTF(); + // Handle paid actions + }); + + } + + +} diff --git a/api/src/test/java/RedisCallback.java b/api/src/test/java/RedisRequest.java similarity index 59% rename from api/src/test/java/RedisCallback.java rename to api/src/test/java/RedisRequest.java index 5d0b3a3..aadad10 100644 --- a/api/src/test/java/RedisCallback.java +++ b/api/src/test/java/RedisRequest.java @@ -2,7 +2,7 @@ import java.util.UUID; -public class RedisCallback { +public class RedisRequest { public void demo() { UUID requestID = UUID.randomUUID(); @@ -10,11 +10,12 @@ public void demo() { out.writeUTF(requestID.toString()); out.writeUTF("test"); }) - .filter(message -> message.getData().readUTF().equals(requestID.toString())) // 限制条件 - .response("test.response", message -> { // - System.out.println("response: " + message.getData().readUTF()); - return message.getData().readUTF(); + .filter(message -> message.dataCopy().readUTF().equals(requestID.toString())) // 限制条件 + .handleResponse("test.response", message -> { // + System.out.println("response: " + message.dataCopy().readUTF()); + return message.dataCopy().readUTF(); }) // 如有收到了符合条件的反馈,则读取结果 +// .orTimeout(2, TimeUnit.SECONDS) // 超时时间 .thenAccept(System.out::println) // 使用结果 .exceptionally(throwable -> { throwable.printStackTrace(); diff --git a/core/src/main/java/cc/carm/plugin/mineredis/MineRedisManager.java b/core/src/main/java/cc/carm/plugin/mineredis/MineRedisManager.java index 4032e09..90ab62d 100644 --- a/core/src/main/java/cc/carm/plugin/mineredis/MineRedisManager.java +++ b/core/src/main/java/cc/carm/plugin/mineredis/MineRedisManager.java @@ -1,9 +1,10 @@ package cc.carm.plugin.mineredis; import cc.carm.plugin.mineredis.api.RedisManager; -import cc.carm.plugin.mineredis.api.callback.RedisCallbackBuilder; +import cc.carm.plugin.mineredis.api.channel.RedisChannel; import cc.carm.plugin.mineredis.api.message.RedisMessage; import cc.carm.plugin.mineredis.api.message.RedisMessageListener; +import cc.carm.plugin.mineredis.api.request.RedisRequestBuilder; import cc.carm.plugin.mineredis.handler.RedisByteCodec; import cc.carm.plugin.mineredis.handler.RedisSubListener; import com.google.common.io.ByteArrayDataOutput; @@ -19,6 +20,7 @@ import io.lettuce.core.resource.ClientResources; import org.jetbrains.annotations.NotNull; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -53,7 +55,6 @@ public MineRedisManager(@NotNull RedisURI url, @NotNull ClientResources resource this.subConn.addListener(new RedisSubListener(this)); } - @SuppressWarnings("UnstableApiUsage") public void handleMessage(String pattern, String channel, String source, long timestamp, byte[] data) { List listeners = new ArrayList<>(globalListeners); @@ -119,7 +120,6 @@ public long publish(@NotNull String channel, @NotNull ByteArrayDataOutput byteOu } @Override - @SuppressWarnings("UnstableApiUsage") public long publish(@NotNull String channel, @NotNull Consumer byteOutput) { ByteArrayDataOutput stream = ByteStreams.newDataOutput(); byteOutput.accept(stream); @@ -131,7 +131,6 @@ public RedisFuture publishAsync(@NotNull String channel, @NotNull ByteArra } @Override - @SuppressWarnings("UnstableApiUsage") public RedisFuture publishAsync(@NotNull String channel, @NotNull Consumer byteOutput) { ByteArrayDataOutput stream = ByteStreams.newDataOutput(); byteOutput.accept(stream); @@ -139,19 +138,17 @@ public RedisFuture publishAsync(@NotNull String channel, @NotNull Consumer } @Override - public RedisCallbackBuilder callback(@NotNull String channel, @NotNull ByteArrayDataOutput byteOutput) { - return new RedisCallbackBuilder(this, channel, byteOutput); + public RedisRequestBuilder callback(@NotNull String channel, @NotNull ByteArrayDataOutput byteOutput) { + return new RedisRequestBuilder(this, channel, byteOutput); } - @SuppressWarnings("UnstableApiUsage") @Override - public RedisCallbackBuilder callback(@NotNull String channel, @NotNull Consumer byteOutput) { + public RedisRequestBuilder callback(@NotNull String channel, @NotNull Consumer byteOutput) { ByteArrayDataOutput stream = ByteStreams.newDataOutput(); byteOutput.accept(stream); return callback(channel, stream); } - @SuppressWarnings("UnstableApiUsage") protected byte[] writeMessages(@NotNull ByteArrayDataOutput byteOutput) { ByteArrayDataOutput stream = ByteStreams.newDataOutput(); stream.writeUTF(MineRedis.getServerID()); // 在头部写入本节点的ID @@ -188,4 +185,27 @@ public void unregisterListener(@NotNull RedisMessageListener listener) { patternListeners.entrySet().removeIf(e -> e.getValue().equals(listener)); } + @Override + public void registerChannels(@NotNull Class channelClazz) { + Arrays.stream(channelClazz.getDeclaredFields()).forEach(field -> handleChannel(field, channelClazz, this::registerChannel)); + Arrays.stream(channelClazz.getDeclaredClasses()).forEach(this::registerChannels); + } + + protected void handleChannel(@NotNull Field field, @NotNull Class source, + @NotNull Consumer channel) { + try { + field.setAccessible(true); + Object obj = field.get(source); + if (!(obj instanceof RedisChannel)) return; + channel.accept((RedisChannel) obj); + } catch (Exception ex) { + } + } + + @Override + public void unregisterChannels(@NotNull Class channelClazz) { + Arrays.stream(channelClazz.getDeclaredFields()).forEach(field -> handleChannel(field, channelClazz, this::unregisterListener)); + Arrays.stream(channelClazz.getDeclaredClasses()).forEach(this::unregisterChannels); + } + } diff --git a/core/src/main/java/cc/carm/plugin/mineredis/conf/PluginConfiguration.java b/core/src/main/java/cc/carm/plugin/mineredis/conf/PluginConfiguration.java index f16d769..1d642f1 100644 --- a/core/src/main/java/cc/carm/plugin/mineredis/conf/PluginConfiguration.java +++ b/core/src/main/java/cc/carm/plugin/mineredis/conf/PluginConfiguration.java @@ -12,27 +12,28 @@ public class PluginConfiguration extends ConfigurationRoot { @HeaderComment("排错模式,一般留给开发者检查问题,平常使用无需开启。") - public final ConfigValue DEBUG = ConfiguredValue.of(Boolean.class, false); + public final ConfigValue DEBUG = ConfiguredValue.of(false); @HeaderComment({"", "统计数据设定", "该选项用于帮助开发者统计插件版本与使用情况,且绝不会影响性能与使用体验。", "当然,您也可以选择在这里关闭,或在plugins/bStats下的配置文件中关闭所有插件的统计信息。" }) - public final ConfigValue METRICS = ConfiguredValue.of(Boolean.class, true); + public final ConfigValue METRICS = ConfiguredValue.of(true); @HeaderComment({"", "检查更新设定", "该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。", "检查更新为异步操作,绝不会影响性能与使用体验。" }) - public final ConfigValue UPDATE_CHECKER = ConfiguredValue.of(Boolean.class, true); + public final ConfigValue UPDATE_CHECKER = ConfiguredValue.of(true); - public final ConfigValue SERVER_ID = ConfiguredValue.of(String.class, "server-name"); + @HeaderComment("当前服务器的ID,用于消息通讯时辨别消息来源。") + public final ConfigValue SERVER_ID = ConfiguredValue.of("server-name"); @SuppressWarnings("deprecation") - public final ConfigValue CONNECTION = ConfigValue.builder() - .asValue(RedisURI.class).fromSection() + public final ConfigValue CONNECTION = ConfiguredValue.builderOf(RedisURI.class) + .fromSection() .defaults(RedisURI.Builder .redis("127.0.0.1", RedisURI.DEFAULT_REDIS_PORT) .withPassword("password".toCharArray()) @@ -62,5 +63,4 @@ public class PluginConfiguration extends ConfigurationRoot { return map; }).build(); - } diff --git a/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisByteCodec.java b/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisByteCodec.java index d14fbc5..3ec0e0b 100644 --- a/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisByteCodec.java +++ b/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisByteCodec.java @@ -7,11 +7,12 @@ import java.nio.charset.StandardCharsets; public class RedisByteCodec implements RedisCodec { - private final Charset charset = StandardCharsets.UTF_8; + + private static final Charset CHARSET = StandardCharsets.UTF_8; @Override public String decodeKey(ByteBuffer bytes) { - return charset.decode(bytes).toString(); + return CHARSET.decode(bytes).toString(); } @Override @@ -26,7 +27,7 @@ public byte[] decodeValue(ByteBuffer bytes) { @Override public ByteBuffer encodeKey(String key) { - return charset.encode(key); + return CHARSET.encode(key); } @Override diff --git a/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisSubListener.java b/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisSubListener.java index 329d285..65be342 100644 --- a/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisSubListener.java +++ b/core/src/main/java/cc/carm/plugin/mineredis/handler/RedisSubListener.java @@ -52,6 +52,5 @@ public void unsubscribed(String channel, long count) { @Override public void punsubscribed(String pattern, long count) { - //TODO Debug消息 } } diff --git a/pom.xml b/pom.xml index 62a4340..2e9f994 100644 --- a/pom.xml +++ b/pom.xml @@ -21,8 +21,8 @@ UTF-8 UTF-8 - 3.3.1 - 1.4.18 + 3.9.1 + 1.5.11 6.2.0.RELEASE cc.carm.plugin