commit 3afd356009ef29d454cc6e146ff38ec5ae73885b from: marcus date: Thu Jan 11 19:00:34 2001 UTC datasink plugin if you don't need output commit - 0e73655202a58ddf97347184c6e94980a8031fa8 commit + 3afd356009ef29d454cc6e146ff38ec5ae73885b blob - /dev/null blob + e9c5d6b7289a1abf3d6d8d8e3a5950b7d6e94ac9 (mode 644) --- /dev/null +++ de/mud/jta/plugin/Sink.java @@ -0,0 +1,137 @@ +/* + * This file is part of "The Java Telnet Application". + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * "The Java Telnet Application" is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +package de.mud.jta.plugin; + +import de.mud.jta.Plugin; +import de.mud.jta.PluginConfig; +import de.mud.jta.FilterPlugin; +import de.mud.jta.VisualTransferPlugin; +import de.mud.jta.PluginBus; + +import de.mud.jta.event.ConfigurationListener; +import de.mud.jta.event.OnlineStatusListener; +import de.mud.jta.event.TerminalTypeListener; +import de.mud.jta.event.WindowSizeListener; +import de.mud.jta.event.LocalEchoListener; +import de.mud.jta.event.FocusStatus; +import de.mud.jta.event.ReturnFocusListener; +import de.mud.jta.event.AppletListener; +import de.mud.jta.event.SoundRequest; +import de.mud.jta.event.TelnetCommandRequest; + +import java.awt.Component; +import java.awt.Panel; +import java.awt.BorderLayout; +import java.awt.Menu; +import java.awt.MenuItem; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Color; +import java.awt.Scrollbar; +import java.awt.Cursor; + +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; +import java.awt.event.FocusListener; +import java.awt.event.FocusEvent; + +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.ClipboardOwner; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.DataFlavor; + +import java.io.IOException; +import java.io.InputStream; + +import java.net.URL; +import java.net.MalformedURLException; + +import java.util.Properties; +import java.util.Hashtable; +import java.util.Enumeration; + +/** + * The terminal plugin represents the actual terminal where the + * data will be displayed and the gets the keyboard input to sent + * back to the remote host. + *

+ * Maintainer: Matthias L. Jugel + * + * @version $Id$ + * @author Matthias L. Jugel, Marcus Meißner + */ +public class Sink extends Plugin + implements FilterPlugin, Runnable { + + private final static int debug = 0; + + private Thread reader = null; + + public Sink(final PluginBus bus, final String id) { + super(bus, id); + // register an online status listener + bus.registerPluginListener(new OnlineStatusListener() { + public void online() { + if(debug > 0) System.err.println("Terminal: online "+reader); + if(reader == null) { + reader = new Thread(); + reader.start(); + } + } + + public void offline() { + if(debug > 0) System.err.println("Terminal: offline"); + if(reader != null) + reader = null; + } + }); + } + + /** + * Continuously read from our back end and display the data on screen. + */ + public void run() { + byte[] t, b = new byte[256]; + int n = 0; + while(n >= 0) try { + n = read(b); + /* drop the bytes into the sink :) */ + } catch(IOException e) { + reader = null; + break; + } + } + + protected FilterPlugin source; + + public void setFilterSource(FilterPlugin source) { + if(debug > 0) System.err.println("Terminal: connected to: "+source); + this.source = source; + } + + public int read(byte[] b) throws IOException { + return source.read(b); + } + + public void write(byte[] b) throws IOException { + source.write(b); + } +}