package openminer; import java.net.*; import java.io.*; public class ConsoleClient { private Socket m_Socket; private DataInputStream m_DataInputStream; private DataOutputStream m_DataOutputStream; private BufferedReader m_StdinReader; private final static String CMD_EXIT = "exit"; private final static String CMD_ADD = "add"; private final static String CMD_TRAIN = "train"; private final static String CMD_USE = "use"; private final static String CMD_LOOKUP = "lookup"; private final static String CMD_REMOVE = "remove"; private final static String CMD_LIST = "list"; private final static boolean DEBUG = true; public ConsoleClient(String host,String port) throws Exception { InputStreamReader isr = new InputStreamReader(System.in); m_StdinReader = new BufferedReader(isr); System.out.print("Please wait for connection ......."); m_Socket = new Socket(host,Integer.parseInt(port)); m_DataInputStream = new DataInputStream(m_Socket.getInputStream()); m_DataOutputStream = new DataOutputStream(m_Socket.getOutputStream()); System.out.println("Connected OK!"); } public static void main(String[] args) { ConsoleClient client = null; if(DEBUG) { args = new String[]{"ConsoleClient", "localhost", "3333"}; } if(args.length < 3) { System.out.println("Useage: java ConsoleClient [Host] [Port]"); return; } // 创建连接 try{ client = new ConsoleClient(args[1],args[2]); }catch(Exception e){ System.out.println("Cannot connect the server!"); return; } // 执行客户端 try{ client.execute(); }catch(Exception e) { e.printStackTrace(); } } public void execute() throws Exception { if(login()) { commands(); } exit(); } private boolean login() throws Exception { System.out.print("username: "); String userName = m_StdinReader.readLine(); System.out.print("password: "); String password = m_StdinReader.readLine(); m_DataOutputStream.writeUTF(userName); m_DataOutputStream.writeUTF(password); m_DataOutputStream.flush(); int ret = m_DataInputStream.readInt(); if(ret == OpenMinerCommand.OK) { System.out.println("Login OK!"); return true; } else { System.out.println("Login Error!"); return false; } } private void exit() throws Exception { m_DataInputStream.close(); m_DataOutputStream.close(); m_Socket.close(); System.out.println("Connection closed!"); } private void commands() throws Exception { while(true) { System.out.print(":> "); String cmd = m_StdinReader.readLine(); if(cmd.equalsIgnoreCase(CMD_EXIT)) { cmd_exit(); break; } else if(cmd.equalsIgnoreCase(CMD_ADD)){ cmd_add(); } else if(cmd.equalsIgnoreCase(CMD_TRAIN)) { cmd_train(); } else if(cmd.equalsIgnoreCase(CMD_USE)) { cmd_use(); } else if(cmd.equalsIgnoreCase(CMD_LOOKUP)){ cmd_lookup(); } else if(cmd.equalsIgnoreCase(CMD_REMOVE)) { cmd_remove(); } else if(cmd.equalsIgnoreCase(CMD_LIST)) { cmd_list(); } else { System.out.println("Unknown command: "+cmd); } } } private void cmd_exit() throws Exception { m_DataOutputStream.writeInt(OpenMinerCommand.TASK_EXIT); m_DataOutputStream.flush(); } private void cmd_add() throws Exception { System.out.print("model file path: "); String path = m_StdinReader.readLine(); String fileContent = loadFileContentAsString(path); if(fileContent == null) { System.out.println("File cannot read!"); return; } m_DataOutputStream.writeInt(OpenMinerCommand.TASK_MODEL_ADD); m_DataOutputStream.writeUTF(fileContent); m_DataOutputStream.flush(); int ret = m_DataInputStream.readInt(); if(ret != OpenMinerCommand.OK) { System.out.println("Add Model Error!"); } else { System.out.println("Add Model OK!"); } } private void cmd_train() throws Exception { System.out.print("model name: "); String modelName = m_StdinReader.readLine(); System.out.print("train file path: "); String path = m_StdinReader.readLine(); String fileContent = loadFileContentAsString(path); if(fileContent == null) { System.out.println("File cannot read!"); return; } m_DataOutputStream.writeInt(OpenMinerCommand.TASK_MODEL_TRAIN); m_DataOutputStream.writeUTF(modelName); m_DataOutputStream.writeUTF(fileContent); m_DataOutputStream.flush(); int ret = m_DataInputStream.readInt(); if(ret == OpenMinerCommand.OK) { System.out.println("Train Model OK!"); } else if(ret == OpenMinerCommand.ERROR_MODEL_NOTFOUND) { System.out.println("Train Model Not found !"); } else { System.out.println("Train Model Error!"); } } private void cmd_use() throws Exception { System.out.print("model name: "); String modelName = m_StdinReader.readLine(); System.out.print("use file path: "); String path = m_StdinReader.readLine(); String fileContent = loadFileContentAsString(path); if(fileContent == null) { System.out.println("File cannot read!"); return; } m_DataOutputStream.writeInt(OpenMinerCommand.TASK_MODEL_USE); m_DataOutputStream.writeUTF(modelName); m_DataOutputStream.writeUTF(fileContent); m_DataOutputStream.flush(); String retStr = m_DataInputStream.readUTF(); int ret = m_DataInputStream.readInt(); if(ret == OpenMinerCommand.OK) { System.out.println(retStr); } else if(ret == OpenMinerCommand.ERROR_MODEL_NOTFOUND) { System.out.println("Model Not found !"); } else { System.out.println("Use Model Error!"); } } private void cmd_lookup() throws Exception { System.out.print("model name: "); String modelName = m_StdinReader.readLine(); m_DataOutputStream.writeInt(OpenMinerCommand.TASK_MODEL_LOOKUP); m_DataOutputStream.writeUTF(modelName); m_DataOutputStream.flush(); int ret = m_DataInputStream.readInt(); if(ret == OpenMinerCommand.OK) { String modelDefine = m_DataInputStream.readUTF(); int resultdataLen = m_DataInputStream.readInt(); byte[] resultdata = new byte[resultdataLen]; m_DataInputStream.read(resultdata); String resultXML = new String(resultdata); System.out.println(modelDefine); System.out.println(resultXML); } else if(ret == OpenMinerCommand.ERROR_MODEL_NOTFOUND) { System.out.println("Model Not found !"); } else { System.out.println("Lookup Model Error!"); } } private void cmd_remove() throws Exception { System.out.print("model name: "); String modelName = m_StdinReader.readLine(); m_DataOutputStream.writeInt(OpenMinerCommand.TASK_MODEL_REMOVE); m_DataOutputStream.writeUTF(modelName); m_DataOutputStream.flush(); int ret = m_DataInputStream.readInt(); if(ret == OpenMinerCommand.OK) { System.out.println("Remove Model OK!"); } else if(ret == OpenMinerCommand.ERROR_MODEL_NOTFOUND) { System.out.println("Model Not found !"); } else { System.out.println("Remove Model Error!"); } } private void cmd_list() throws Exception { m_DataOutputStream.writeInt(OpenMinerCommand.TASK_MODEL_LIST); m_DataOutputStream.flush(); int numModel = m_DataInputStream.readInt(); for(int i=0;i