package com.dy.pipIrrParamSet.console;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Scope;
|
import org.springframework.stereotype.Component;
|
|
import java.io.Console;
|
import java.io.PrintWriter;
|
|
/**
|
* @Author: liurunyu
|
* @Date: 2025/5/28 15:36
|
* @Description
|
*/
|
@Slf4j
|
@Component
|
@Scope("prototype")
|
public class CommandConsole {
|
|
private Console console ;
|
private PrintWriter prtWrt ;
|
private static final String myPassword = "123456" ;
|
private static final String commandPrefix1 = ">>" ;
|
private static final String commandPrefix2 = "$: " ;
|
private static String commandPrefix = commandPrefix1 + commandPrefix2 ;
|
|
private Command command ;
|
|
@Autowired
|
public void setBean(Command command){
|
this.command = command;
|
}
|
|
/**
|
* 初始,检查并输出一些信息
|
* @throws Exception
|
*/
|
public void init(Console console) throws Exception{
|
this.console = console ;
|
if(this.console == null){
|
throw new Exception("严重错误,java控制台对象为空!");
|
}
|
prtWrt = console.writer() ;
|
prtWrt.println("----------------------------------------");
|
prtWrt.println("-- --");
|
prtWrt.println("-- 欢迎使用参数配置器 --");
|
prtWrt.println("-- --");
|
prtWrt.println("----------------------------------------");
|
}
|
|
/**
|
* 执行控制台控制
|
* @return
|
*/
|
public boolean execute(){
|
boolean exit = false ;
|
try {
|
this.login() ;
|
exit = this.doConsole();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return exit ;
|
}
|
|
private boolean login(){
|
while (true) {
|
//String username = console.readLine(">>Username: ");
|
char[] password = console.readPassword(">>Password: ");
|
String passwordStr = String.valueOf(password) ;
|
if (passwordStr.equals("help")) {
|
console.printf("密码是%1$s\n", myPassword);
|
// 使用后应立即将数组清空,以减少其在内存中占用的时间,增强安全性
|
password = null;
|
} else if(passwordStr.equals(myPassword)){
|
return true;
|
}
|
}
|
}
|
|
private boolean doConsole(){
|
boolean exit = false ;
|
while (!exit) {
|
String inputLine = console.readLine(commandPrefix);
|
try {
|
exit = command.dealCommand(inputLine, prtWrt) ;
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
|
}
|
return true;
|
}
|
|
public void changeCommandPrefix(String prefix){
|
commandPrefix = commandPrefix1 + prefix ;
|
}
|
public void recoverCommandPrefix(){
|
commandPrefix = commandPrefix1 + commandPrefix2 ;
|
}
|
}
|