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