Mercurial > hg > Members > riono > TreeVNC_ja_comment
diff src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java @ 65:ffd7537cebfc
cuiversion
author | Taninari YU <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 27 Jan 2014 16:35:20 +0900 |
parents | |
children | e6550afe663b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/viewer_swing/java/com/glavsoft/viewer/CuiViewer.java Mon Jan 27 16:35:20 2014 +0900 @@ -0,0 +1,269 @@ +package com.glavsoft.viewer; + +import com.glavsoft.rfb.protocol.ProtocolSettings; +import com.glavsoft.viewer.cli.Parser; +import com.glavsoft.viewer.mvp.View; +import com.glavsoft.viewer.swing.ConnectionParams; +import com.glavsoft.viewer.swing.ParametersHandler; +import com.glavsoft.viewer.swing.SwingConnectionWorkerFactory; +import com.glavsoft.viewer.swing.SwingViewerWindowFactory; +import com.glavsoft.viewer.swing.gui.ConnectionView; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.io.IOException; +import java.io.InputStream; +import java.net.Socket; +import java.util.jar.Attributes; +import java.util.jar.Manifest; +import java.util.logging.*; + +import jp.ac.u_ryukyu.treevnc.AcceptThread; +import jp.ac.u_ryukyu.treevnc.CreateConnectionParam; +import jp.ac.u_ryukyu.treevnc.MyRfbProto; +import jp.ac.u_ryukyu.treevnc.client.GetDataClient; +import jp.ac.u_ryukyu.treevnc.client.GetHostClient; +import jp.ac.u_ryukyu.treevnc.client.MyRfbProtoClient; + +public class CuiViewer implements Runnable, WindowListener, ViewerImpl { + + private Logger logger; + private int paramsMask; + private boolean allowAppletInteractiveConnections; + + public final ConnectionParams connectionParams; + protected String passwordFromParams; + boolean isSeparateFrame = true; + protected boolean isApplet = true; + private final ProtocolSettings settings; + protected UiSettings uiSettings; + private volatile boolean isAppletStopped = false; + private ConnectionPresenter connectionPresenter; + private boolean isTreeVNC = false; + protected MyRfbProto myRfb; + private boolean cuiVersion; + + public static void main(String[] args) { + Parser parser = new Parser(); + ParametersHandler.completeParserOptions(parser); + + parser.parse(args); + if (parser.isSet(ParametersHandler.ARG_HELP)) { + printUsage(parser.optionsUsage()); + System.exit(0); + } + CuiViewer viewer = new CuiViewer(parser); + SwingUtilities.invokeLater(viewer); + } + + public static void printUsage(String additional) { + System.out + .println("Usage: java -jar (progfilename) [hostname [port_number]] [Options]?n" + + " or?n" + + " java -jar (progfilename) [Options]?n" + + " or?n java -jar (progfilename) -help?n to view this help?n?n" + + "Where Options are:?n" + + additional + + "?nOptions format: -optionName=optionValue. Ex. -host=localhost -port=5900 -viewonly=yes?n" + + "Both option name and option value are case insensitive."); + } + + public CuiViewer() { + logger = Logger.getLogger(getClass().getName()); + connectionParams = new ConnectionParams(); + settings = ProtocolSettings.getDefaultSettings(); + uiSettings = new UiSettings(); + } + + private CuiViewer(Parser parser) { + this(); + setLoggingLevel(parser.isSet(ParametersHandler.ARG_VERBOSE) ? Level.FINE + : parser.isSet(ParametersHandler.ARG_VERBOSE_MORE) ? Level.FINER + : Level.INFO); + + paramsMask = ParametersHandler.completeSettingsFromCLI(parser, + connectionParams, settings, uiSettings); + passwordFromParams = parser.getValueFor(ParametersHandler.ARG_PASSWORD); + logger.info("TightVNC Viewer version " + ver()); + isApplet = false; + } + + private void setLoggingLevel(Level levelToSet) { + final Logger appLogger = Logger.getLogger("com.glavsoft"); + appLogger.setLevel(levelToSet); + ConsoleHandler ch = null; + for (Handler h : appLogger.getHandlers()) { + if (h instanceof ConsoleHandler) { + ch = (ConsoleHandler) h; + break; + } + } + if (null == ch) { + ch = new ConsoleHandler(); + appLogger.addHandler(ch); + } + // ch.setFormatter(new SimpleFormatter()); + ch.setLevel(levelToSet); + } + + @Override + public void windowClosing(WindowEvent e) { + if (e != null && e.getComponent() != null) { + final Window w = e.getWindow(); + if (w != null) { + w.setVisible(false); + w.dispose(); + } + } + closeApp(); + } + + /** + * Closes App(lication) or stops App(let). + */ + public void closeApp() { + /* nop */ + } + + private boolean checkJsch() { + try { + Class.forName("com.jcraft.jsch.JSch"); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + + @Override + public void run() { + final boolean hasJsch = checkJsch(); + final boolean allowInteractive = allowAppletInteractiveConnections + || !isApplet; + connectionPresenter = new ConnectionPresenter(hasJsch, allowInteractive); + connectionPresenter.addModel("ConnectionParamsModel", connectionParams); + + + /* + * SwingViewerWindowFactory viewerWindowFactory = new + * SwingViewerWindowFactory( isSeparateFrame, isApplet, this); + * + * connectionPresenter.setConnectionWorkerFactory(new + * SwingConnectionWorkerFactory( connectionView.getFrame(), + * passwordFromParams, connectionPresenter, viewerWindowFactory, + * myRfb)); + */ + + + connectionPresenter.setConnectionWorkerFactory( + new SwingConnectionWorkerFactory(null, passwordFromParams, connectionPresenter, null, myRfb)); + connectionPresenter.setCuiVersion(true); + connectionPresenter.startConnection(settings, uiSettings, paramsMask); + } + + @Override + public void windowOpened(WindowEvent e) { /* nop */ + } + + @Override + public void windowClosed(WindowEvent e) { /* nop */ + } + + @Override + public void windowIconified(WindowEvent e) { /* nop */ + } + + @Override + public void windowDeiconified(WindowEvent e) { /* nop */ + } + + @Override + public void windowActivated(WindowEvent e) { /* nop */ + } + + @Override + public void windowDeactivated(WindowEvent e) { /* nop */ + } + + public static String ver() { + final InputStream mfStream = Viewer.class.getClassLoader() + .getResourceAsStream("META-INF/MANIFEST.MF"); + if (null == mfStream) { + System.out.println("No Manifest file found."); + return "-1"; + } + try { + Manifest mf = new Manifest(); + mf.read(mfStream); + Attributes atts = mf.getMainAttributes(); + return atts.getValue(Attributes.Name.IMPLEMENTATION_VERSION); + } catch (IOException e) { + return "-2"; + } + } + + public void setType(TreeConnectionManager treeConnectionManager, + MyRfbProtoClient myRfbProtoClient) { + // must write + } + + public void setSocket(Socket soc) { + setConnectionParam(soc.getInetAddress().getHostAddress(), soc.getPort()); + // Thread accThread = new Thread(new AcceptThread(myRfb, + // soc.getPort())); + // accThread.start(); + } + + public void setOpenPort(int parseInt) { + // TODO Auto-generated method stub + + } + + public void setTeminationType(boolean b) { + myRfb.setTerminationType(b); + } + + public void startViewer() { + CuiViewer viewer = new CuiViewer(); + MyRfbProtoClient rfb = new MyRfbProtoClient(); + CreateConnectionParam cp = new CreateConnectionParam(rfb); + cp.communicationToProxy(); + cp.createConnectionParam(viewer); + viewer.isTreeVNC = true; + rfb.setViewer(viewer); + viewer.myRfb = rfb; + SwingUtilities.invokeLater(viewer); + } + + public void startViewer(String hostName, boolean cui) { + CuiViewer viewer = new CuiViewer(); + viewer.cuiVersion = cui; + MyRfbProtoClient rfb = new MyRfbProtoClient(); + CreateConnectionParam cp = new CreateConnectionParam(rfb); + cp.setHostName(hostName); + cp.createConnectionParam(viewer); + viewer.isTreeVNC = true; + rfb.setViewer(viewer); + rfb.setCuiVersion(true); + viewer.myRfb = rfb; + SwingUtilities.invokeLater(viewer); + } + + public void setConnectionParam(String hostName, int port) { + connectionParams.setHostName(hostName); + connectionParams.setPortNumber(port); + } + + public void setIsTreeVNC(boolean flag) { + isTreeVNC = flag; + } + + public MyRfbProto getRfb() { + return myRfb; + } + + public boolean getCuiVersion() { + return cuiVersion; + } +}