annotate src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java @ 419:7e811f33b99d

Adhoc implement multi display
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Fri, 01 Jan 2016 02:39:25 +0900
parents 0543c380308c
children 0ad52aac3bc3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
758d025ee24b add TextBox.java
one
parents: 31
diff changeset
1 package jp.ac.u_ryukyu.treevnc;
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
2
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
3 import java.io.IOException;
206
2b3eb4a9492f MyRfbProto reorganization
oc
parents: 205
diff changeset
4 import java.io.OutputStream;
232
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
5 import java.io.UnsupportedEncodingException;
291
a310be14d757 send rtp+sound packet(client node version).
oc
parents: 290
diff changeset
6 import java.net.*;
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
7 import java.nio.ByteBuffer;
109
457f9dfbf7ce minor fix.
oc
parents: 107
diff changeset
8 import java.nio.ByteOrder;
369
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
9 import java.util.Enumeration;
232
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
10 import java.util.Iterator;
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
11 import java.util.LinkedList;
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
12 import java.util.concurrent.atomic.AtomicInteger;
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
13 import java.util.zip.DataFormatException;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
14 import java.util.zip.Deflater;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
15 import java.util.zip.Inflater;
150
925fb2090282 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 147
diff changeset
16
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
17 import com.glavsoft.exceptions.TransportException;
107
660b296d4f75 send change screen command throw the tree.
oc
parents: 103
diff changeset
18 import com.glavsoft.rfb.client.ClientToServerMessage;
96
76e49dd9c9c5 Client resize without reconnection
oc
parents: 94
diff changeset
19 import com.glavsoft.rfb.encoding.EncodingType;
264
83d0256a8808 add fixing display filter.
oc
parents: 257
diff changeset
20 import com.glavsoft.rfb.encoding.decoder.FramebufferUpdateRectangle;
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
21 import com.glavsoft.rfb.protocol.Protocol;
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
22 import com.glavsoft.rfb.protocol.ProtocolContext;
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
23 import com.glavsoft.transport.Reader;
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
24 import com.glavsoft.transport.Writer;
389
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
25 import com.glavsoft.viewer.ConnectionPresenter;
153
e68dfd1972ac fix bad names.
oc
parents: 150
diff changeset
26 import com.glavsoft.viewer.ViewerInterface;
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
27 import com.glavsoft.viewer.swing.ConnectionParams;
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
28
124
214d4f206431 add TreeVNC command number.
oc
parents: 123
diff changeset
29
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
30 public class TreeRFBProto {
231
0e0e6744432c get new nodeList for checkDelay.
oc
parents: 230
diff changeset
31
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
32 final static int FramebufferUpdateRequest = 3;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
33 final static int CheckDelay = 11;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
34 protected final static int FramebufferUpdate = 0;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
35 protected ProtocolContext context;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
36 private int clients = 0;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
37 public MulticastQueue<LinkedList<ByteBuffer>> multicastqueue = new MulticastQueue<LinkedList<ByteBuffer>>();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
38 private RequestScreenThread rThread;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
39 public int acceptPort = 0;
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
40 private String myAddress;
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
41 private long counter = 0; // packet serial number
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
42 public ServerSocket servSock;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
43 private static final int INFLATE_BUFSIZE = 1024 * 100;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
44 private Inflater inflater = new Inflater();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
45 private Deflater deflater = new Deflater();
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
46 ViewerInterface viewer;
341
1d9a4099ad44 change hasParent value.
oc
parents: 340
diff changeset
47 private short id = 0; // my tree node id ( = 0 in root ), -1 means no parent
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
48 private TreeVncCommandChannelListener acceptThread;
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
49 private TreeRootFinderListener getCast;
176
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
50 private CreateConnectionParam cp;
205
614db20d8fab try to separate Network management
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 204
diff changeset
51 private TreeVNCNetwork nets = new TreeVNCNetwork();
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
52 private TreeVncRootSelectionPanel rootSelectionPanel;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
53 private String vncInterface;
418
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 417
diff changeset
54 private TreeManagement treeManager;
231
0e0e6744432c get new nodeList for checkDelay.
oc
parents: 230
diff changeset
55 public LinkedList<TreeVNCNode> nodeList;
267
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
56
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
57 protected boolean readyReconnect = false;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
58 private boolean cuiVersion;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
59 private boolean permitChangeScreen = true;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
60 private boolean leader;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
61 private boolean hasViewer = false;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
62 private boolean normalTermination;
402
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
63
267
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
64 private boolean isTreeManager;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
65 public boolean showTreeNode = false;
240
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
66 public boolean checkDelay = false;
241
b21a7842a41d add option addSerialNum.
oc
parents: 240
diff changeset
67 public boolean addSerialNum = false;
257
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
68 public boolean fixingSize = false;
267
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
69 public boolean filterSingleDisplay = false;
257
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
70 public int frameSizeWidth;
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
71 public int frameSizeHeight;
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
72 public int fixingSizeWidth;
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
73 public int fixingSizeHeight;
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
74
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
75
306
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
76 private int singleWidth = 0;
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
77 private int singleHeight = 0;
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
78 private int shareScreenNumber;
293
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
79 private DatagramSocket socket = null;
275
0f9b3de45fb2 set main display size.
oc
parents: 270
diff changeset
80
306
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
81 private byte[] originalInitData = null;
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
82 private boolean childrenMulticast = true;
411
4a925e55afd6 Enable auto Fit Screen
innparusu
parents: 410
diff changeset
83 private int retinaScale = 1;
306
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
84
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
85
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
86 private int x;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
87 private int y;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
88
418
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 417
diff changeset
89
327
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
90 public TreeRFBProto(boolean isTreeManager, ViewerInterface viewer) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
91 rThread = new RequestScreenThread(this);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
92 nets.setMyRfb(this);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
93 this.isTreeManager = isTreeManager;
327
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
94 this.viewer = viewer;
302
7ef19658eb41 add createOriginalInitData().
oc
parents: 301
diff changeset
95 // this.socket = createSocket();
402
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
96 startTreeRootFindThread();
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
97 }
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
98
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
99 public void startTreeRootFindThread() {
327
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
100 if(isTreeManager()) {
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
101 getCast = new TreeRootFinderListener(viewer);
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
102 Thread treeRootFindThread = new Thread(getCast, "tree-root-find-listener");
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
103 treeRootFindThread.start();
293c35aa902b add error message, add assure stream close, delete firstTime value in TreeRFBProto.
oc
parents: 325
diff changeset
104 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
105 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
106
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
107 public boolean isTreeManager() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
108 return isTreeManager;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
109 }
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
110
402
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
111 public void setIsTreeManager(boolean isTreeManager) {
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
112 this.isTreeManager = isTreeManager;
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
113 }
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
114
378
60abae693629 Compare SerialNumber flag
innparusu
parents: 373
diff changeset
115 public boolean isAddSerialNum() {
60abae693629 Compare SerialNumber flag
innparusu
parents: 373
diff changeset
116 return addSerialNum;
60abae693629 Compare SerialNumber flag
innparusu
parents: 373
diff changeset
117 }
60abae693629 Compare SerialNumber flag
innparusu
parents: 373
diff changeset
118
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
119 public ProtocolContext getContext() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
120 return context;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
121 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
122
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
123 /**
402
73c96a1d4a3a Fix wasteful thread start
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 399
diff changeset
124 * handle new client accept
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
125 * it also handle TreeVNC Command
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
126 * @param os
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
127 * @param is
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
128 * @throws IOException
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
129 * @throws TransportException
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
130 */
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
131 public void newClient(final Writer os, final Reader is) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
132 final int myId = clients;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
133 final MulticastQueue.Client<LinkedList<ByteBuffer>> c = multicastqueue.newClient();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
134 final AtomicInteger writerRunning = new AtomicInteger();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
135 writerRunning.set(1);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
136 /**
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
137 * Timeout thread. If a client is suspended, it has top of queue
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
138 * indefinitely, which caused memory overflow. After the timeout, we
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
139 * poll the queue and discard it. Start long wait if writer is running.
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
140 */
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
141 final Runnable timer = new Runnable() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
142 public void run() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
143 int count = 0;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
144 for (;;) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
145 long timeout = 50000 / 8;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
146 try {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
147 synchronized (this) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
148 int state, flag;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
149 writerRunning.set(0);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
150 wait(timeout);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
151 flag = 0;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
152 while ((state = writerRunning.get()) == 0) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
153 c.poll(); // discard, should be timeout
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
154 count++;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
155 if (flag == 0) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
156 System.out.println("Discarding " + myId
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
157 + " count=" + count);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
158 flag = 1;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
159 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
160 wait(10); // if this is too short, writer cannot
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
161 // take the poll, if this is too
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
162 // long, memory will overflow...
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
163 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
164 if (flag == 1)
328
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 327
diff changeset
165 System.out.println("Resuming " + myId + " count=" + count);
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
166 if (state != 1) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
167 System.out.println("Client died " + myId);
328
1a2ab6bd5ba3 add function lost child node, remove deadChild nodeList.
oc
parents: 327
diff changeset
168 System.out.println("task stop");
330
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
169
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
170 String rootHostName = null;
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
171 int rootHostPort = 0;
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
172 String myHostName = null;
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
173 int myHostPort = 0;
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
174
385
b0be610bc4db Set reconnectingID
innparusu
parents: 384
diff changeset
175 if (!isTreeManager) {
330
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
176 rootHostName = getConnectionParam().getHostName();
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
177 rootHostPort = getConnectionParam().getPort();
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
178 myHostName = getMyAddress();
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
179 myHostPort = getAcceptPort();
385
b0be610bc4db Set reconnectingID
innparusu
parents: 384
diff changeset
180 TreeVncProtocol echo = new TreeVncProtocol(rootHostName, rootHostPort);
b0be610bc4db Set reconnectingID
innparusu
parents: 384
diff changeset
181 echo.lostChild(myHostName, myHostPort, myId);
330
9d1ed0099350 root send lost child, hide function lost parent
oc
parents: 329
diff changeset
182 }
385
b0be610bc4db Set reconnectingID
innparusu
parents: 384
diff changeset
183 clients--;
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
184 break;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
185 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
186 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
187 } catch (InterruptedException e) {
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
188 e.printStackTrace();
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
189 System.out.println("timer thread interrupt.");
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
190 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
191 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
192 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
193 };
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
194 new Thread(timer, "timer-discard-multicastqueue").start();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
195 /**
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
196 * handle command from lower node
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
197 */
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
198 final Runnable reader = new Runnable() {
122
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
199 public void run() {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
200 for (;;) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
201 try {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
202 final byte b[] = new byte[4096];
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
203 final int c = is.readByte(b);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
204 if (c <= 0)
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
205 throw new IOException();
290
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
206 // case of root node.
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
207 if (isTreeManager()) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
208 if (b[0] == ClientToServerMessage.SERVER_CHANGE_REQUEST) {
335
49e25659ad05 remove socketClose, close unused viewer -d mode.
oc
parents: 334
diff changeset
209 viewer.setVisible(false);
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
210 if (permitChangeScreen()) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
211 ByteBuffer buf = ByteBuffer.wrap(b);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
212 buf.order(ByteOrder.BIG_ENDIAN);
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
213 buf.get(); // padding
257
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
214 buf.get();
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
215 short id = buf.getShort();
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
216 int length = buf.getInt();
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
217 if (length == 0)
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
218 continue;
257
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
219 byte[] byteAddress = new byte[length];
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
220 buf.get(byteAddress);
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
221 String newHostName = new String(byteAddress, "UTF-8");
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
222 int x = buf.getInt();
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
223 int y = buf.getInt();
257
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
224 int frameSizeWidth = buf.getInt();
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
225 int frameSizeHeight = buf.getInt();
340
fd529c51095f add port ScreenChangeRequest value.
oc
parents: 339
diff changeset
226 int port = buf.getInt();
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
227 int shareScreenNumber = buf.getInt();
410
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
228 int scale = buf.getInt();
340
fd529c51095f add port ScreenChangeRequest value.
oc
parents: 339
diff changeset
229 System.out.println("Root server change request :" + newHostName + " : " + port);
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
230 changeVNCServer(viewer, newHostName, port, x, y, frameSizeWidth, frameSizeHeight, shareScreenNumber, scale, id, is, os);
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
231 } else {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
232 continue;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
233 }
290
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
234 } else if (b[0] == ClientToServerMessage.READY_SHARE_SOUND) {
293
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
235 int rtpPort = selectPort(ConnectionParams.DEFAULT_RTP_PORT);
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
236 InetAddress hostname = InetAddress.getLocalHost();
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
237 ReceiveSound receiveSound = new ReceiveSound(socket);
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
238 Thread receiveSoundThread = new Thread(receiveSound, "receive-sound");
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
239 receiveSoundThread.start();
230
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
240 } else if (b[0] == ClientToServerMessage.CHECK_DELAY_REPLY) {
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
241 ByteBuffer buf = ByteBuffer.wrap(b);
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
242 buf.order(ByteOrder.BIG_ENDIAN);
234
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
243 buf.getShort();
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
244 Long time = buf.getLong();
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
245 int port = buf.getInt();
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
246 int addressLength = buf.getInt();
414
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
247 int dataLen = buf.getInt();
234
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
248 byte[] byteAddress = new byte[addressLength];
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
249 buf.get(byteAddress);
8479ad028ec7 fix checkdelay send and get.
oc
parents: 233
diff changeset
250 String address = new String(byteAddress, "UTF-8");
235
15e66adbb8bb get checkdelay nodeNum.
oc
parents: 234
diff changeset
251 int nodeNum = getNodeNum(port, address);
419
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
252 if (nodeNum != 0) {
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
253 Long delay = System.currentTimeMillis() - time;
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
254 if (delay > 3000) {
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
255 TreeVNCNode deadNode = nodeList.get(nodeNum);
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
256 treeManager.moveLastNodeToLostNodePosition(deadNode.getTreeNum());
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
257 treeManager.lostNodeConnection(deadNode);
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
258 treeManager.showTreeNode();
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
259 }
7e811f33b99d Adhoc implement multi display
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 418
diff changeset
260 System.out.println(System.currentTimeMillis() + " : receive checkDelay : nodeNum" + nodeNum + ", port : " + port + ", address : " + address + ", delay : " + delay + ", size : " + dataLen);
418
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 417
diff changeset
261 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
262 }
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
263 // case of client node.
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
264 } else if (b[0] == ClientToServerMessage.SERVER_CHANGE_REQUEST) {
295
71d24f7b3b3b fix send ClientToServerMessage
oc
parents: 293
diff changeset
265 ClientToServerMessage serverChangeRequest = new ClientToServerMessage() {
113
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
266 @Override
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
267 public void send(Writer writer)
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
268 throws TransportException {
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
269 writer.write(b, 0, c);
113
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
270 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
271 };
295
71d24f7b3b3b fix send ClientToServerMessage
oc
parents: 293
diff changeset
272 context.sendMessage(serverChangeRequest);
301
ae7deb002b5f send and receive single display size
oc
parents: 298
diff changeset
273 } else if (b[0] == ClientToServerMessage.REQUEST_SINGLE_DISPLAY_SIZE) {
295
71d24f7b3b3b fix send ClientToServerMessage
oc
parents: 293
diff changeset
274 ClientToServerMessage requestSingeDisplayWidth = new ClientToServerMessage() {
280
9c5874d0f37e fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents: 277
diff changeset
275 @Override
9c5874d0f37e fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents: 277
diff changeset
276 public void send(Writer writer)
9c5874d0f37e fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents: 277
diff changeset
277 throws TransportException {
9c5874d0f37e fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents: 277
diff changeset
278 writer.write(b, 0, c);
9c5874d0f37e fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents: 277
diff changeset
279 }
9c5874d0f37e fix adjustHdSizeButton button, this button send REQUEST_SINGLE_DISPLAY_WIDTH
oc
parents: 277
diff changeset
280 };
295
71d24f7b3b3b fix send ClientToServerMessage
oc
parents: 293
diff changeset
281 context.sendMessage(requestSingeDisplayWidth);
290
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
282 } else if (b[0] == ClientToServerMessage.READY_SHARE_SOUND) {
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
283 ClientToServerMessage readyShareSound = new ClientToServerMessage() {
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
284 @Override
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
285 public void send(Writer writer)
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
286 throws TransportException {
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
287 writer.write(b, 0, c);
290
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
288 }
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
289 };
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
290 context.sendMessage(readyShareSound);
230
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
291 } else if (b[0] == ClientToServerMessage.CHECK_DELAY_REPLY) {
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
292 ClientToServerMessage checkDelayReply = new ClientToServerMessage() {
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
293 @Override
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
294 public void send(Writer writer)
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
295 throws TransportException {
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
296 writer.write(b, 0, c);
230
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
297 }
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
298 };
f4ea9ff04741 reply checkdelay
oc
parents: 229
diff changeset
299 context.sendMessage(checkDelayReply);
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
300 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
301 } catch (Exception e) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
302 try {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
303 writerRunning.set(2);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
304 os.close();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
305 is.close();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
306 break;
367
0e3af3c8b771 Add Exception messeges
innparusu
parents: 359
diff changeset
307 } catch (Exception e1) {
0e3af3c8b771 Add Exception messeges
innparusu
parents: 359
diff changeset
308 System.out.println("cannot close ClientToServerMessage "+e1);
0e3af3c8b771 Add Exception messeges
innparusu
parents: 359
diff changeset
309
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
310 }
367
0e3af3c8b771 Add Exception messeges
innparusu
parents: 359
diff changeset
311 System.out.println("cannot read ClientToServerMessage "+e);
0e3af3c8b771 Add Exception messeges
innparusu
parents: 359
diff changeset
312
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
313 return;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
314 }
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
315
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
316 /*
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
317 // あとで検討
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
318 } catch (TransportException e) {
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
319
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
320 }
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
321 */
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
322 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
323 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
324 };
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
325 /**
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
326 * send packets to a client (one thread for each client )
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
327 */
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
328 Runnable sender = new Runnable() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
329 public void run() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
330 writerRunning.set(1);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
331 try {
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
332 requestThreadNotify(); // send full screen request via fullScreenRequestThread
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
333
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
334 // after this, we discard upward packet.
239
d655db005535 create sendCheckDelay Socket.
oc
parents: 237
diff changeset
335 new Thread(reader, "upward-packet-processing").start();
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
336
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
337 for (;;) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
338 LinkedList<ByteBuffer> bufs = c.poll();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
339 int inputIndex = 0;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
340 ByteBuffer header = bufs.get(inputIndex);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
341 if (header == null)
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
342 continue;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
343 writeToClient(os, bufs, inputIndex);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
344 writerRunning.set(1); // yes my client is awaking.
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
345 if (!childrenMulticast) {
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
346 for (;;) {
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
347 LinkedList<ByteBuffer> flag = c.poll();
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
348 if (flag.size() == 0) {
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
349 break;
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
350 }
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
351 }
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
352 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
353 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
354 } catch (Exception e) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
355 try {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
356 writerRunning.set(2);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
357 os.close();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
358 } catch (IOException e1) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
359 System.out.println("root writer close faild :" + e1);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
360 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
361 System.out.println("root writer faild :" + e);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
362 /* if socket closed cliList.remove(newCli); */
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
363 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
364 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
365 public void writeToClient(final Writer os,
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
366 LinkedList<ByteBuffer> bufs, int inputIndex)
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
367 throws TransportException {
354
7ef4ac588459 remove flag in writeToClinet
oc
parents: 353
diff changeset
368 while (inputIndex < bufs.size()) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
369 ByteBuffer b = bufs.get(inputIndex++);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
370 os.write(b.array(), b.position(), b.limit());
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
371 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
372 os.flush();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
373 multicastqueue.heapAvailable();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
374 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
375 };
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
376 clients++;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
377 new Thread(sender, "writer-to-lower-node").start();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
378 }
157
7cea8789387b thread base command listening loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 153
diff changeset
379
122
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
380 public boolean permitChangeScreen() {
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
381 return permitChangeScreen;
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
382 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
383
122
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
384
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
385 public void setPermitChangeScreen(boolean v) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
386 permitChangeScreen = v;
122
e2416a246c95 noScreenChange flag on command line ( should be on panel also )
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 120
diff changeset
387 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
388
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
389 public void requestThreadNotify() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
390 rThread.reStart();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
391 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
392
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
393
28
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
394 public void setProtocolContext(Protocol workingProtocol) {
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
395 context = workingProtocol;
18fad65bc447 Create MyRfbProto.java
one
parents:
diff changeset
396 }
29
57eb5575e6c4 MyRfbProto for client and proxy.
one
parents: 28
diff changeset
397
134
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
398 public Socket accept() throws IOException {
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
399 return servSock.accept();
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
400 }
31
872d9bcbfe56 Before changing the Viewer.
one
parents: 29
diff changeset
401
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
402 public int selectPort(int p) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
403 int port = p;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
404 while (true) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
405 try {
134
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
406 servSock = new ServerSocket(port);
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
407 acceptPort = port;
181
9c02b5a72bf9 fix root myAddress.
oc
parents: 179
diff changeset
408 myAddress = "127.0.0.1";
207
b31903e5b02d rename myRFBProto
oc
parents: 206
diff changeset
409 nets.getNetworkInterfaces();
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
410 break;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
411 } catch (BindException e) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
412 port++;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
413 continue;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
414 } catch (IOException e) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
415
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
416 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
417 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
418 System.out.println("accept port = " + port);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
419 return port;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
420 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
421
33
9d3478d11d3b Add the processing of client
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
422
9d3478d11d3b Add the processing of client
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
423
331
42fcc9419498 add error message, add lostParent case by fail to connectTo.
oc
parents: 330
diff changeset
424 public void writeFramebufferUpdateRequest(int x, int y, int w, int h, boolean incremental) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
425 byte[] b = new byte[10];
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
426
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
427 b[0] = (byte) FramebufferUpdateRequest; // 3 is FrameBufferUpdateRequest
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
428 b[1] = (byte) (incremental ? 1 : 0);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
429 b[2] = (byte) ((x >> 8) & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
430 b[3] = (byte) (x & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
431 b[4] = (byte) ((y >> 8) & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
432 b[5] = (byte) (y & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
433 b[6] = (byte) ((w >> 8) & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
434 b[7] = (byte) (w & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
435 b[8] = (byte) ((h >> 8) & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
436 b[9] = (byte) (h & 0xff);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
437 }
33
9d3478d11d3b Add the processing of client
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 32
diff changeset
438
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
439 public void setViewer(ViewerInterface v) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
440 viewer = v;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
441 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
442
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
443 public ViewerInterface getViewer() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
444 return viewer;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
445 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
446
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
447
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
448 void sendInitData(OutputStream os) throws IOException {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
449 os.write(context.getInitData());
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
450 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
451
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
452
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
453 public void setTerminationType(boolean setType) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
454 normalTermination = setType;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
455 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
456
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
457 public boolean getTerminationType() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
458 return normalTermination;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
459 }
43
6687aa9dd55e add flag for screen change in ReciverTask.java.
one
parents: 38
diff changeset
460
206
2b3eb4a9492f MyRfbProto reorganization
oc
parents: 205
diff changeset
461
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
462 public void addHostToSelectionPanel(int port, String hostname,String myHostName) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
463 if (rootSelectionPanel != null) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
464 rootSelectionPanel.checkBox(Integer.toString(port) + ":" + hostname + ":" + myHostName);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
465 rootSelectionPanel.setButton();
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
466 rootSelectionPanel.visible();
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
467 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
468 }
43
6687aa9dd55e add flag for screen change in ReciverTask.java.
one
parents: 38
diff changeset
469
399
28d67bbfa9f1 Implement SelectionPanel processing
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 398
diff changeset
470 public void createRootSelectionPanel(CreateConnectionParam cp, FindRoot getBcast) {
28d67bbfa9f1 Implement SelectionPanel processing
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 398
diff changeset
471 rootSelectionPanel = new TreeVncRootSelectionPanel(getBcast);
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
472 rootSelectionPanel.setCp(cp);
399
28d67bbfa9f1 Implement SelectionPanel processing
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 398
diff changeset
473 rootSelectionPanel.visible();
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
474 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
475
134
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
476 public void close() {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
477 // none
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
478 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
479
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
480 public int getAcceptPort() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
481 return acceptPort;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
482 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
483
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
484 public boolean getReadyReconnect() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
485 return readyReconnect;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
486 }
65
ffd7537cebfc cuiversion
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
487
ffd7537cebfc cuiversion
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 64
diff changeset
488
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
489 public boolean getCuiVersion() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
490 return cuiVersion;
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
491 }
66
84ad879891e9 dont move
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents: 65
diff changeset
492
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
493 public void setCuiVersion(boolean flag) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
494 cuiVersion = flag;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
495 }
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
496
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
497 public void readCheckDelay(Reader reader) throws TransportException {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
498
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
499 }
134
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
500
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
501 public synchronized void vncConnected(boolean ready) {
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
502 enableChildrenTransmission();
369
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
503 readyReconnect = ready;
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
504 if (ready) {
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
505 notifyAll();
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
506 }
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
507 }
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
508
369
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
509 public void printNetworkInterface() {
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
510 Socket vncSocket = viewer.getVNCSocket();
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
511 NetworkInterface ni = nets.getInterface(vncSocket);
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
512 if (ni!=null) {
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
513 vncInterface = ni.getName();
369
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
514 System.out.print("VNCNetworkInterface :" + vncInterface);
370
2c61e6d434ff Fix VncConnectionWorkers
innparusu
parents: 369
diff changeset
515 if(false) {
2c61e6d434ff Fix VncConnectionWorkers
innparusu
parents: 369
diff changeset
516 Enumeration<InetAddress> addresses = ni.getInetAddresses();
2c61e6d434ff Fix VncConnectionWorkers
innparusu
parents: 369
diff changeset
517 while (addresses.hasMoreElements()) {
2c61e6d434ff Fix VncConnectionWorkers
innparusu
parents: 369
diff changeset
518 InetAddress adr = addresses.nextElement();
2c61e6d434ff Fix VncConnectionWorkers
innparusu
parents: 369
diff changeset
519 System.out.print(" " + adr);
2c61e6d434ff Fix VncConnectionWorkers
innparusu
parents: 369
diff changeset
520 }
369
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
521 }
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
522 System.out.println();
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
523 }
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
524 }
94
75879c316796 synchronized wait for Rfb initialization in change server.
oc
parents: 89
diff changeset
525
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
526 public void sendDesktopSizeChange(short id) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
527 LinkedList<ByteBuffer> desktopSize = new LinkedList<ByteBuffer>();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
528 int width = context.getFbWidth();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
529 int height = context.getFbHeight();
304
d2a56d7d4b2d send initData secound
oc
parents: 302
diff changeset
530 if (filterSingleDisplay) {
353
eba44a31e868 remove filterSingleDisplay option in retina version
oc
parents: 352
diff changeset
531 originalInitData = createOriginalInitData(singleWidth, singleHeight, context.getRemoteDesktopName());
350
7050b41329c6 remove original InitData
oc
parents: 349
diff changeset
532 // desktopSize.add(new ChengeDesktopSize(singleWidth, singleHeight, EncodingType.INIT_DATA, originalInitData, id).getMessage());
7050b41329c6 remove original InitData
oc
parents: 349
diff changeset
533 desktopSize.add(new ChengeDesktopSize(width, height, EncodingType.INIT_DATA, context.getInitData(), id).getMessage());
305
0ee520f535c9 fix initData
oc
parents: 304
diff changeset
534 } else {
0ee520f535c9 fix initData
oc
parents: 304
diff changeset
535 desktopSize.add(new ChengeDesktopSize(width, height, EncodingType.INIT_DATA, context.getInitData(), id).getMessage());
304
d2a56d7d4b2d send initData secound
oc
parents: 302
diff changeset
536 }
380
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
537 if (addSerialNum) {
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
538 addSerialNumber(desktopSize);
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
539 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
540 multicastqueue.put(desktopSize);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
541 }
98
8f4c45c1b396 add serial number to desktop size encoding packet.
oc
parents: 97
diff changeset
542
306
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
543 public byte[] createOriginalInitData(int singleWidth, int singleHeight, String remoteDesktopName) {
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
544 TreeVncCommandChannelListener treeVncCommandChannelListener = new TreeVncCommandChannelListener(this, acceptPort);
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
545 byte[] originalInitData = treeVncCommandChannelListener.createOriginalInitData(singleWidth, singleHeight, remoteDesktopName);
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
546 return originalInitData;
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
547 }
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
548
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
549 public void addSerialNumber(LinkedList<ByteBuffer> bufs) {
242
a640cd7001e1 fix checkdelay, and fix serial number option
oc
parents: 241
diff changeset
550 ByteBuffer serialNum = multicastqueue.allocate(4+8); // addSerialNum flag + SerialNum
380
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
551 serialNum.putInt(1);
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
552 serialNum.putLong(counter++);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
553 serialNum.flip();
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
554 bufs.addFirst(serialNum);
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
555 }
102
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
556
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
557
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
558 public void resetDecoder() {
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
559 context.resetDecoder();
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
560 }
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
561
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
562 public void stopReceiverTask() {
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
563 if (context!=null) {
102
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
564 context.cleanUpSession(null);
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
565 context.getRfb().clearChildrenTransmission();
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
566 }
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
567 // cleanup zlib decoder for new VNCServer
202
22676ca0dd97 get VNC Socket.
oc
parents: 201
diff changeset
568 if (isTreeManager())
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
569 inflater = new Inflater();
102
1f7ee648e1f6 inflator in MyRfbProtoProxy should be renew to accept new VNC server socket.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
570 }
113
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
571
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
572 public void clearChildrenTransmission() {
355
82825c322044 comment out clear children transmission
oc
parents: 354
diff changeset
573 // discarding does not work now.
82825c322044 comment out clear children transmission
oc
parents: 354
diff changeset
574
82825c322044 comment out clear children transmission
oc
parents: 354
diff changeset
575 /*
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
576 // set discard flag
354
7ef4ac588459 remove flag in writeToClinet
oc
parents: 353
diff changeset
577 childrenMulticast = false;
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
578 // put gurd erement to restart multicastqueue.
354
7ef4ac588459 remove flag in writeToClinet
oc
parents: 353
diff changeset
579 multicastqueue.put(new LinkedList<ByteBuffer>());
355
82825c322044 comment out clear children transmission
oc
parents: 354
diff changeset
580 */
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
581 }
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
582
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
583 public void enableChildrenTransmission() {
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
584 // a child senderTask may skip this flag
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
585 // durling write waiting. in this case, remaining bufferes are sent.
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
586 childrenMulticast = true;
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
587 }
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
588
113
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
589 public String getMyAddress() {
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
590 return myAddress;
113
bce2ef0a2e79 use ProtocolContext.sendMessage for upward command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 112
diff changeset
591 }
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
592
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
593 /**
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
594 * gzip byte arrays
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
595 *
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
596 * @param deflater
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
597 * @param inputs
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
598 * byte data[]
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
599 * @param inputIndex
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
600 * @param outputs
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
601 * byte data[]
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
602 * @return byte length in last byte array
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
603 * @throws IOException
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
604 */
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
605 public int zip(Deflater deflater, LinkedList<ByteBuffer> inputs,
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
606 int inputIndex, LinkedList<ByteBuffer> outputs) throws IOException {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
607 int len = 0;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
608 ByteBuffer c1 = multicastqueue.allocate(INFLATE_BUFSIZE);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
609 while (inputIndex < inputs.size()) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
610 ByteBuffer b1 = inputs.get(inputIndex++);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
611 deflater.setInput(b1.array(), b1.position(), b1.remaining());
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
612 /**
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
613 * If we finish() stream and reset() it, Deflater start new gzip
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
614 * stream, this makes continuous zlib reader unhappy. if we remove
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
615 * finish(), Deflater.deflate() never flushes its output. The
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
616 * original zlib deflate has flush flag. I'm pretty sure this a kind
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
617 * of bug of Java library.
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
618 */
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
619 if (inputIndex == inputs.size())
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
620 deflater.finish();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
621 int len1 = 0;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
622 do {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
623 len1 = deflater.deflate(c1.array(), c1.position(),
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
624 c1.remaining());
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
625 if (len1 > 0) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
626 len += len1;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
627 c1.position(c1.position() + len1);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
628 if (c1.remaining() == 0) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
629 c1.flip();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
630 outputs.addLast(c1);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
631 c1 = multicastqueue.allocate(INFLATE_BUFSIZE);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
632 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
633 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
634 } while (len1 > 0 || !deflater.needsInput()); // &&!deflater.finished());
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
635 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
636 if (c1.position() != 0) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
637 c1.flip();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
638 outputs.addLast(c1);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
639 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
640 deflater.reset();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
641 return len;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
642 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
643
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
644 /**
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
645 * gunzip byte arrays
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
646 *
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
647 * @param inflater
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
648 * @param inputs
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
649 * byte data[]
182
b3426724667b fix read send data.
oc
parents: 181
diff changeset
650 * @param bytes
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
651 * byte data[]
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
652 * @return number of total bytes
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
653 * @throws IOException
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
654 */
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
655 public int unzip(Inflater inflater, LinkedList<ByteBuffer> inputs,
335
49e25659ad05 remove socketClose, close unused viewer -d mode.
oc
parents: 334
diff changeset
656 int inputIndex, byte[] bytes, int bufSize) throws DataFormatException {
182
b3426724667b fix read send data.
oc
parents: 181
diff changeset
657 int position = 0;
b3426724667b fix read send data.
oc
parents: 181
diff changeset
658 int limit = bytes.length;
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
659 while (inputIndex < inputs.size()) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
660 ByteBuffer input = inputs.get(inputIndex++);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
661 inflater.setInput(input.array(), input.position(), input.limit());
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
662 // if (inputIndex==inputs.size()) if inflater/deflater has symmetry,
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
663 // we need this
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
664 // inflater.end(); but this won't work
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
665 do {
318
d01d56038dd1 try catch unzip inflate error.
oc
parents: 317
diff changeset
666 int len0;
d01d56038dd1 try catch unzip inflate error.
oc
parents: 317
diff changeset
667 len0 = inflater.inflate(bytes, position, limit-position);
d01d56038dd1 try catch unzip inflate error.
oc
parents: 317
diff changeset
668 if (len0 > 0) {
d01d56038dd1 try catch unzip inflate error.
oc
parents: 317
diff changeset
669 position += len0;
d01d56038dd1 try catch unzip inflate error.
oc
parents: 317
diff changeset
670 if (position > limit) throw new DataFormatException();
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
671 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
672 } while (!inflater.needsInput());
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
673 }
182
b3426724667b fix read send data.
oc
parents: 181
diff changeset
674 return position;
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
675 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
676
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
677 /**
345
47e351909227 add stop children sender when change server.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 342
diff changeset
678 * Multicast framebufferUpdate to children.
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
679 * read FrameBuffferUpdate. If it is ZLE, make it ZLEE which is self contained compressed packet.
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
680 * put the packet to the multicastqueue. Then normal rendering engine read the same stream using is.reset().
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
681 * @param dataLen
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
682 * @param reader
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
683 * @throws TransportException
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
684 * @throws UnsupportedEncodingException
135
ada4d850a820 lostParent and notFoundParenet
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
685 */
264
83d0256a8808 add fixing display filter.
oc
parents: 257
diff changeset
686 public void readSendData(int dataLen, Reader reader, byte[] bytes, FramebufferUpdateRectangle rect)
232
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
687 throws TransportException, UnsupportedEncodingException {
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
688 LinkedList<ByteBuffer> bufs = new LinkedList<ByteBuffer>();
414
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
689 int headerLen = rect.getEncodingType() == EncodingType.CHECK_DELAY ? 24 : 16;
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
690 ByteBuffer header = multicastqueue.allocate(headerLen);
242
a640cd7001e1 fix checkdelay, and fix serial number option
oc
parents: 241
diff changeset
691 ByteBuffer serial = multicastqueue.allocate(4+8);
378
60abae693629 Compare SerialNumber flag
innparusu
parents: 373
diff changeset
692 if (!isTreeManager() && addSerialNum) {
242
a640cd7001e1 fix checkdelay, and fix serial number option
oc
parents: 241
diff changeset
693 reader.readBytes(serial.array(),0,4+8);
a640cd7001e1 fix checkdelay, and fix serial number option
oc
parents: 241
diff changeset
694 serial.limit(4+8);
182
b3426724667b fix read send data.
oc
parents: 181
diff changeset
695 }
185
feefc1e58153 minor fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 182
diff changeset
696 reader.mark(dataLen);
414
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
697 reader.readBytes(header.array(), 0, headerLen);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
698 header.limit(headerLen);
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
699 if (header.get(0) == FramebufferUpdate) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
700 int encoding = header.getInt(12);
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
701
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
702 if (encoding == EncodingType.ZRLE.getId()
229
5eb8aa65f387 fix checkdelay number-of-rectangle, and send checkdelay to lower node.
oc
parents: 227
diff changeset
703 || encoding == EncodingType.ZLIB.getId()) {
186
f76ee760c2d2 dead lock on command line root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 185
diff changeset
704 // recompress into ZREE
f76ee760c2d2 dead lock on command line root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 185
diff changeset
705 // uncompressed result is remain in bytes
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
706 ByteBuffer len = multicastqueue.allocate(4);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
707 reader.readBytes(len.array(), 0, 4);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
708 len.limit(4);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
709 ByteBuffer inputData = multicastqueue.allocate(dataLen - 20);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
710 reader.readBytes(inputData.array(), 0, inputData.capacity());
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
711 inputData.limit(dataLen - 20);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
712 LinkedList<ByteBuffer> inputs = new LinkedList<ByteBuffer>();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
713 inputs.add(inputData);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
714 header.putInt(12, EncodingType.ZRLEE.getId()); // means
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
715 // recompress
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
716 // every time
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
717 // using new Deflecter every time is incompatible with the
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
718 // protocol, clients have to be modified.
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
719 Deflater nDeflater = deflater; // new Deflater();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
720 LinkedList<ByteBuffer> out = new LinkedList<ByteBuffer>();
380
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
721 try {
182
b3426724667b fix read send data.
oc
parents: 181
diff changeset
722 unzip(inflater, inputs, 0, bytes, INFLATE_BUFSIZE);
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
723 // dump32(inputs);
182
b3426724667b fix read send data.
oc
parents: 181
diff changeset
724 out.add(ByteBuffer.wrap(bytes));
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
725 int len2 = zip(nDeflater, out, 0, bufs);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
726 ByteBuffer blen = multicastqueue.allocate(4);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
727 blen.putInt(len2);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
728 blen.flip();
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
729 bufs.addFirst(blen);
415
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
730 if (checkDelay) {
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
731 bufs = createCheckDelayHeader(bufs, header);
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
732 } else {
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
733 bufs.addFirst(header);
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
734 }
380
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
735 if (addSerialNum) {
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
736 addSerialNumber(bufs);
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
737 }
270
2d934eee4f4b small fix
oc
parents: 269
diff changeset
738 if (filterSingleDisplay) {
275
0f9b3de45fb2 set main display size.
oc
parents: 270
diff changeset
739 if (rect.x < singleWidth) {
270
2d934eee4f4b small fix
oc
parents: 269
diff changeset
740 multicastqueue.put(bufs);
2d934eee4f4b small fix
oc
parents: 269
diff changeset
741 }
2d934eee4f4b small fix
oc
parents: 269
diff changeset
742 } else {
2d934eee4f4b small fix
oc
parents: 269
diff changeset
743 multicastqueue.put(bufs);
2d934eee4f4b small fix
oc
parents: 269
diff changeset
744 }
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
745 } catch (IOException e) {
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
746 throw new TransportException(e);
335
49e25659ad05 remove socketClose, close unused viewer -d mode.
oc
parents: 334
diff changeset
747 } catch (DataFormatException e) {
49e25659ad05 remove socketClose, close unused viewer -d mode.
oc
parents: 334
diff changeset
748 throw new TransportException(e);
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
749 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
750 return;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
751 }
233
26b7c0a6d91b fix indent.
oc
parents: 232
diff changeset
752
186
f76ee760c2d2 dead lock on command line root
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 185
diff changeset
753 // ZRLEE is already compressed
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
754 bufs.add(header);
380
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
755 if (addSerialNum) {
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
756 this.addSerialNumber(bufs);
aef5cbdd84ab Fix compare SerialNumber flag
innparusu
parents: 378
diff changeset
757 }
414
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
758 if (dataLen > headerLen) {
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
759 ByteBuffer b = multicastqueue.allocate(dataLen - headerLen);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
760 reader.readBytes(b.array(), 0, dataLen - headerLen);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
761 b.limit(dataLen - headerLen);
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
762 bufs.add(b);
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
763 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
764 multicastqueue.put(bufs);
233
26b7c0a6d91b fix indent.
oc
parents: 232
diff changeset
765
118
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
766 return;
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
767 }
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
768 // It may be compressed. We can inflate here to avoid repeating clients
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
769 // decompressing here,
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
770 // but it may generate too many large data. It is better to do it in
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
771 // each client.
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
772 // But we have do inflation for all input data, so we have to do it
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
773 // here.
38e461e9b9c9 remove duplicated code in MyRfbProto*
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 113
diff changeset
774 }
124
214d4f206431 add TreeVNC command number.
oc
parents: 123
diff changeset
775
415
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
776 public LinkedList<ByteBuffer> createCheckDelayHeader(LinkedList<ByteBuffer> checkDelay, ByteBuffer header) {
414
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
777 int x = (int)header.getShort(4);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
778 int y = (int)header.getShort(6);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
779 int width = (int)header.getShort(8);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
780 int height = (int)header.getShort(10);
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
781 long time = System.currentTimeMillis();
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
782 checkDelay.addFirst(new CheckDelay(x, y, width, height, time, EncodingType.CHECK_DELAY).getMessage());
415
5c3635d6ab3c Send Check_Delay packet if checkDelay flag is true
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 414
diff changeset
783 return checkDelay;
414
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
784 }
3af5f4af2d63 Send data size for checkDelay
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 412
diff changeset
785
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
786 public void setId(short id) {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
787 this.id = id;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
788 }
169
8ab1f6905db4 Try to hide root frame
oc
parents: 166
diff changeset
789
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
790 public short getId() {
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
791 return id;
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
792 }
169
8ab1f6905db4 Try to hide root frame
oc
parents: 166
diff changeset
793
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
794 public void setMyAddress(String myHostName) {
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
795 this.myAddress = myHostName;
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
796
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
797 }
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
798
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
799 public void setLeader(boolean leader) {
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
800 this.leader = leader;
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
801 }
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
802
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
803 public boolean isLeader() {
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
804 return leader;
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
805 }
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
806
203
2f6237fea67e change createTreeManagers timing.
oc
parents: 202
diff changeset
807 public void setTreeManager(String intf, TreeManagement clients) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
808 nets.setTreeManager(intf, clients);
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
809 }
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
810
203
2f6237fea67e change createTreeManagers timing.
oc
parents: 202
diff changeset
811 public TreeManagement getTreeManager(String intf) {
418
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 417
diff changeset
812 this.treeManager = nets.getTreeManager(intf);
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 417
diff changeset
813 this.nodeList = treeManager.getList();
0543c380308c Move bottleneck Node to outside node list
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 417
diff changeset
814 return treeManager;
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
815 }
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
816
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
817 /**
290
c10e0dee7bbb add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
oc
parents: 287
diff changeset
818 * change VNCServer is called when host change.
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
819 * @param vncProxyService
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
820 * @param hostName
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
821 * HostAddress
359
62a6c779fd7f remove function about catch next display size
oc
parents: 358
diff changeset
822 * @param width
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
823 * FrameWidth
359
62a6c779fd7f remove function about catch next display size
oc
parents: 358
diff changeset
824 * @param height
382
37eb97a23dcf add variable(is,os) to changeVNCServer
kkb
parents: 380
diff changeset
825 * FrameHeight
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
826 * @param shareScreenNumber
351
024ac6e457f4 fix changeVNCServer
oc
parents: 350
diff changeset
827 * @param newVNCServerId
382
37eb97a23dcf add variable(is,os) to changeVNCServer
kkb
parents: 380
diff changeset
828 * @param is
37eb97a23dcf add variable(is,os) to changeVNCServer
kkb
parents: 380
diff changeset
829 * @param os
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
830 */
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
831 public void changeVNCServer(ViewerInterface vncProxyService, String hostName, int port, int x, int y, int width, int height, int shareScreenNumber, int scale, short newVNCServerId, Reader is, Writer os)
325
cc9d33208f34 small change catch error message.
oc
parents: 322
diff changeset
832 throws IOException {
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
833 this.x = x;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
834 this.y = y;
359
62a6c779fd7f remove function about catch next display size
oc
parents: 358
diff changeset
835 this.frameSizeWidth = width;
62a6c779fd7f remove function about catch next display size
oc
parents: 358
diff changeset
836 this.frameSizeHeight = height;
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
837 this.shareScreenNumber = shareScreenNumber;
410
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
838 this.singleWidth = frameSizeWidth;
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
839 this.singleHeight = frameSizeHeight;
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
840 this.retinaScale = scale;
351
024ac6e457f4 fix changeVNCServer
oc
parents: 350
diff changeset
841 if (newVNCServerId == -1) {
339
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
842 // change to the tree vnc root on other network.
383
7d55adebcacb impliment changeDirectConnectedWithSocket
kkb
parents: 382
diff changeset
843 vncProxyService.changeToDirectConnectedServer(hostName, is, os);
339
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
844 return;
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
845 }
342
4c670edf3065 fix setting remote id
oc
parents: 341
diff changeset
846 // serverChangeの処理
369
2d01ec1c02d2 Fix ReConnectingFlag
innparusu
parents: 367
diff changeset
847 vncProxyService.inhelitClients(vncProxyService, hostName, newVNCServerId);
317
3c63bc88383e always fit screen, -d mode.
oc
parents: 306
diff changeset
848 // after connecting VNC server, rfb send SEND_INIT_DATA command and wakes me up if necessary
322
345185ef630e close viewer as soon as push share screen button.
oc
parents: 320
diff changeset
849 // stop reader stop
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
850 }
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
851
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
852 /**
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
853 * start accepting children
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
854 * run rootFinderListener if necessary
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
855 */
176
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
856 public void createConnectionAndStart(ViewerInterface v) {
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
857 selectPort(ConnectionParams.DEFAULT_VNC_ROOT);
176
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
858 acceptThread = new TreeVncCommandChannelListener(this, getAcceptPort());
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
859 Thread thread = new Thread(acceptThread, "TreeVNC-accept");
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
860 thread.start();
176
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
861 }
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
862
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
863 public TreeVncCommandChannelListener getAcceptThread() {
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
864 return acceptThread;
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
865 }
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 170
diff changeset
866
176
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
867 public void setConnectionParam(CreateConnectionParam createConnectionParam) {
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
868 cp = createConnectionParam;
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
869 }
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
870
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
871 public CreateConnectionParam getConnectionParam() {
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
872 return cp;
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
873 }
fa6cfb85444e on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 175
diff changeset
874
178
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
875 public boolean hasViewer() {
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
876 return hasViewer;
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
877 }
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
878
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
879 public void setHasViewer(boolean b) {
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
880 hasViewer = b;
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
881 }
34b7558aeffa remove TreeTask, StartTreeHandling
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 177
diff changeset
882
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
883 public void setShowTree(boolean showTree) {
240
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
884 this.showTreeNode = showTree;
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
885 }
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
886
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
887 public void setCheckDelay(boolean checkDelay) {
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
888 this.checkDelay = checkDelay;
223
3189e210a7ed indent fix.
oc
parents: 207
diff changeset
889 }
194
b038aafeb2b0 hide VNC server's view to prevent video feed back.
oc
parents: 192
diff changeset
890
241
b21a7842a41d add option addSerialNum.
oc
parents: 240
diff changeset
891 public void setAddSerialNum(boolean addSerialNum) {
b21a7842a41d add option addSerialNum.
oc
parents: 240
diff changeset
892 this.addSerialNum = addSerialNum;
b21a7842a41d add option addSerialNum.
oc
parents: 240
diff changeset
893 }
b21a7842a41d add option addSerialNum.
oc
parents: 240
diff changeset
894
235
15e66adbb8bb get checkdelay nodeNum.
oc
parents: 234
diff changeset
895 public int getNodeNum(int port, String address) {
232
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
896 int nodeNum = 0;
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
897
232
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
898 for (Iterator<TreeVNCNode> i = nodeList.iterator(); i.hasNext();) {
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
899 TreeVNCNode tvn = (TreeVNCNode)i.next();
235
15e66adbb8bb get checkdelay nodeNum.
oc
parents: 234
diff changeset
900 if (port == tvn.port && address.equals(tvn.hostname)) {
15e66adbb8bb get checkdelay nodeNum.
oc
parents: 234
diff changeset
901 nodeNum = tvn.treeNum;
15e66adbb8bb get checkdelay nodeNum.
oc
parents: 234
diff changeset
902 return nodeNum;
15e66adbb8bb get checkdelay nodeNum.
oc
parents: 234
diff changeset
903 }
232
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
904 }
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
905 return nodeNum;
6ee4cdca104c send value of port and localhost in checkdelay framebufferupdate, and get this.
oc
parents: 231
diff changeset
906 }
241
b21a7842a41d add option addSerialNum.
oc
parents: 240
diff changeset
907
257
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
908 public void setFixingSize(boolean fixingSize) {
11b59b223222 add function of fixing display size
oc
parents: 256
diff changeset
909 this.fixingSize = fixingSize;
256
dfec8bc1eb8e fix --retina option
oc
parents: 255
diff changeset
910 }
267
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
911
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
912 public void setFilterSingleDisplay(boolean filterSingleDisplay) {
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
913 this.filterSingleDisplay = filterSingleDisplay;
5f697251860b add --filterSingleDisplay option.
oc
parents: 266
diff changeset
914 }
281
16d3584ae7a0 fix SEND_SINGLE_DISPLAY_WIDTH
oc
parents: 280
diff changeset
915
293
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
916 private DatagramSocket createSocket() {
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
917
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
918 try {
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
919 if (socket == null) {
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
920 this.socket = new DatagramSocket(ConnectionParams.DEFAULT_RTP_PORT, InetAddress.getLocalHost());
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
921 }
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
922 } catch (SocketException e) {
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
923 e.printStackTrace();
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
924 } catch (UnknownHostException e) {
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
925 e.printStackTrace();
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
926 }
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
927 return socket;
d1ceb4b7097a add function receive sound.
oc
parents: 292
diff changeset
928 }
306
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
929
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
930 public void setSingleDisplaySize(int singleWidth, int singleHeight) {
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
931 this.singleWidth = singleWidth;
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
932 this.singleHeight = singleHeight;
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
933 }
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
934
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
935 public int getX() {
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
936 return x;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
937 }
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
938
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
939 public int getY() {
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
940 return y;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
941 }
358
59b1ef1b0a89 fix ilter single display (HiDPI)
oc
parents: 357
diff changeset
942
306
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
943 public int getSingleWidth() {
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
944 return singleWidth;
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
945 }
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
946
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
947 public int getSingleHeight() {
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
948 return singleHeight;
5e55cc34f789 change public to private
oc
parents: 305
diff changeset
949 }
339
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
950
405
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
951 public int getShareScreenNumber() {
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
952 return shareScreenNumber;
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
953 }
cdab1354e227 Add multiscreen Share Filtering flag
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 402
diff changeset
954
410
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
955
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
956 public int getRetinaScale() {
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
957 return retinaScale;
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
958 }
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
959
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
960
339
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
961 public boolean hasParent() {
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
962 return id != -1;
4713559f5838 if have a parent, send serverChangeRequest and whereToConnect
oc
parents: 335
diff changeset
963 }
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
964
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
965 /**
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
966 * server change to directed connected server
395
704ac9e79e25 Call startVNCConnectionWithSocket for directedServerChangeReqeust
innparusu
parents: 394
diff changeset
967 * server maybe on the different network
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
968 * so can not in whereToConnect message
395
704ac9e79e25 Call startVNCConnectionWithSocket for directedServerChangeReqeust
innparusu
parents: 394
diff changeset
969 * reuse dynamic connect socket us a new client
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
970 * reother server exchange socket when serverChangeRequest with id -1
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
971 * @param previousReader
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
972 * @param previousWriter
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
973 */
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
974 public void exchangeDirectConnectedServer(Reader previousReader, Writer previousWriter) {
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
975 String adr = viewer.getRfb().getMyAddress();
410
da1d6d6b4981 Enable retina scale to fit screen
innparusu
parents: 405
diff changeset
976 int scale = viewer.getRfb().getRetinaScale();
417
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
977 int x = 0;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
978 int y = 0;
c225c7963778 Send screen position
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 415
diff changeset
979 ScreenChangeRequest scr = new ScreenChangeRequest(adr, ConnectionParams.DEFAULT_VNC_ROOT, (short) -1, x, y, singleWidth, singleHeight, shareScreenNumber, scale);
384
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
980 try {
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
981 scr.send(previousWriter);
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
982 } catch (TransportException e) {
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
983 e.printStackTrace();
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
984 return;
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
985 }
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
986 newClient(previousWriter, previousReader);
0bbfc23ef8c4 implements exchangeDirectConnectedServer method
innparusu
parents: 383
diff changeset
987 }
389
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
988
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
989 /**
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
990 * Requested server is connected. stop old connection, replace old connection parameter such as
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
991 * context (PROTOCOL)
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
992 * start new connection and send INIT_DATA
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
993 * @param workingProtocol
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
994 * @param connectionPresenter
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
995 */
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
996 public synchronized void newVNCConnection(Protocol workingProtocol, ConnectionPresenter connectionPresenter) {
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
997 ProtocolContext previousContext = getContext();
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
998 stopReceiverTask();
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
999 setProtocolContext(workingProtocol);
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1000 connectionPresenter.viewer.setConnectionPresenter(connectionPresenter);
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1001 connectionPresenter.viewer.getConnectionPresenter().addModel("ConnectionParamsModel", connectionPresenter.getConnectionParams());
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1002 if (previousContext != null && isTreeManager() && hasParent()) {
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1003 Reader previousReader = previousContext.getReader();
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1004 Writer previousWriter = previousContext.getWriter();
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1005 exchangeDirectConnectedServer(previousReader, previousWriter);
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1006 }
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1007 enableChildrenTransmission();
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1008 printNetworkInterface();
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1009 sendDesktopSizeChange(connectionPresenter.getReconnectingId());
5a61cbdd83ab Lock rfb
innparusu
parents: 385
diff changeset
1010 }
412
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1011
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1012 public void sendErrorAnnounce(short reconnectingId, String message) {
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1013 LinkedList<ByteBuffer> errorAnnounce = new LinkedList<ByteBuffer>();
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1014 errorAnnounce.add(new ChildNodeAnnounce(EncodingType.ERROR_ANNOUNCE, message.getBytes(), reconnectingId).getMessage());
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1015 if (addSerialNum) {
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1016 addSerialNumber(errorAnnounce);
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1017 }
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1018 multicastqueue.put(errorAnnounce);
372532ae5f4d Add ErrorAnnounce
innparusu
parents: 411
diff changeset
1019 }
240
7310e7d7a45f add option --checkDelay.
oc
parents: 239
diff changeset
1020 }