annotate src/main/java/jp/ac/u_ryukyu/treevnc/BroadcastRFBListener.java @ 521:3fc0fedbc3fd

try catch in loop
author mir3636
date Fri, 22 Feb 2019 16:07:03 +0900
parents 3a9dadc8821f
children dca83cc39438
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
206
2b3eb4a9492f MyRfbProto reorganization
oc
parents: 174
diff changeset
1 package jp.ac.u_ryukyu.treevnc;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
159
1c9f6acdfeb2 TreeCommand enum
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 155
diff changeset
3 import com.glavsoft.rfb.protocol.ProtocolContext.TreeCommand;
505
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
4 import com.glavsoft.rfb.protocol.ReceiverTask;
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
5 import com.glavsoft.transport.Reader;
174
2e1530139169 reorganization
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 159
diff changeset
6 import com.glavsoft.viewer.ViewerInterface;
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
7 import com.glavsoft.viewer.swing.ConnectionParams;
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
8
505
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
9 import java.io.ByteArrayInputStream;
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
10 import java.io.IOException;
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
11 import java.net.DatagramPacket;
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
12 import java.net.InetAddress;
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
13 import java.net.MulticastSocket;
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
14 import java.net.SocketException;
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
15 import java.nio.ByteBuffer;
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
16
505
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
17 import static com.glavsoft.rfb.protocol.ReceiverTask.FRAMEBUFFER_UPDATE;
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
18
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
19 public class BroadcastRFBListener implements Runnable {
263
4075f68f1c91 add joinGroup IPv6 and IPv4 adderss version.
oc
parents: 262
diff changeset
20 public static final String Ipv4McastAddr = "224.0.0.1";
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
21 public static final String Ipv6McastAddr = "ff02::1";
263
4075f68f1c91 add joinGroup IPv6 and IPv4 adderss version.
oc
parents: 262
diff changeset
22 public static String McastAddr = Ipv4McastAddr;
4075f68f1c91 add joinGroup IPv6 and IPv4 adderss version.
oc
parents: 262
diff changeset
23
520
3a9dadc8821f multicast packet is recieved
mir3636
parents: 515
diff changeset
24 static final int BufSize = 1024*64;
505
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
25 private ReceiverTask receiverTask;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 private boolean stopFlag = false;
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
27 private TreeRFBProto rfb;
69
21108e863b8a update client list.
one
parents: 68
diff changeset
28 private MulticastSocket soc;
259
606953a43198 fix how to join Multicast for the IPv6 address.
oc
parents: 258
diff changeset
29 private SecurityManager securityManager;
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
31 public BroadcastRFBListener() {
513
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 512
diff changeset
32 try {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 512
diff changeset
33 soc = createMulticastSocket();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 512
diff changeset
34 System.out.println("FindRoot listening on "+ InetAddress.getByName(McastAddr));
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 512
diff changeset
35 } catch (IOException e) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 512
diff changeset
36 e.printStackTrace();
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 512
diff changeset
37 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 }
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
39
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
40 public static MulticastSocket createMulticastSocket() throws IOException {
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
41 MulticastSocket soc = new MulticastSocket(ConnectionParams.DEFAULT_VNC_BROADCAST);
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
42 try {
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
43 soc.joinGroup(InetAddress.getByName(McastAddr));
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
44 } catch (SocketException e) {
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
45 System.out.println("join to " + Ipv4McastAddr + " failed.");
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
46 }
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
47 /*try {
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
48 soc.joinGroup(InetAddress.getByName(Ipv6McastAddr));
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
49 } catch (SocketException e) {
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
50 System.out.println("join to " + Ipv6McastAddr + " failed.");
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
51 }*/
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
52 return soc;
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
53 }
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
54
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
55 /**
81
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
56 * To find TreeVNC root, a client sends me a multicast, reply our address to him.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
57 * It contains a port to receive, so multiple TREEVNC clients can run on a PC.
f93d0286c2ab root find multicast send port number now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 80
diff changeset
58 */
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
59 private void rfbBroadcastLoop() {
55
9fdb8ff88497 change parameter.
one
parents: 38
diff changeset
60 byte[] buf = new byte[BufSize];
263
4075f68f1c91 add joinGroup IPv6 and IPv4 adderss version.
oc
parents: 262
diff changeset
61
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
62 DatagramPacket recvPacket = new DatagramPacket(buf, BufSize);
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
63 while (!stopFlag) {
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
64 try {
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 soc.receive(recvPacket);
155
1c95bd5bebcf root finder for multiple network.
oc
parents: 134
diff changeset
66 String hostname = recvPacket.getAddress().getHostAddress();
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
67 byte[] reply = recvPacket.getData();
82
cc72fdbb7c72 on going ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 81
diff changeset
68 int len = recvPacket.getLength();
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
69 boolean isTreeRoot = rfb.isTreeManager();
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
70 if (isTreeRoot && receiverTask != null) {
506
3fe7e1a372df Multicast CUI
toubaru
parents: 505
diff changeset
71 receiverTask.setReader(new Reader(new ByteArrayInputStream(reply)));
3fe7e1a372df Multicast CUI
toubaru
parents: 505
diff changeset
72 if (receiverTask.getMessageId() == FRAMEBUFFER_UPDATE) {
3fe7e1a372df Multicast CUI
toubaru
parents: 505
diff changeset
73 receiverTask.framebufferUpdateMessage();
505
af958194248b change replyToRootSearchMulticast
oshiro
parents: 454
diff changeset
74 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 }
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
76 } catch (Exception e) {
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
77 System.out.println("broadcast-rfb-listener :" + e.getMessage());
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 }
434
aad75cd6d9e2 Multicast joins both ipv4 and ipv6 now.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 331
diff changeset
81
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
82 public void multicastUpdateRectangle(ByteBuffer buf) {
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
83
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
84 /*try {
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
85 DatagramPacket sendPacket = new DatagramPacket(buf.array
515
mir3636
parents: 514
diff changeset
86 (), buf.limit(), InetAddress.getByName(TreeRootFinderListener.Ipv6McastAddr), ConnectionParams.DEFAULT_VNC_BROADCAST);
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
87 soc.send(sendPacket);
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
88 } catch (IOException e) {
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
89 System.out.println("cannot send UpdateRectangle.");
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
90 e.printStackTrace();
521
3fc0fedbc3fd try catch in loop
mir3636
parents: 520
diff changeset
91 }*/
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
92
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
93 try {
515
mir3636
parents: 514
diff changeset
94 DatagramPacket sendPacket1 = new DatagramPacket(buf.array(), buf.limit(), InetAddress.getByName(TreeRootFinderListener.Ipv4McastAddr), ConnectionParams.DEFAULT_VNC_BROADCAST);
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
95 soc.send(sendPacket1);
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
96 } catch (IOException e) {
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
97 System.out.println("cannot send UpdateRectangle.");
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
98 e.printStackTrace();
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
99 }
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
100 }
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
101
134
128cce60c43c where to connect command
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 126
diff changeset
102 public void run() {
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
103 rfbBroadcastLoop();
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105
436
9db8862ef200 remove unsed code in FindRoot
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 435
diff changeset
106 // it looks like that we never stop
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 public void setStopFlag(boolean stopFlag) {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 this.stopFlag = stopFlag;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 }
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 public boolean isStopFlag() {
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 return stopFlag;
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 }
510
89f1f7e41838 broadcast FrameBufferUpdate Rectangle
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 506
diff changeset
114
89f1f7e41838 broadcast FrameBufferUpdate Rectangle
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 506
diff changeset
115 public MulticastSocket getSocket() {
89f1f7e41838 broadcast FrameBufferUpdate Rectangle
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 506
diff changeset
116 return soc;
89f1f7e41838 broadcast FrameBufferUpdate Rectangle
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 506
diff changeset
117 }
514
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
118
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
119 public void init(TreeRFBProto rfb_, ReceiverTask receiverTask_) {
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
120 rfb = rfb_;
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
121 receiverTask = receiverTask_;
887ebd993b3d separate rfb broadcast
mir3636
parents: 513
diff changeset
122 }
11
57ae9fbb1245 add files
Taninari YU <you@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 }