Mercurial > hg > Applications > TightVNC_orginal
annotate src/main/java/jp/ac/u_ryukyu/treevnc/server/VncProxyService.java @ 38:c2f0b6907448
add doc directory
author | one |
---|---|
date | Thu, 27 Sep 2012 19:32:25 +0900 |
parents | 1454d6fe96c1 |
children | 3c072f2f39bb |
rev | line source |
---|---|
12 | 1 package jp.ac.u_ryukyu.treevnc.server; |
11 | 2 |
3 import java.awt.event.*; | |
4 import java.io.*; | |
38 | 5 import java.net.Socket; |
6 import java.net.UnknownHostException; | |
7 import java.util.LinkedList; | |
11 | 8 import java.util.logging.Logger; |
9 | |
31 | 10 import jp.ac.u_ryukyu.treevnc.AcceptThread; |
11 | |
11 | 12 |
13 | 13 |
11 | 14 import com.glavsoft.exceptions.AuthenticationFailedException; |
15 import com.glavsoft.exceptions.FatalException; | |
16 import com.glavsoft.exceptions.TransportException; | |
17 import com.glavsoft.exceptions.UnsupportedProtocolVersionException; | |
18 import com.glavsoft.exceptions.UnsupportedSecurityTypeException; | |
19 import com.glavsoft.rfb.IChangeSettingsListener; | |
20 import com.glavsoft.rfb.IRfbSessionListener; | |
21 import com.glavsoft.rfb.protocol.Protocol; | |
22 import com.glavsoft.rfb.protocol.ProtocolSettings; | |
23 import com.glavsoft.transport.Reader; | |
24 import com.glavsoft.transport.Writer; | |
25 import com.glavsoft.viewer.ConnectionManager; | |
26 import com.glavsoft.viewer.Viewer; | |
27 import com.glavsoft.viewer.cli.Parser; | |
28 import com.glavsoft.viewer.swing.ClipboardControllerImpl; | |
29 import com.glavsoft.viewer.swing.ParametersHandler; | |
16 | 30 import com.glavsoft.viewer.swing.Surface; |
11 | 31 import com.glavsoft.viewer.swing.UiSettings; |
32 import com.glavsoft.viewer.swing.ParametersHandler.ConnectionParams; | |
33 | |
34 public class VncProxyService extends Viewer implements Runnable, | |
35 IRfbSessionListener, IChangeSettingsListener { | |
36 | |
37 /** | |
38 * | |
39 */ | |
40 private static final long serialVersionUID = 1L; | |
41 | |
12 | 42 public MyRfbProtoProxy rfb; |
37 | 43 private ConnectionManager connectionManager; |
38 | 44 private VncProxyService vps; |
45 private CreateThread createThread; | |
46 AcceptClient aClient; | |
47 private int port; | |
13 | 48 // public AcceptClient acc; |
11 | 49 public VncProxyService(Parser parser) { |
50 this(); | |
51 ParametersHandler.completeSettingsFromCLI(parser, connectionParams, settings, uiSettings); | |
52 showControls = ParametersHandler.showControls; | |
53 passwordFromParams = parser.getValueFor(ParametersHandler.ARG_PASSWORD); | |
54 logger.info("TightVNC Viewer version " + ver()); | |
55 isApplet = false; | |
56 } | |
57 | |
58 public VncProxyService() { | |
38 | 59 rfb = new MyRfbProtoProxy(); |
60 aClient = new AcceptClient(); | |
37 | 61 connectionManager = new ConnectionManager(this, isApplet); |
11 | 62 connectionParams = new ParametersHandler.ConnectionParams(); |
63 settings = ProtocolSettings.getDefaultSettings(); | |
64 uiSettings = super.uiSettings; | |
65 } | |
66 | |
67 boolean isClient = false; | |
68 public static final int DEFAULT_PORT = 5900; | |
69 public static Logger logger = Logger.getLogger("com.glavsoft"); | |
70 private boolean forceReconnection; | |
71 private String reconnectionReason; | |
72 private ConnectionParams connectionParams; | |
73 private final ProtocolSettings settings; | |
74 private final UiSettings uiSettings; | |
13 | 75 private AcceptThread acceptThread; |
76 private GetBroadCastProxy getCast; | |
11 | 77 |
78 | |
79 public static void main(String[] argv) { | |
80 String[] mainArgs = argv; | |
81 System.out.println(mainArgs.length); | |
82 // input into arguments Decision | |
83 | |
84 Parser parser = new Parser(); | |
85 ParametersHandler.completeParserOptions(parser); | |
86 | |
87 parser.parse(argv); | |
88 if (parser.isSet(ParametersHandler.ARG_HELP)) { | |
89 printUsage(parser.optionsUsage()); | |
90 System.exit(0); | |
91 } | |
92 VncProxyService vps = new VncProxyService(parser); | |
93 if (mainArgs.length != 0) { | |
94 for (int i = 0; i < argv.length; i++) { | |
95 vps.setArguments(mainArgs); | |
96 // write later | |
97 } | |
98 } else { | |
99 //getHostData(); | |
100 } | |
101 //SwingUtilities.invokeLater(myClient); | |
102 Thread th = new Thread(vps); | |
103 th.start(); | |
13 | 104 try { |
105 th.join(); | |
106 } catch (InterruptedException e) { | |
107 e.printStackTrace(); | |
108 } | |
38 | 109 vps.createConnectionAndStart(); |
11 | 110 } |
111 | |
112 private void setArguments(String[] mainArgs) { | |
113 } | |
114 | |
115 @Override | |
116 public void run() { | |
117 // getHostData(); | |
118 if (forceReconnection) { | |
119 connectionManager.showReconnectDialog("Connection lost", reconnectionReason); | |
120 forceReconnection = false; | |
121 } | |
122 tryAgain = true; | |
123 while (tryAgain) { | |
13 | 124 // connectionParams.hostName = arguments[0]; |
11 | 125 // workingSocket = connectionManager.connectToTreeHost(connectionParams, settings); |
35 | 126 workingSocket = connectionManager.connectToHost(connectionParams, settings, rfb); |
11 | 127 if (null == workingSocket) { |
128 closeApp(); | |
129 break; | |
130 } | |
131 logger.info("Connected"); | |
132 | |
133 try { | |
134 workingSocket.setTcpNoDelay(true); // disable Nagle algorithm | |
135 Reader reader = new Reader(workingSocket.getInputStream()); | |
136 Writer writer = new Writer(workingSocket.getOutputStream()); | |
19 | 137 // rfb.setStream(reader,writer); |
11 | 138 workingProtocol = new Protocol(reader, writer, |
139 new PasswordChooser(passwordFromParams, connectionParams, containerFrame, this), | |
140 settings); | |
141 workingProtocol.handshake(); | |
27 | 142 rfb.setProtocolContext(workingProtocol); |
38 | 143 threadSetAndStart(); |
11 | 144 // input into change parents |
145 ClipboardControllerImpl clipboardController = | |
146 new ClipboardControllerImpl(workingProtocol, settings.getRemoteCharsetName()); | |
147 clipboardController.setEnabled(settings.isAllowClipboardTransfer()); | |
148 settings.addListener(clipboardController); | |
19 | 149 surface = new Surface(workingProtocol, this, uiSettings.getScaleFactor()); // this method |
150 settings.addListener(this); | |
151 uiSettings.addListener(surface); | |
152 containerFrame = createContainer(); | |
153 connectionManager.setContainerFrame(containerFrame); | |
154 updateFrameTitle(); | |
37 | 155 containerFrame.dispose(); |
156 containerFrame = null; | |
16 | 157 workingProtocol.startNormalHandling(this, surface, clipboardController,rfb); |
20
98519d16a8c3
getInitData from ProtocolContext
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
19
diff
changeset
|
158 // rfb.setInitData(workingProtocol.getInitData()); too early |
16 | 159 // workingProtocol.startNormalHandling(this, surface, clipboardController); |
11 | 160 tryAgain = false; |
161 } catch (UnsupportedProtocolVersionException e) { | |
162 connectionManager.showReconnectDialog("Unsupported Protocol Version", e.getMessage()); | |
163 logger.severe(e.getMessage()); | |
164 } catch (UnsupportedSecurityTypeException e) { | |
165 connectionManager.showReconnectDialog("Unsupported Security Type", e.getMessage()); | |
166 logger.severe(e.getMessage()); | |
167 } catch (AuthenticationFailedException e) { | |
168 passwordFromParams = null; | |
169 connectionManager.showReconnectDialog("Authentication Failed", e.getMessage()); | |
170 logger.severe(e.getMessage()); | |
171 } catch (TransportException e) { | |
172 connectionManager.showReconnectDialog("Connection Error", "Connection Error" + ": " + e.getMessage()); | |
173 logger.severe(e.getMessage()); | |
174 } catch (IOException e) { | |
175 connectionManager.showReconnectDialog("Connection Error", "Connection Error" + ": " + e.getMessage()); | |
176 logger.severe(e.getMessage()); | |
177 } catch (FatalException e) { | |
178 connectionManager.showReconnectDialog("Connection Error", "Connection Error" + ": " + e.getMessage()); | |
179 logger.severe(e.getMessage()); | |
180 } | |
181 } | |
13 | 182 } |
183 | |
38 | 184 public void createConnectionAndStart() { |
185 port = rfb.selectPort(5999); | |
186 acceptThread = new AcceptThread(rfb, port); | |
187 Thread thread = new Thread(acceptThread); | |
188 thread.start(); | |
13 | 189 getCast = new GetBroadCastProxy(this, |
190 workingProtocol.getRemoteDesktopName(), | |
191 this.connectionParams.hostName); | |
38 | 192 thread = new Thread(getCast); |
193 thread.start(); | |
13 | 194 } |
195 | |
196 public void start_threads() { | |
197 //rfbThread.start(); | |
198 //rfb.requestThreadStart(); | |
11 | 199 } |
200 | |
34 | 201 public void proxyStart(String[] argv) { |
202 String[] mainArgs = argv; | |
203 System.out.println(mainArgs.length); | |
204 // input into arguments Decision | |
11 | 205 |
34 | 206 Parser parser = new Parser(); |
207 ParametersHandler.completeParserOptions(parser); | |
11 | 208 |
34 | 209 parser.parse(argv); |
210 if (parser.isSet(ParametersHandler.ARG_HELP)) { | |
211 printUsage(parser.optionsUsage()); | |
212 System.exit(0); | |
213 } | |
38 | 214 vps = new VncProxyService(parser); |
34 | 215 if (mainArgs.length != 0) { |
216 for (int i = 0; i < argv.length; i++) { | |
217 vps.setArguments(mainArgs); | |
218 // write later | |
219 } | |
220 } else { | |
221 //getHostData(); | |
222 } | |
223 //SwingUtilities.invokeLater(myClient); | |
224 Thread th = new Thread(vps); | |
225 th.start(); | |
226 try { | |
227 th.join(); | |
228 } catch (InterruptedException e) { | |
229 e.printStackTrace(); | |
230 } | |
38 | 231 vps.createConnectionAndStart(); |
34 | 232 } |
233 | |
234 | |
11 | 235 @Override |
236 public void destroy() { | |
237 | |
238 } | |
239 | |
240 @Override | |
241 public void windowClosing(WindowEvent e) { | |
242 if (e != null && e.getComponent() != null) { | |
243 e.getWindow().setVisible(false); | |
244 } | |
245 closeApp(); | |
246 } | |
37 | 247 |
38 | 248 private void threadSetAndStart() throws UnknownHostException, IOException { |
249 //aClient = new AcceptClient(); | |
250 createThread = new CreateThread(aClient); | |
251 Thread thread = new Thread(createThread); | |
37 | 252 thread.start(); |
38 | 253 thread = new Thread(new ChangeHost(new VncProxyService(), forceReconnection,this)); |
37 | 254 thread.start(); |
38 | 255 // createSocketAndSend(aClient.getList(),String.valueOf(port)); |
37 | 256 } |
257 | |
258 public void setConnectionManager(ConnectionManager _connectionManager) { | |
259 connectionManager = _connectionManager; | |
260 } | |
38 | 261 |
262 protected void socketClose() { | |
263 try { | |
264 workingSocket.close(); | |
265 acceptThread.flag=true; | |
266 getCast.setStopFlag(true); | |
267 //createThread.setStopFlag(true); | |
268 } catch (IOException e) {/*nop*/} | |
269 } | |
270 | |
271 @Override | |
272 public void rfbSessionStopped(final String reason) { | |
273 if (workingSocket != null && workingSocket.isConnected()) { | |
274 try { | |
275 workingSocket.close(); | |
276 } catch (IOException e) { /*nop*/ } | |
277 } | |
278 } | |
279 | |
280 private void createSocketAndSend(LinkedList<String> clientList,String port) throws UnknownHostException, IOException { | |
281 int i = 0; | |
282 for(String client : clientList) { | |
283 if(i!=0) { | |
284 Socket echoSocket; | |
285 echoSocket = new Socket(client, 10001); | |
286 DataOutputStream os = new DataOutputStream(echoSocket.getOutputStream()); | |
287 os.writeBytes("reconnection\n"); | |
288 os.writeBytes(port+"\n"); | |
289 os.close(); | |
290 } | |
291 i++; | |
292 } | |
293 } | |
294 | |
295 public void changeVNCServer() { | |
296 // sender and re | |
297 workingProtocol.cleanUpSession(); | |
298 } | |
11 | 299 } |