view src/main/java/jp/ac/u_ryukyu/alicevnc/ReceiveServerInitMessage.java @ 20:15398aebb0ef

refactor
author sugi
date Thu, 06 Nov 2014 19:43:48 +0900
parents 0a44eb36cb1c
children eeafa2dc8445
line wrap: on
line source

package jp.ac.u_ryukyu.alicevnc;

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.encoding.decoder.AliceVNCMessage;
import com.glavsoft.rfb.protocol.Protocol;
import com.glavsoft.rfb.protocol.ProtocolSettings;
import com.glavsoft.viewer.Viewer;
import com.glavsoft.viewer.cli.Parser;
import com.glavsoft.viewer.swing.ParametersHandler;
import com.glavsoft.viewer.swing.SwingViewerWindow;
import com.glavsoft.viewer.swing.SwingViewerWindowFactory;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;

public class ReceiveServerInitMessage extends CodeSegment {

    private Receiver info = ids.create(CommandType.PEEK);

    public ReceiveServerInitMessage(){
        info.setKey("ServerInitMessage");
    }

    public ReceiveServerInitMessage(String key){
        info.setKey(key, "AliceVNCInitMessage");
    }

    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)) {
            System.exit(0);
        }
        Viewer viewer = new Viewer(parser);
        SwingViewerWindowFactory viewerWindowFactory = new SwingViewerWindowFactory(true, false, viewer);
        ProtocolSettings settings = ProtocolSettings.getDefaultSettings();
        
        Protocol context = new Protocol(null, null, null, settings);
        context.setMessageQueue(new MyMessageQueue());
        
        if ("local".equals(info.from)){
            ServerInitMessage serverInitMessage = info.asClass(ServerInitMessage.class);
            pixelFormat = serverInitMessage.getPixelFormat();
            width = serverInitMessage.getFrameBufferWidth();
            height = serverInitMessage.getFrameBufferHeight();
            name = serverInitMessage.getName();
            
            AliceVNCMessage message = new AliceVNCMessage();
            message.setServerInitMessage(serverInitMessage);
            
            ods.update("AliceVNCInitMessage", message);
        } else {
            ods.update("AliceVNCInitMessage", info.getReceiveData());
            AliceVNCMessage message = info.asClass(AliceVNCMessage.class);
            pixelFormat = message.getPixelFormat();
            width = message.width;
            height = message.height;
            name = message.name;
        }

        context.setPixelFormat(pixelFormat);
        context.setFbWidth(width);
        context.setFbHeight(height);
        context.setRemoteDesktopName(name);
        
        SwingViewerWindow viewerWindow = viewerWindowFactory.createViewerWindow(context, settings, viewer.getUiSettings(), null, null);
        settings.setViewOnly(true);
        IRepaintController repaintController = viewerWindow.getSurface();
        Renderer renderer = repaintController.createRenderer(null, width, height, context.getPixelFormat());
        RenderAndControllerHolder holder = new RenderAndControllerHolder(renderer, repaintController);
        ods.put("Holder", holder);

        new ReceiveUpdateRectangle();
    }

}