Package de.mud.jta

Source Code of de.mud.jta.SmallApplet

/*
* This file is part of "JTA - Telnet/SSH for the JAVA(tm) platform".
*
* (c) Matthias L. Jugel, Marcus Meißner 1996-2005. All Rights Reserved.
*
* Please visit http://javatelnet.org/ for updates and contact.
*
* --LICENSE NOTICE--
* This program 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
* of the License, or (at your option) any later version.
*
* This program 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 program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* --LICENSE NOTICE--
*
*/
package de.mud.jta;

import de.mud.telnet.TelnetProtocolHandler;
import de.mud.terminal.SwingTerminal;
import de.mud.terminal.vt320;
import de.mud.terminal.SwingTerminal;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
* <B>Small Telnet Applet implementation</B><P>
* <P>
* <B>Maintainer:</B> Matthias L. Jugel
*
* @version $Id: SmallApplet.java 499 2005-09-29 08:24:54Z leo $
* @author Matthias L. Jugel, Marcus Mei�ner
*/
public class SmallApplet extends java.applet.Applet implements Runnable {

  private final static int debug = 0;

  /** hold the host and port for our connection */
  private String host, port;

  /** hold the socket */
  private Socket socket;
  private InputStream is;
  private OutputStream os;

  private Thread reader;

  /** the terminal */
  private vt320 emulation;
  private SwingTerminal terminal;

  /** the telnet protocol handler */
  private TelnetProtocolHandler telnet;

  private boolean localecho = false;

  /**
   * Read all parameters from the applet configuration and
   * do initializations for the plugins and the applet.
   */
  public void init() {
    if (debug > 0) System.err.println("jta: init()");

    host = getParameter("host");
    port = getParameter("port");


    // we now create a new terminal that is used for the system
    // if you want to configure it please refer to the api docs
    emulation = new vt320() {
      /** before sending data transform it using telnet (which is sending it) */
      public void write(byte[] b) {
        try {
          if (localecho)
            emulation.putString(new String(b));
          telnet.transpose(b);
        } catch (IOException e) {
          System.err.println("jta: error sending data: " + e);
        }
      }
    };

    terminal = new SwingTerminal(emulation);

    // put terminal into the applet
    setLayout(new BorderLayout());
    add("Center", terminal);

    // then we create the actual telnet protocol handler that will negotiate
    // incoming data and transpose outgoing (see above)
    telnet = new TelnetProtocolHandler() {
      /** get the current terminal type */
      public String getTerminalType() {
        return emulation.getTerminalID();
      }

      /** get the current window size */
      public Dimension getWindowSize() {
        return new Dimension(emulation.getColumns(), emulation.getRows());
      }

      /** notify about local echo */
      public void setLocalEcho(boolean echo) {
        localecho = true;
      }

      /** notify about EOR end of record */
      public void notifyEndOfRecord() {
        // only used when EOR needed, like for line mode
      }

      /** write data to our back end */
      public void write(byte[] b) throws IOException {
        os.write(b);
      }
    };
  }

  boolean running = false;

  /**
   * Start the applet. Connect to the remote host.
   */
  public void start() {
    if (debug > 0)
      System.err.println("jta: start()");
    // disconnect if we are already connected
    if (socket != null) stop();

    try {
      // open new socket and get streams
      socket = new Socket(host, Integer.parseInt(port));
      is = socket.getInputStream();
      os = socket.getOutputStream();

      reader = new Thread(this);
      running = true;
      reader.start();

    } catch (Exception e) {
      System.err.println("jta: error connecting: " + e);
      stop();
    }
  }

  /**
   * Stop the applet and disconnect.
   */
  public void stop() {
    if (debug > 0)
      System.err.println("jta: stop()");
    // when applet stops, disconnect
    if (socket != null) {
      try {
        socket.close();
      } catch (Exception e) {
        System.err.println("jta: could not cleanly disconnect: " + e);
      }
      socket = null;
      try {
        running = false;
      } catch (Exception e) {
        // ignore
      }
      reader = null;
    }
  }

  /**
   * Continuously read from remote host and display the data on screen.
   */
  public void run() {
    if (debug > 0)
      System.err.println("jta: run()");
    byte[] b = new byte[256];
    int n = 0;
    while (running && n >= 0)
      try {
        do {
          n = telnet.negotiate(b);
          if (debug > 0 && n > 0)
            System.err.println("jta: \"" + (new String(b, 0, n)) + "\"");
          if (n > 0) emulation.putString(new String(b, 0, n));
        } while (running && n > 0);
        n = is.read(b);
        telnet.inputfeed(b, n);
      } catch (IOException e) {
        stop();
        break;
      }
  }

  public void update(Graphics g) {
    paint(g);
  }
}
TOP

Related Classes of de.mud.jta.SmallApplet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.