blob: 1c76656e0d9f46894f66377c5fd2d74a4e0e7faf [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package vncclient;
import streamer.PipelineImpl;
import streamer.Queue;
import vncclient.adapter.AwtVncKeyboardAdapter;
import vncclient.adapter.AwtVncMouseAdapter;
import vncclient.vnc.EncodingsMessage;
import vncclient.vnc.FrameBufferUpdateRequest;
import vncclient.vnc.RGB888LE32PixelFormatRequest;
import vncclient.vnc.RfbConstants;
import vncclient.vnc.VncInitializer;
import vncclient.vnc.VncMessageHandler;
import vncclient.vnc.Vnc33Authentication;
import vncclient.vnc.Vnc33Hello;
import common.AwtKeyEventSource;
import common.AwtMouseEventSource;
import common.BufferedImageCanvas;
import common.ScreenDescription;
import common.adapter.AwtBellAdapter;
import common.adapter.AwtCanvasAdapter;
import common.adapter.AwtClipboardAdapter;
public class VncClient extends PipelineImpl {
public VncClient(String id, String password, ScreenDescription screen, BufferedImageCanvas canvas) {
super(id);
assembleVNCPipeline(password, screen, canvas);
}
private void assembleVNCPipeline(String password, ScreenDescription screen, BufferedImageCanvas canvas) {
AwtMouseEventSource mouseEventSource = new AwtMouseEventSource("mouse");
AwtKeyEventSource keyEventSource = new AwtKeyEventSource("keyboard");
// Subscribe packet sender to various events
canvas.addMouseListener(mouseEventSource);
canvas.addMouseMotionListener(mouseEventSource);
canvas.addKeyListener(keyEventSource);
add(
// Handshake
// RFB protocol version exchanger
new Vnc33Hello("hello"),
// Authenticator
new Vnc33Authentication("auth", password),
// Initializer
new VncInitializer("init", true, screen),
new EncodingsMessage("encodings", RfbConstants.SUPPORTED_ENCODINGS_ARRAY),
new RGB888LE32PixelFormatRequest("pixel_format", screen),
// Main
// Packet receiver
new VncMessageHandler("message_handler", screen),
new AwtBellAdapter("bell"),
new AwtClipboardAdapter("clipboard"),
new AwtCanvasAdapter("pixels", canvas, screen),
new Queue("queue"),
new FrameBufferUpdateRequest("fbur", screen),
new AwtVncKeyboardAdapter("keyboard_adapter"),
new AwtVncMouseAdapter("mouse_adapter"),
mouseEventSource, keyEventSource
);
// Link handshake elements
link("IN", "hello", "auth", "init", "message_handler");
link("hello >otout", "hello< OUT");
link("auth >otout", "auth< OUT");
link("init >otout", "init< OUT");
link("init >encodings", "encodings");
link("init >pixel_format", "pixel_format");
link("encodings", "encodings< OUT");
link("pixel_format", "pixel_format< OUT");
// Link main elements
link("message_handler >bell", "bell");
link("message_handler >clipboard", "clipboard");
link("message_handler >pixels", "pixels");
link("message_handler >fbur", "fbur");
link("fbur", "fbur< queue");
link("keyboard", "keyboard_adapter", "keyboard< queue");
link("mouse", "mouse_adapter", "mouse< queue");
link("queue", "OUT");
}
}