⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mudconnector.java

📁 The Javatm Telnet Application/Applet 很好用的
💻 JAVA
字号:
/* * This file is part of "The Java Telnet Application". * * (c) Matthias L. Jugel, Marcus Mei遪er 1996-2002. 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.plugin;import de.mud.jta.Plugin;import de.mud.jta.PluginBus;import de.mud.jta.PluginConfig;import de.mud.jta.VisualPlugin;import de.mud.jta.event.ConfigurationListener;import de.mud.jta.event.ReturnFocusListener;import de.mud.jta.event.SocketRequest;import javax.swing.JButton;import javax.swing.JComponent;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JMenu;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.JScrollPane;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Dimension;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Image;import java.awt.MenuItem;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.StreamTokenizer;import java.net.URL;import java.util.Map;import java.util.HashMap;import java.util.Collections;import java.util.List;import java.util.ArrayList;/** * The MudConnector (http://www.mudconnector.com) plugin. The plugin will * download a list of MUDs from a special list availabe at the url above * and the user can select the mud and connect to it. This usually requires * the relayd program to be run on the web server as this plugin tries to * establish connections to other hosts than the web server. * <P> * <B>Maintainer:</B> Matthias L. Jugel * * @version $Id: MudConnector.java,v 2.9 2002/05/06 07:24:20 leo Exp $ * @author Matthias L. Jugel, Marcus Mei遪er */public class MudConnector        extends Plugin        implements VisualPlugin, Runnable, ActionListener {  /** debugging level */  private final static int debug = 0;  protected URL listURL = null;  protected int step;  protected Map mudList = null;  protected JList mudListSelector = new JList();  protected JTextField mudName, mudAddr, mudPort;  protected JButton connect;  protected JPanel mudListPanel;  protected CardLayout layouter;  protected ProgressBar progress;  protected JLabel errorLabel;  protected JMenu MCMenu;  /**   * Implementation of a progress bar to display the progress of   * loading the mud list.   */  class ProgressBar extends JComponent {    int max, current;    String text;    Dimension size = new Dimension(250, 20);    Image backingStore;    public void setMax(int max) {      this.max = max;    }    public void update(Graphics g) {      paint(g);    }    public void paint(Graphics g) {      if (backingStore == null) {        backingStore = createImage(getSize().width, getSize().height);        redraw();      }      g.drawImage(backingStore, 0, 0, this);    }    private void redraw() {      if (backingStore == null || text == null) return;      Graphics g = backingStore.getGraphics();      int width = (int) (((float) current / (float) max) * getSize().width);      g.fill3DRect(0, 0, getSize().width, getSize().height, false);      g.setColor(getBackground());      g.fill3DRect(0, 0, width, getSize().height, true);      g.setColor(getForeground());      g.setXORMode(getBackground());      String percent = "" + (current * 100 / (max > 0?max:1))                      + "% / " + current + " of "+max;      g.drawString(percent,                   getSize().width / 2 -                   getFontMetrics(getFont()).stringWidth(percent) / 2,		   getSize().height / 2);      g.drawString(text,                   getSize().width / 2 -                   getFontMetrics(getFont()).stringWidth(text) / 2,                   getSize().height / 2 + 12);      paint(getGraphics());    }    public void adjust(int value, String name) {      if ((current = value) > max)        current = max;      text = name;      if (((float) current / (float) step) == (int) (current / step))        redraw();    }    public void setSize(int width, int height) {      size = new Dimension(width, height);    }    public Dimension getPreferredSize() {      return size;    }    public Dimension getMinimumSize() {      return size;    }  }  /**   * Create the list plugin and get the url to the actual list.   */  public MudConnector(final PluginBus bus, final String id) {    super(bus, id);    bus.registerPluginListener(new ConfigurationListener() {      public void setConfiguration(PluginConfig config) {        String url =                config.getProperty("MudConnector", id, "listURL");        if (url != null) {          try {            listURL = new URL(url);          } catch (Exception e) {            MudConnector.this.error("" + e);            errorLabel.setText("Error: " + e);          }        } else {          MudConnector.this.error("no listURL specified");          errorLabel.setText("Missing list URL");          layouter.show(mudListPanel, "ERROR");        }        String sstep = config.getProperty("MudConnector", id, "step");        try {          step = Integer.parseInt(sstep);        } catch (Exception e) {          if (sstep != null)            MudConnector.this.error("warning: " + sstep + " is not a number");          step = 10;        }      }    });    bus.registerPluginListener(new ReturnFocusListener() {      public void returnFocus() {        setup();      }    });    mudListPanel = new JPanel(layouter = new CardLayout()) {      public void update(java.awt.Graphics g) {        paint(g);      }    };    mudListPanel.add("ERROR", errorLabel = new JLabel("Loading ..."));    JPanel panel = new JPanel(new BorderLayout());    panel.add("North", new JLabel("Loading mud list ... please wait"));    panel.add("Center", progress = new ProgressBar());    mudListPanel.add("PROGRESS", panel);    panel = new JPanel(new BorderLayout());    JScrollPane scrollPane = new JScrollPane(mudListSelector);    panel.add("Center", scrollPane);    mudListPanel.add("MUDLIST", panel);    panel.add("East", panel = new JPanel(new GridLayout(3, 1)));    panel.add(mudName = new JTextField(20));    mudName.setEditable(false);    JPanel apanel = new JPanel(new BorderLayout());    apanel.add("Center", mudAddr = new JTextField(20));    mudAddr.setEditable(false);    apanel.add("East", mudPort = new JTextField(6));    mudPort.setEditable(false);    panel.add(apanel);    panel.add(connect = new JButton("Connect"));    connect.addActionListener(this);    mudListSelector.setVisibleRowCount(3);    mudListSelector.addListSelectionListener(new ListSelectionListener() {      public void valueChanged(ListSelectionEvent evt) {        JList list = (JList) evt.getSource();	list.ensureIndexIsVisible(list.getSelectedIndex());        String item = (String) list.getSelectedValue();        mudName.setText(item);        Object mud[] = (Object[]) mudList.get(item);        mudAddr.setText((String) mud[0]);        mudPort.setText(((Integer) mud[1]).toString());      }    });    layouter.show(mudListPanel, "PROGRESS");    MCMenu = new JMenu("MudConnector");  }  private void setup() {    if (mudList == null && listURL != null)      (new Thread(this)).start();  }  public void run() {    try {      Map menuList = new HashMap();      mudList = new HashMap();      BufferedReader r =              new BufferedReader(new InputStreamReader(listURL.openStream()));      String line = r.readLine();      int mudCount = 0;      try {        mudCount = Integer.parseInt(line);      } catch (NumberFormatException nfe) {        error("number of muds: " + nfe);      }      System.out.println("MudConnector: expecting " + mudCount + " mud entries");      progress.setMax(mudCount);      StreamTokenizer ts = new StreamTokenizer(r);      ts.resetSyntax();      ts.whitespaceChars(0, 9);      ts.ordinaryChars(32, 255);      ts.wordChars(32, 255);      String name, host;      Integer port;      int token, counter = 0, idx = 0;      while ((token = ts.nextToken()) != ts.TT_EOF) {        name = ts.sval;        if ((token = ts.nextToken()) != ts.TT_EOF) {          if (token == ts.TT_EOL)            error(name + ": unexpected end of line"                  + ", missing host and port");          host = ts.sval;          port = new Integer(23);          if ((token = ts.nextToken()) != ts.TT_EOF)            try {              if (token == ts.TT_EOL)                error(name + ": default port 23");              port = new Integer(ts.sval);            } catch (NumberFormatException nfe) {              error("port for " + name + ": " + nfe);            }          if (debug > 0)            error(name + " [" + host + "," + port + "]");          mudList.put(name, new Object[]{host, port, new Integer(idx++)});          progress.adjust(++counter, name);          mudListPanel.repaint();	  String key = (""+name.charAt(0)).toUpperCase();          JMenu subMenu = (JMenu) menuList.get(key);          if (subMenu == null) {            subMenu = new JMenu(key);            MCMenu.add(subMenu);            menuList.put(key, subMenu);          }          JMenuItem item = new JMenuItem(name);          item.addActionListener(MudConnector.this);          subMenu.add(item);        }        while (token != ts.TT_EOF && token != ts.TT_EOL)          token = ts.nextToken();      }      List list = new ArrayList(mudList.keySet());      Collections.sort(list);      mudListSelector.setListData(list.toArray());      System.out.println("MudConnector: found " + mudList.size() + " entries");    } catch (Exception e) {      error("error: " + e);      errorLabel.setText("Error: " + e);      layouter.show(mudListPanel, "ERROR");    }    layouter.show(mudListPanel, "MUDLIST");  }  public void actionPerformed(ActionEvent evt) {    if (evt.getSource() instanceof MenuItem) {      String item = evt.getActionCommand();      int idx = ((Integer) ((Object[]) mudList.get(item))[2]).intValue();      mudListSelector.setSelectedIndex(idx);      mudName.setText(item);      Object mud[] = (Object[]) mudList.get(item);      mudAddr.setText((String) mud[0]);      mudPort.setText(((Integer) mud[1]).toString());    }    String addr = mudAddr.getText();    String port = mudPort.getText();    if (addr != null) {      bus.broadcast(new SocketRequest());      if (port == null || port.length() <= 0)        port = "23";      bus.broadcast(new SocketRequest(addr, Integer.parseInt(port)));    }  }  public JComponent getPluginVisual() {    return mudListPanel;  }  public JMenu getPluginMenu() {    return MCMenu;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -