changeset 290:c10e0dee7bbb

add READY_SHARE_SOUND msg, add function of receive READY_SHARE_SOUND msg, add sendSound thread.
author oc
date Tue, 13 Jan 2015 05:22:53 +0900
parents bb94d3e567ba
children a310be14d757
files src/main/java/com/glavsoft/rfb/client/ClientToServerMessage.java src/main/java/jp/ac/u_ryukyu/treevnc/ReadyShareSound.java src/main/java/jp/ac/u_ryukyu/treevnc/SendSingleDisplayWidth.java src/main/java/jp/ac/u_ryukyu/treevnc/SendSound.java src/main/java/jp/ac/u_ryukyu/treevnc/TreeRFBProto.java src/viewer_swing/java/com/glavsoft/viewer/swing/SwingViewerWindow.java
diffstat 6 files changed, 88 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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;
 }
--- /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();
+    }
+}
--- 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<ByteBuffer> linkedListSendSingleDisplayWidth = new LinkedList<ByteBuffer>();
-        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
--- /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");
+            }
+        }
+    }
+}
--- 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
      */
--- 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);