package com.dy.pipirrComCreator.console; 
 | 
  
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
  
 | 
import java.io.Console; 
 | 
import java.io.PrintWriter; 
 | 
@Slf4j 
 | 
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 ; 
 | 
  
 | 
     
 | 
    public CommandConsole(Console console)throws Exception{ 
 | 
        this.console = console ;     
 | 
        if(this.console == null){ 
 | 
            throw new Exception("严重错误,java控制台对象为空!"); 
 | 
        } 
 | 
        prtWrt = console.writer() ; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 初始,检查并输出一些信息 
 | 
     * @throws Exception 
 | 
     */ 
 | 
    public void init() throws Exception{ 
 | 
        PrintWriter prtWrt = console.writer() ; 
 | 
        prtWrt.println("----------------------------------------"); 
 | 
        prtWrt.println("--                                    --"); 
 | 
        prtWrt.println("--    欢迎使用命令生成器              --"); 
 | 
        prtWrt.println("--                                    --"); 
 | 
        prtWrt.println("----------------------------------------"); 
 | 
    } 
 | 
     
 | 
    /** 
 | 
     * 执行控制台控制 
 | 
     * @return 
 | 
     */ 
 | 
    public boolean clientConsole(){ 
 | 
        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 command = console.readLine(commandPrefix); 
 | 
            try { 
 | 
                exit = Command.dealCommand(command, prtWrt) ; 
 | 
            }catch (Exception e){ 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
  
 | 
        } 
 | 
        return exit ; 
 | 
    } 
 | 
     
 | 
    public static void changeCommandPrefix(String prefix){ 
 | 
        commandPrefix = commandPrefix1 + prefix ; 
 | 
    } 
 | 
    public static void recoverCommandPrefix(){ 
 | 
        commandPrefix = commandPrefix1 + commandPrefix2 ; 
 | 
    } 
 | 
} 
 |