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