sequence

This paper mainly studies Claudb’s Pubsub Command

PublishCommand

Claudb 1.7.1 / SRC/main/Java/com/lot/tonivade/claudb/command/pubsub/PublishCommand. Java

@Command("publish") @ParamLength(2) public class PublishCommand implements DBCommand, SubscriptionSupport, PatternSubscriptionSupport { @Override public RedisToken execute(Database db, Request request) { String channel = request.getParam(0).toString(); SafeString message = request.getParam(1); return integer(publishAll(getClauDB(request.getServerContext()), channel, message)); } private int publishAll(DBServerContext server, String channel, SafeString message) { int count = publish(server, channel, message); int pcount = patternPublish(server, channel, message); return count + pcount; }}Copy the code
  • PublishCommand implements DBCommand command SubscriptionSupport PatternSubscriptionSupport interface, Execute publishAll(getClauDB(request.getServerContext()), channel, message)

SubscribeCommand

Claudb 1.7.1 / SRC/main/Java/com/lot/tonivade/claudb/command/pubsub/SubscribeCommand. Java

@ReadOnly @Command("subscribe") @ParamLength(1) @PubSubAllowed public class SubscribeCommand implements DBCommand, SubscriptionSupport { private static final String SUBSCRIBE = "subscribe"; @Override public RedisToken execute(Database db, Request request) { Database admin = getAdminDatabase(request.getServerContext()); String sessionId = getSessionId(request); Sequence<SafeString> channels = getChannels(request); int i = channels.size(); List<Object> result = new LinkedList<>(); for (SafeString channel : request.getParams()) { addSubscription(admin, sessionId, channel); getSessionState(request.getSession()).addSubscription(channel); result.addAll(asList(SUBSCRIBE, channel, ++i)); } return convert(result); } private String getSessionId(Request request) { return request.getSession().getId(); } private Sequence<SafeString> getChannels(Request request) { return getSessionState(request.getSession()).getSubscriptions(); }}Copy the code
  • SubscribeCommand implements DBCommand, SubscriptionSupport interface, AddSubscription and getSessionState(Request.getSession ()).addsubscription (channel)

UnsubscribeCommand

Claudb 1.7.1 / SRC/main/Java/com/lot/tonivade/claudb/command/pubsub/UnsubscribeCommand. Java

@ReadOnly @Command("unsubscribe") @ParamLength(1) @PubSubAllowed public class UnsubscribeCommand implements DBCommand, SubscriptionSupport { private static final String UNSUBSCRIBE = "unsubscribe"; @Override public RedisToken execute(Database db, Request request) { Database admin = getAdminDatabase(request.getServerContext()); String sessionId = getSessionId(request); Sequence<SafeString> channels = getChannels(request); int i = channels.size(); List<Object> result = new LinkedList<>(); for (SafeString channel : request.getParams()) { removeSubscription(admin, sessionId, channel); getSessionState(request.getSession()).removeSubscription(channel); result.addAll(asList(UNSUBSCRIBE, channel, --i)); } return convert(result); } private String getSessionId(Request request) { return request.getSession().getId(); } private Sequence<SafeString> getChannels(Request request) { return getSessionState(request.getSession()).getSubscriptions(); }}Copy the code
  • UnsubscribeCommand implements DBCommand, SubscriptionSupport, Its execute method traverses channels and executes removeSubscription scription(admin, sessionId, The channel) and getSessionState (request) getSession ()). RemoveSubscription (channel)

PatternSubscribeCommand

Claudb 1.7.1 / SRC/main/Java/com/lot/tonivade/claudb/command/pubsub/PatternSubscribeCommand. Java

@ReadOnly @Command("psubscribe") @ParamLength(1) @PubSubAllowed public class PatternSubscribeCommand implements DBCommand, PatternSubscriptionSupport { private static final String PSUBSCRIBE = "psubscribe"; @Override public RedisToken execute(Database db, Request request) { Database admin = getAdminDatabase(request.getServerContext()); String sessionId = getSessionId(request); Sequence<SafeString> channels = getChannels(request); int i = channels.size(); List<Object> result = new LinkedList<>(); for (SafeString pattern : request.getParams()) { addPatternSubscription(admin, sessionId, pattern); getSessionState(request.getSession()).addSubscription(pattern); result.addAll(asList(PSUBSCRIBE, pattern, ++i)); } return convert(result); } private String getSessionId(Request request) { return request.getSession().getId(); } private Sequence<SafeString> getChannels(Request request) { return getSessionState(request.getSession()).getSubscriptions(); }}Copy the code
  • PatternSubscribeCommand implements DBCommand command PatternSubscriptionSupport interface, Its execute method iterates over the pattern one by one and executes addPatternSubscription(admin, sessionId, The pattern) and getSessionState (request) getSession ()). AddSubscription (pattern)

PatternUnsubscribeCommand

Claudb 1.7.1 / SRC/main/Java/com/lot/tonivade/claudb/command/pubsub/PatternUnsubscribeCommand. Java

@ReadOnly @Command("punsubscribe") @ParamLength(1) @PubSubAllowed public class PatternUnsubscribeCommand implements DBCommand, PatternSubscriptionSupport { private static final String PUNSUBSCRIBE = "punsubscribe"; @Override public RedisToken execute(Database db, Request request) { Database admin = getAdminDatabase(request.getServerContext()); String sessionId = getSessionId(request); Sequence<SafeString> channels = getChannels(request); int i = channels.size(); List<Object> result = new LinkedList<>(); for (SafeString channel : request.getParams()) { removePatternSubscription(admin, sessionId, channel); getSessionState(request.getSession()).removeSubscription(channel); result.addAll(asList(PUNSUBSCRIBE, channel, --i)); } return convert(result); } private String getSessionId(Request request) { return request.getSession().getId(); } private Sequence<SafeString> getChannels(Request request) { return getSessionState(request.getSession()).getSubscriptions(); }}Copy the code
  • PatternUnsubscribeCommand implements DBCommand command PatternSubscriptionSupport interface, Its execute traverse channel each execution removePatternSubscription (admin, sessionId, The channel) and getSessionState (request) getSession ()). RemoveSubscription (channel)

summary

claudb Pubsub related command PublishCommand, SubscribeCommand, UnsubscribeCommand, PatternSubscribeCommand, PatternUnsubscribeCommand

doc

  • command/pubsub