Mercurial > hg > Applications > TreeVNC
annotate src/viewer_swing/java/com/glavsoft/viewer/TreeViewer.java @ 491:13b08ea73237
fix cursor
author | oshiro |
---|---|
date | Thu, 31 Jan 2019 19:09:26 +0900 |
parents | f0bd5f2c4ba3 |
children | 3fe7e1a372df |
rev | line source |
---|---|
34 | 1 package com.glavsoft.viewer; |
2 | |
206 | 3 import jp.ac.u_ryukyu.treevnc.VncProxyService; |
34 | 4 |
260 | 5 import java.io.FileNotFoundException; |
6 import java.io.PrintStream; | |
293 | 7 import java.net.SocketException; |
8 import java.net.UnknownHostException; | |
260 | 9 |
34 | 10 public class TreeViewer { |
240 | 11 private boolean treeProxy; |
12 private boolean viewer; | |
13 private boolean cui = false; | |
14 private int width; | |
15 private int height; | |
257 | 16 private int fixingSizeWidth; |
17 private int fixingSizeHeight; | |
240 | 18 private String hostName = null; |
261 | 19 private String logFileName = null; |
240 | 20 private boolean noConnection = false; |
122
e2416a246c95
noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
89
diff
changeset
|
21 private boolean permitChangeScreen = true; |
163 | 22 private boolean showTree = false; |
240 | 23 private boolean checkDelay = false; |
241 | 24 private boolean addSerialNum = false; |
257 | 25 private boolean fixingSizeDisplay = false; |
267 | 26 private boolean logFile = false; |
27 private boolean filterSingleDisplay = false; | |
377 | 28 private boolean direct = false; |
257 | 29 |
34 | 30 |
293 | 31 public static void main(String[] args) throws SocketException, UnknownHostException { |
223 | 32 new TreeViewer().vncStart(args); |
33 } | |
34 | 34 |
293 | 35 private void vncStart(String[] args) throws SocketException, UnknownHostException { |
223 | 36 modeSelect(args); |
261 | 37 if(logFile) { |
38 PrintStream out = null; | |
39 try { | |
40 out = new PrintStream(logFileName + ".txt"); | |
41 } catch (FileNotFoundException e) { | |
42 e.printStackTrace(); | |
43 } | |
44 System.setOut(out); | |
45 } | |
223 | 46 if (treeProxy && !viewer) { |
47 // start treeManager only ( -p flag ) | |
48 VncProxyService vps = new VncProxyService(); | |
266 | 49 if(fixingSizeDisplay) |
50 setFixingSizeDisplay(vps); | |
223 | 51 rootStart(args,vps); |
52 return; | |
53 } | |
54 if (viewer) { | |
491 | 55 Viewer gui ; |
56 ViewerInterface v ; | |
57 if (!cui) { | |
58 gui = new Viewer(); | |
59 setviewonly(gui); | |
60 v = gui; | |
61 } else { | |
62 v = new CuiViewer(); | |
63 } | |
64 | |
225 | 65 setWidthAndHeight(v); |
301 | 66 // if(filterSingleDisplay) |
266 | 67 if(fixingSizeDisplay) |
257 | 68 setFixingSizeDisplay(v); |
223 | 69 if (treeProxy) { |
343 | 70 if (hostName != null) { |
377 | 71 if (direct) { |
72 rootStart(args, new VncProxyService()); | |
474 | 73 return; |
377 | 74 } else { |
75 // send whereToConnect | |
379 | 76 v.startTreeViewer(hostName, cui, addSerialNum); |
377 | 77 } |
343 | 78 } |
223 | 79 // this viewer also works as tree root ( display mode -d flag ) |
80 // start with no connection waiting server change request | |
81 rootStart(args, v); | |
82 } else { | |
379 | 83 v.startTreeViewer(hostName,cui, addSerialNum); |
399
28d67bbfa9f1
Implement SelectionPanel processing
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
379
diff
changeset
|
84 |
401
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
85 // selected "Start Display Mode" or "Start as TreeVNC Root" for start selection panel |
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
86 if (v.getRfb().getConnectionParam().isDisplayMode()) { |
400
845698fd6fb6
Remove synchronized
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
399
diff
changeset
|
87 noConnection = true; |
401
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
88 treeProxy = true; |
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
89 viewer = true; |
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
90 rootStart(args, v); |
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
91 } else if (v.getRfb().getConnectionParam().isRootMode()) { |
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
92 viewer = false; |
94c520535ef1
Fix selection panel
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
400
diff
changeset
|
93 treeProxy = true; |
400
845698fd6fb6
Remove synchronized
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
399
diff
changeset
|
94 rootStart(args, v); |
845698fd6fb6
Remove synchronized
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
399
diff
changeset
|
95 } |
223 | 96 } |
97 } | |
98 } | |
34 | 99 |
491 | 100 private void setviewonly(Viewer v) { |
101 v.settings.setViewOnly(true); | |
102 } | |
103 | |
293 | 104 public void rootStart(String[] args, ViewerInterface v) throws SocketException, UnknownHostException { |
219 | 105 v.setNoConnection(noConnection); // should we accept host name here? |
455
6f3d3da40940
fix cui and hasViewer flag
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
448
diff
changeset
|
106 v.proxyStart(args, hostName, width, height, showTree, checkDelay, addSerialNum, fixingSizeDisplay, filterSingleDisplay, viewer); |
343 | 107 if (!permitChangeScreen) v.getRfb().setPermitChangeScreen(false); |
219 | 108 v.getRfb().getAcceptThread().waitForShutdown(); |
109 } | |
110 | |
240 | 111 private void modeSelect(String[] args) { |
112 viewer = true; // default | |
113 for (int i = 0; i < args.length; i++) { | |
114 if ("-p".equals(args[i]) || "-r".equals(args[i])) { | |
115 // no display. behave as root. | |
116 // relay rfb update to clients. | |
117 treeProxy = true; | |
118 viewer = false; | |
79 | 119 } else if ("-d".equals(args[i])) { |
120 // behave as root with display. | |
121 // use this on main display such as large tv. | |
240 | 122 noConnection = true; |
79 | 123 treeProxy = true; |
124 viewer = true; | |
125 } else if ("--cui".equals(args[i])) { | |
126 // use cui viewer | |
127 cui = true; | |
240 | 128 } else if ("-v".equals(args[i]) || "-c".equals(args[i])) { |
129 // behave as client. | |
130 // open display and connect to some tree node. | |
131 viewer = true; | |
132 } else if ("--version".equals(args[i])) { | |
133 System.out.println("version :" + Viewer.ver()); | |
134 System.exit(0); | |
122
e2416a246c95
noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
89
diff
changeset
|
135 } else if ("-ns".equals(args[i])) { |
e2416a246c95
noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
89
diff
changeset
|
136 permitChangeScreen = false; |
e2416a246c95
noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
89
diff
changeset
|
137 } else if ("--noScreenChange".equals(args[i])) { |
e2416a246c95
noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
89
diff
changeset
|
138 permitChangeScreen = false; |
273
5bab82abcc4f
fix --fixSize option name and input option arguments at console.
oc
parents:
271
diff
changeset
|
139 } else if ("--fixSize".equals(args[i])) { |
240 | 140 // retina display too large for TreeVNC. |
141 // restrict display size. | |
273
5bab82abcc4f
fix --fixSize option name and input option arguments at console.
oc
parents:
271
diff
changeset
|
142 fixingSizeWidth = Integer.parseInt(args[++i]); |
5bab82abcc4f
fix --fixSize option name and input option arguments at console.
oc
parents:
271
diff
changeset
|
143 fixingSizeHeight = Integer.parseInt(args[++i]); |
257 | 144 fixingSizeDisplay = true; |
240 | 145 } else if ("--width".equals(args[i])) { |
146 width = Integer.parseInt(args[i+1]); | |
147 i++; | |
148 } else if ("--height".equals(args[i])) { | |
149 height = Integer.parseInt(args[i+1]); | |
150 i++; | |
151 } else if ("--host".equals(args[i])) { | |
152 hostName = args[++i]; | |
339
4713559f5838
if have a parent, send serverChangeRequest and whereToConnect
oc
parents:
301
diff
changeset
|
153 treeProxy = true; |
377 | 154 } else if ("--direct".equals(args[i])) { |
155 // direct connect without whereToConnect message | |
156 // use is --host | |
157 direct = true; | |
240 | 158 } else if ("--showTree".equals(args[i])) { |
159 // show Tree node. | |
160 showTree = true; | |
161 } else if ("--checkDelay".equals(args[i])) { | |
241 | 162 // check flow of data delay. |
240 | 163 checkDelay = true; |
241 | 164 } else if ("--addSerialNum".equals(args[i])) { |
165 // add data serial number. | |
166 addSerialNum = true; | |
261 | 167 } else if ("--logFile".equals(args[i])) { |
168 // add log file. | |
169 logFile = true; | |
170 try { | |
171 this.logFileName = args[++i]; | |
172 } catch (ArrayIndexOutOfBoundsException e) { | |
271 | 173 // not input file name. |
261 | 174 System.out.println("Please put the log file name. If you do not put file name, set file name logFile.txt"); |
175 } | |
176 if (logFileName == null) { | |
177 logFileName = "logFile"; | |
178 } else if ("-".equals(logFileName.substring(0,1))) { | |
271 | 179 // not input file name. |
180 // to continue to add option. | |
261 | 181 System.out.println("Please put the log file name. If you do not put file name, set file name logFile.txt"); |
182 logFileName = "logFile"; | |
183 i++; | |
184 } else { | |
185 i++; | |
186 } | |
240 | 187 } else { |
188 System.out.println("(default) TreeVNCClient\n" | |
271 | 189 + "-v or -c: View shared screen.\n" |
190 + "-p: (proxy) Share my screen and behave as tree root.\n" | |
191 + "-ns --noScreenChange: Viewers cannot change screen to thiers (default permite screen change)\n" | |
192 + "-d: Show shared screen and behave as tree root.\n" | |
193 + "-r: Connect to fix to specified host and port.\n" | |
194 + "--host hostname: Set host name.\n" | |
195 + "--retina: Limit screen size for very large display.\n" | |
196 + "--width w: Set display width.\n" | |
197 + "--height h: Set display height.\n" | |
198 + "--showTree: Show connected tree node.\n" | |
199 + "--checkDelay: Check speed flow of data each node.\n" | |
200 + "--logFile logFileName: Set log file name.\n" | |
201 + "--fixingSize w h: Fix share screen size.\n" | |
202 + "--addSerialNum: Check lost data.\n"); | |
376 | 203 System.exit(0); |
240 | 204 } |
205 } | |
206 } | |
71
36e116795e0c
option -d mode is behave as root with display. use this on main display such as large tv.
one
parents:
65
diff
changeset
|
207 |
225 | 208 public void setWidthAndHeight(ViewerInterface v) { |
209 if(width != 0 || height != 0) { | |
210 v.setWidth(width); | |
211 v.setHeight(height); | |
212 } | |
257 | 213 } |
214 | |
215 public void setFixingSizeDisplay(ViewerInterface v) { | |
216 v.setFixingSize(fixingSizeWidth, fixingSizeHeight); | |
217 } | |
71
36e116795e0c
option -d mode is behave as root with display. use this on main display such as large tv.
one
parents:
65
diff
changeset
|
218 |
240 | 219 private boolean isInteger(String num) { |
220 try { | |
221 Integer.parseInt(num); | |
222 return true; | |
223 } catch (NumberFormatException e) { | |
224 return false; | |
225 } | |
226 } | |
34 | 227 } |