// 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"); } }