# HG changeset patch # User oc # Date 1421094173 -32400 # Node ID c10e0dee7bbbe6a12a38c7b975abdda42e87a6e2 # Parent bb94d3e567ba658a538f3a47ad094c6d308fbb0c add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread. diff -r bb94d3e567ba -r c10e0dee7bbb src/main/java/com/glavsoft/rfb/client/ClientToServerMessage.java --- a/src/main/java/com/glavsoft/rfb/client/ClientToServerMessage.java Tue Jan 13 04:41:12 2015 +0900 +++ b/src/main/java/com/glavsoft/rfb/client/ClientToServerMessage.java Tue Jan 13 05:22:53 2015 +0900 @@ -37,6 +37,7 @@ byte SERVER_CHANGE_REQUEST = (byte) 240; // TreeVNC extension byte CHECK_DELAY_REPLY = 70; byte REQUEST_SINGLE_DISPLAY_WIDTH = 71; + byte READY_SHARE_SOUND = 72; void send(Writer writer) throws TransportException; } diff -r bb94d3e567ba -r c10e0dee7bbb src/main/java/jp/ac/u_ryukyu/treevnc/ReadyShareSound.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/ReadyShareSound.java Tue Jan 13 05:22:53 2015 +0900 @@ -0,0 +1,27 @@ +package jp.ac.u_ryukyu.treevnc; + +import com.glavsoft.exceptions.TransportException; +import com.glavsoft.rfb.client.ClientToServerMessage; +import com.glavsoft.transport.Writer; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +/** + * Created by OcBookPro on 15/01/13. + */ +public class ReadyShareSound implements ClientToServerMessage { + public ReadyShareSound() { + + } + + @Override + public void send(Writer writer) throws TransportException { + ByteBuffer out = ByteBuffer.allocate(2); + out.order(ByteOrder.BIG_ENDIAN); + out.put(READY_SHARE_SOUND); + out.put((byte)0); // padding + writer.write(out.array(), 0, out.position()); + writer.flush(); + } +} diff -r bb94d3e567ba -r c10e0dee7bbb src/main/java/jp/ac/u_ryukyu/treevnc/SendSingleDisplayWidth.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/SendSingleDisplayWidth.java Tue Jan 13 04:41:12 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/SendSingleDisplayWidth.java Tue Jan 13 05:22:53 2015 +0900 @@ -15,22 +15,9 @@ private TreeRFBProto rfb; private int singleDisplayWidth; - public SendSingleDisplayWidth(TreeRFBProto rfb, int singleWidth) { - this.rfb = rfb; - this.singleDisplayWidth = singleWidth; - } - public SendSingleDisplayWidth() { } - public void sendSingleDisplayWidth() throws UnsupportedEncodingException { - LinkedList linkedListSendSingleDisplayWidth = new LinkedList(); - linkedListSendSingleDisplayWidth.add(singleDisplayWidth(0, 0, this.singleDisplayWidth, 0)); - this.rfb.addSerialNumber(linkedListSendSingleDisplayWidth); - this.rfb.multicastqueue.put(linkedListSendSingleDisplayWidth); - System.out.println(this.singleDisplayWidth + " : send single display width"); - } - public ByteBuffer singleDisplayWidth(int i, int j, int singleDisplayWidth, int height) throws UnsupportedEncodingException { msg = ByteBuffer.allocate(24).order(ByteOrder.BIG_ENDIAN); msg.put((byte) 0); // FrameBufferUpdate diff -r bb94d3e567ba -r c10e0dee7bbb src/main/java/jp/ac/u_ryukyu/treevnc/SendSound.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/SendSound.java Tue Jan 13 05:22:53 2015 +0900 @@ -0,0 +1,26 @@ +package jp.ac.u_ryukyu.treevnc; + +/** + * Created by OcBookPro on 15/01/13. + */ +public class SendSound implements Runnable { + + TreeRFBProto rfb; + + public SendSound(TreeRFBProto rfb) { + this.rfb = rfb; + } + + @Override + public void run() { + for(;;) { + if (rfb.isTreeManager()) { + // root version (send packet to other nodes) + System.out.println("root : share sound!!\n"); + } else { + // node version (send packet+RTP to root) + System.out.println("client node : share sound!!\n"); + } + } + } +} diff -r bb94d3e567ba -r c10e0dee7bbb src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java --- a/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java Tue Jan 13 04:41:12 2015 +0900 +++ b/src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java Tue Jan 13 05:22:53 2015 +0900 @@ -160,6 +160,7 @@ final int c = is.readByte(b); if (c <= 0) throw new IOException(); + // case of root node. if (isTreeManager()) { if (b[0] == ClientToServerMessage.SERVER_CHANGE_REQUEST) { if (permitChangeScreen()) { @@ -191,6 +192,12 @@ buf.order(ByteOrder.BIG_ENDIAN); buf.get(); sendSingleDisplayWidth(singleWidth); + } else if (b[0] == ClientToServerMessage.READY_SHARE_SOUND) { + // 返事する?? + // IPアドレス送る?? + // 受信準備をする + // thread立ち上げる + System.out.println("rootは受信準備を始める。"); } else if (b[0] == ClientToServerMessage.CHECK_DELAY_REPLY) { ByteBuffer buf = ByteBuffer.wrap(b); buf.order(ByteOrder.BIG_ENDIAN); @@ -205,11 +212,8 @@ Long delay = System.currentTimeMillis() - time; double halfDelay = (double) delay / 2; System.out.println(System.currentTimeMillis() + " : receive checkDelay : nodeNum" + nodeNum + ", port : " + port + ", address : " + address + ", delay : " + halfDelay); - - // checkNodeNum(); - // readSendData(check); - } + // case of client node. } else if (b[0] == ClientToServerMessage.SERVER_CHANGE_REQUEST) { ClientToServerMessage sc = new ClientToServerMessage() { @Override @@ -227,6 +231,15 @@ writer.write(b, 0, c); } }; + } else if (b[0] == ClientToServerMessage.READY_SHARE_SOUND) { + ClientToServerMessage readyShareSound = new ClientToServerMessage() { + @Override + public void send(Writer writer) + throws TransportException { + writer.write(b,0,c); + } + }; + context.sendMessage(readyShareSound); } else if (b[0] == ClientToServerMessage.CHECK_DELAY_REPLY) { ClientToServerMessage checkDelayReply = new ClientToServerMessage() { @Override @@ -710,7 +723,7 @@ } /** - * chnageVNCServer is called when host change. + * change VNCServer is called when host change. * * @param vncProxyService * @param hostName @@ -741,6 +754,15 @@ } /** + * Create send sound thread. + */ + public void createShareSoundThread(TreeRFBProto rfb) { + SendSound sendSound = new SendSound(rfb); + Thread sendSoundThread = new Thread(sendSound, "send-sound"); + sendSoundThread.start(); + } + + /** * start accepting children * run rootFinderListener if necessary */ diff -r bb94d3e567ba -r c10e0dee7bbb src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java --- a/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java Tue Jan 13 04:41:12 2015 +0900 +++ b/src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java Tue Jan 13 05:22:53 2015 +0900 @@ -53,10 +53,7 @@ import java.util.concurrent.TimeUnit; import java.util.logging.Logger; -import jp.ac.u_ryukyu.treevnc.RequestSingleDisplayWidth; -import jp.ac.u_ryukyu.treevnc.SendSingleDisplayWidth; -import jp.ac.u_ryukyu.treevnc.TreeRFBProto; -import jp.ac.u_ryukyu.treevnc.ScreenChangeRequest; +import jp.ac.u_ryukyu.treevnc.*; public class SwingViewerWindow implements IChangeSettingsListener { public static final int FS_SCROLLING_ACTIVE_BORDER = 20; @@ -904,10 +901,15 @@ final JButton soundButton = buttonsBar.createButton("share-sound", "Share Sound", new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - // ここにsound共有始める処理を書く if (viewer.getRfb().isTreeManager()) { + // send用thread立ち上げのメソッドに飛ぶ + viewer.getRfb().createShareSoundThread(viewer.getRfb()); return; } + // rootにMsgを送信する + context.sendMessage(new ReadyShareSound()); + // 送信用threadを立ち上げるメソッドに飛ぶ + viewer.getRfb().createShareSoundThread(viewer.getRfb()); } }); kbdButtons.add(adjustHdSizeButton);