changeset 3:9d932f70b29a

create MyServerInitMessage. ServerInitMessage could not send with MessagePack for including PixelFormat class
author YU
date Sat, 13 Sep 2014 19:48:08 +0900
parents e046eb8a3ac1
children 9a24e36d8ed7
files src/main/java/jp/ac/u_ryukyu/alicevnc/AliceVNC.java src/main/java/jp/ac/u_ryukyu/alicevnc/MyServerInitMessage.java src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveServerInitMessage.java
diffstat 3 files changed, 106 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/AliceVNC.java	Sat Sep 13 07:09:27 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/AliceVNC.java	Sat Sep 13 19:48:08 2014 +0900
@@ -27,12 +27,11 @@
             Viewer viewer = new Viewer(parser);
             SwingUtilities.invokeLater(viewer);
                         
+            new ReceiveServerInitMessage();
         }        
         if (conf.getViewerFlag()){
-            
+            new ReceiveServerInitMessage("parent");
         }
-        
-        new ReceiveServerInitMessage();
     }
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/MyServerInitMessage.java	Sat Sep 13 19:48:08 2014 +0900
@@ -0,0 +1,63 @@
+package jp.ac.u_ryukyu.alicevnc;
+
+import org.msgpack.annotation.Message;
+
+import com.glavsoft.rfb.encoding.PixelFormat;
+import com.glavsoft.rfb.encoding.ServerInitMessage;
+
+@Message
+public class MyServerInitMessage {
+    public int width;
+    public int height;
+    public String name;
+    
+    // pixel format info
+    public byte bitsPerPixel;
+    public byte depth;
+    public byte bigEndianFlag;
+    public byte trueColourFlag;
+    public short redMax;
+    public short greenMax;
+    public short blueMax;
+    public byte redShift;
+    public byte greenShift;
+    public byte blueShift;
+    
+    public MyServerInitMessage(){
+        
+    }
+
+    public MyServerInitMessage(ServerInitMessage serverInitMessage) {
+        height = serverInitMessage.getFrameBufferHeight();
+        width = serverInitMessage.getFrameBufferWidth();
+        name = serverInitMessage.getName();
+        PixelFormat pixelFormat = serverInitMessage.getPixelFormat();
+        bitsPerPixel = pixelFormat.bitsPerPixel;
+        depth = pixelFormat.depth;
+        bigEndianFlag = pixelFormat.bigEndianFlag;
+        trueColourFlag = pixelFormat.trueColourFlag;
+        redMax = pixelFormat.redMax;
+        greenMax = pixelFormat.greenMax;
+        blueMax = pixelFormat.blueMax;
+        redShift = pixelFormat.redShift;
+        greenShift = pixelFormat.greenShift;
+        blueShift = pixelFormat.blueShift;
+    }
+    
+    public PixelFormat getPixelFormat(){
+        PixelFormat pixelFormat = new PixelFormat();
+        
+        pixelFormat.bitsPerPixel = bitsPerPixel;
+        pixelFormat.depth = depth;
+        pixelFormat.bigEndianFlag = bigEndianFlag;
+        pixelFormat.trueColourFlag = trueColourFlag;
+        pixelFormat.redMax = redMax;
+        pixelFormat.greenMax = greenMax;
+        pixelFormat.blueMax = blueMax;
+        pixelFormat.redShift = redShift;
+        pixelFormat.greenShift = greenShift;
+        pixelFormat.blueShift = blueShift;
+        
+        return pixelFormat;
+    }
+}
--- a/src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveServerInitMessage.java	Sat Sep 13 07:09:27 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveServerInitMessage.java	Sat Sep 13 19:48:08 2014 +0900
@@ -2,6 +2,7 @@
 
 import com.glavsoft.drawing.Renderer;
 import com.glavsoft.rfb.IRepaintController;
+import com.glavsoft.rfb.encoding.PixelFormat;
 import com.glavsoft.rfb.encoding.ServerInitMessage;
 import com.glavsoft.rfb.protocol.Protocol;
 import com.glavsoft.rfb.protocol.ProtocolSettings;
@@ -17,15 +18,23 @@
 
 public class ReceiveServerInitMessage extends CodeSegment {
 
-    private Receiver info = ids.create(CommandType.TAKE);
-    
-   
+    private Receiver info = ids.create(CommandType.PEEK);
+
+
     public ReceiveServerInitMessage(){
         info.setKey("ServerInitMessage");
     }
-    
+
+    public ReceiveServerInitMessage(String key){
+        info.setKey(key, "MyServerInitMessage");
+    }
+
     public void run() {
-     
+        PixelFormat pixelFormat = null;
+        int width = 0;
+        int height = 0;
+        String name = "defalut";
+        
         Parser parser = new Parser();
         ParametersHandler.completeParserOptions(parser);
         if (parser.isSet(ParametersHandler.ARG_HELP)) {
@@ -36,18 +45,38 @@
         ProtocolSettings settings = ProtocolSettings.getDefaultSettings();
         Protocol context = new Protocol(null, null, null, settings);
         //context.createMessageQueue(); // need clear Queue
-        ServerInitMessage serverInitMessage = info.asClass(ServerInitMessage.class);
-        context.setPixelFormat(serverInitMessage.getPixelFormat());
-        context.setFbWidth(serverInitMessage.getFrameBufferWidth());
-        context.setFbHeight(serverInitMessage.getFrameBufferHeight());
-        context.setRemoteDesktopName(serverInitMessage.getName());
+        if ("local".equals(info.from)){
+            ServerInitMessage serverInitMessage = info.asClass(ServerInitMessage.class);
+            pixelFormat = serverInitMessage.getPixelFormat();
+            width = serverInitMessage.getFrameBufferWidth();
+            height = serverInitMessage.getFrameBufferHeight();
+            name = serverInitMessage.getName();
+            
+            MyServerInitMessage myServerInitMessage = new MyServerInitMessage(serverInitMessage);
+            myServerInitMessage.width = width;
+            myServerInitMessage.height = height;
+            myServerInitMessage.name = name;
+            
+            ods.put("MyServerInitMessage", myServerInitMessage);
+        } else {
+            MyServerInitMessage serverInitMessage = info.asClass(MyServerInitMessage.class);
+            pixelFormat = serverInitMessage.getPixelFormat();
+            width = serverInitMessage.width;
+            height = serverInitMessage.height;
+            name = serverInitMessage.name;
+        }
+
+        context.setPixelFormat(pixelFormat);
+        context.setFbWidth(width);
+        context.setFbHeight(height);
+        context.setRemoteDesktopName(name);
         
         SwingViewerWindow viewerWindow = viewerWindowFactory.createViewerWindow(context, settings, viewer.getUiSettings(), null, null);
         IRepaintController repaintController = viewerWindow.getSurface();
-        Renderer renderer = repaintController.createRenderer(null, serverInitMessage.getFrameBufferWidth(), serverInitMessage.getFrameBufferHeight(), context.getPixelFormat());
+        Renderer renderer = repaintController.createRenderer(null, width, height, context.getPixelFormat());
         RenderAndControllerHolder holder = new RenderAndControllerHolder(renderer, repaintController);
         ods.put("Holder", holder);
-     
+
         new ReceiveUpdateRectangle();
     }