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