From 1b83f6c4dade309f92c7060000cd2d6e9ff7badf Mon Sep 17 00:00:00 2001 From: Kyon <32325790+kyonRay@users.noreply.github.com> Date: Mon, 18 Sep 2023 14:07:33 +0800 Subject: [PATCH] (command,jline): add getCandidateList command, fix jline fresh bug. (#795) --- src/main/java/console/ConsoleInitializer.java | 3 +++ .../console/client/ConsoleClientFace.java | 2 ++ .../console/client/ConsoleClientImpl.java | 13 +++++++++++++ src/main/java/console/command/JlineUtils.java | 19 +++++++++++++++---- .../command/category/ConsensusOpCommand.java | 9 +++++++++ .../java/console/command/model/HelpInfo.java | 6 ++++++ 6 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/console/ConsoleInitializer.java b/src/main/java/console/ConsoleInitializer.java index a1ed779d..3a8920e3 100644 --- a/src/main/java/console/ConsoleInitializer.java +++ b/src/main/java/console/ConsoleInitializer.java @@ -6,6 +6,7 @@ import console.client.ConsoleClientImpl; import console.collaboration.CollaborationFace; import console.collaboration.CollaborationImpl; +import console.command.JlineUtils; import console.common.ConsoleUtils; import console.contract.ConsoleContractFace; import console.contract.ConsoleContractImpl; @@ -273,6 +274,8 @@ public void switchGroup(String[] params) { this.consoleContractFace = new ConsoleContractImpl(client); this.collaborationFace = new CollaborationImpl(client); this.authFace = new AuthImpl(client); + JlineUtils.switchGroup(client); + this.lineReader = JlineUtils.getLineReader(); System.out.println("Switched to group " + group + "."); System.out.println(); } catch (Exception e) { diff --git a/src/main/java/console/client/ConsoleClientFace.java b/src/main/java/console/client/ConsoleClientFace.java index dc190c41..b3bd673c 100644 --- a/src/main/java/console/client/ConsoleClientFace.java +++ b/src/main/java/console/client/ConsoleClientFace.java @@ -15,6 +15,8 @@ public interface ConsoleClientFace { void getSealerList(String[] params) throws IOException; + void getCandidateSealerList(String[] params) throws IOException; + void getSyncStatus(String[] params) throws IOException; void getConsensusStatus(String[] params) throws IOException; diff --git a/src/main/java/console/client/ConsoleClientImpl.java b/src/main/java/console/client/ConsoleClientImpl.java index 17c0120f..a4ad8425 100644 --- a/src/main/java/console/client/ConsoleClientImpl.java +++ b/src/main/java/console/client/ConsoleClientImpl.java @@ -76,6 +76,19 @@ public void getSealerList(String[] params) throws IOException { } } + @Override + public void getCandidateSealerList(String[] params) throws IOException { + String sealers = + client.getNodeListByType(nodeName, "consensus_candidate_sealer") + .getSealerList() + .toString(); + if ("[]".equals(sealers)) { + System.out.println("[]"); + } else { + ConsoleUtils.printJson(sealers); + } + } + @Override public void getSyncStatus(String[] params) throws IOException { ConsoleUtils.printJson(client.getSyncStatus(nodeName).getSyncStatus().toString()); diff --git a/src/main/java/console/command/JlineUtils.java b/src/main/java/console/command/JlineUtils.java index 0357a9b6..459d04f0 100644 --- a/src/main/java/console/command/JlineUtils.java +++ b/src/main/java/console/command/JlineUtils.java @@ -25,6 +25,7 @@ import org.jline.reader.Completer; import org.jline.reader.LineReader; import org.jline.reader.LineReaderBuilder; +import org.jline.reader.impl.LineReaderImpl; import org.jline.reader.impl.completer.AggregateCompleter; import org.jline.reader.impl.completer.ArgumentCompleter; import org.jline.reader.impl.completer.StringsCompleter; @@ -43,11 +44,13 @@ public class JlineUtils { private static AccountCompleter accountCompleter = null; private static CurrentPathCompleter currentPathCompleter = null; - public static LineReader getLineReader() throws IOException { - return createLineReader(new ArrayList()); + private static LineReader lineReader = null; + + public static LineReader getLineReader() { + return lineReader; } - public static void switchGroup(Client client) { + public static void switchGroup(Client client) throws IOException { if (contractAddressCompleter != null) { contractAddressCompleter.setClient(client); } @@ -60,6 +63,8 @@ public static void switchGroup(Client client) { if (currentPathCompleter != null) { currentPathCompleter.setClient(client); } + List completers = generateComplters(client); + ((LineReaderImpl) lineReader).setCompleter(new AggregateCompleter(completers)); } public static void switchPwd(String pwd) { @@ -68,6 +73,12 @@ public static void switchPwd(String pwd) { public static LineReader getLineReader(Client client) throws IOException { + List completers = generateComplters(client); + lineReader = createLineReader(completers); + return lineReader; + } + + private static List generateComplters(Client client) { List completers = new ArrayList<>(); List commands = @@ -233,7 +244,7 @@ public static LineReader getLineReader(Client client) throws IOException { currentPathCompleter, new StringsCompleterIgnoreCase())); } - return createLineReader(completers); + return completers; } public static LineReader createLineReader(List completers) throws IOException { diff --git a/src/main/java/console/command/category/ConsensusOpCommand.java b/src/main/java/console/command/category/ConsensusOpCommand.java index 05717414..200a76a1 100644 --- a/src/main/java/console/command/category/ConsensusOpCommand.java +++ b/src/main/java/console/command/category/ConsensusOpCommand.java @@ -68,6 +68,15 @@ public Map getAllCommandInfo(boolean isWasm) { (consoleInitializer, params, pwd) -> consoleInitializer.getConsoleClientFace().getObserverList(params)); + public static final CommandInfo GET_CANDIDATE_LIST = + new CommandInfo( + "getCandidateList", + "Query nodeId list for candidate sealer nodes.", + HelpInfo::getCandidateListHelp, + (consoleInitializer, params, pwd) -> + consoleInitializer + .getConsoleClientFace() + .getCandidateSealerList(params)); public static final CommandInfo GET_PBFT_VIEW = new CommandInfo( "getPbftView", diff --git a/src/main/java/console/command/model/HelpInfo.java b/src/main/java/console/command/model/HelpInfo.java index efeda40d..abb33fcc 100644 --- a/src/main/java/console/command/model/HelpInfo.java +++ b/src/main/java/console/command/model/HelpInfo.java @@ -93,6 +93,12 @@ public static void getObserverListHelp() { System.out.println("Usage: \ngetObserverList"); } + public static void getCandidateListHelp() { + System.out.println("Query nodeId list for candidate sealer nodes."); + System.out.println("NOTE: only for the consensus node of the rPBFT algorithm."); + System.out.println("Usage: \ngetCandidateList"); + } + public static void getSealerListHelp() { System.out.println("Query nodeId list for sealer nodes."); System.out.println("Usage: \ngetSealerList");