/
ScryMUD/mud/
ScryMUD/mud/grrmud/Boards/
ScryMUD/mud/grrmud/Help/
ScryMUD/mud/grrmud/Pfiles/
ScryMUD/mud/grrmud/PlayerSacks/
ScryMUD/mud/grrmud/PlayerShops/
ScryMUD/mud/grrmud/help_filter/
ScryMUD/mud/hegemon/
ScryMUD/mud/hegemon/data/
ScryMUD/mud/hegemon/data/help/battle/
ScryMUD/mud/hegemon/data/help/client/
ScryMUD/mud/hegemon/data/help/communications/
ScryMUD/mud/hegemon/data/help/skills/
ScryMUD/mud/hegemon/data/help/spells/
ScryMUD/mud/include/
ScryMUD/mud/lib/
ScryMUD/mud/lib/bitfield/
ScryMUD/mud/lib/log/
ScryMUD/mud/lib/string2/
// $Id: ConnectionManager.java,v 1.6 1999/06/23 04:16:05 greear Exp $
// $Revision: 1.6 $  $Author: greear $ $Date: 1999/06/23 04:16:05 $

//
//Hegemon Client Code:  Java Client for ScryMUD Server Code
//Copyright (C) 1998  Ben Greear
//
//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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// To contact the Author, Ben Greear:  greear@cyberhighway.net, (preferred)
//                                     greearb@agcs.com
//

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

class ConnectionManager extends Frame {
   java.awt.List hosts;
   HegemonManager hm;
   
   public ConnectionManager(HegemonManager h) {
      super("Connection Manager");
      hosts = new java.awt.List(10, false);
      hm = h;

      hosts.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            do_done();
            hm.openConnection();
         }});

      addWindowListener (new WindowAdapter () {
         public void windowClosing (WindowEvent e) {
            do_done();
         }});


      try {
         readObject();
      }
      catch (IOException e) {
         Log.instance().err("ConnectionManager:  " + e);
      }
      
      setLayout(new BorderLayout());
      add(hosts, "North");
      add(new CMButtons(this), "South");
      pack();
   }

   public void addHost(HostAddr ha) {
      hosts.addItem(ha.toString());
   }

   public void addHost(String str) {
      hosts.addItem(str);
      try {
         writeObject();
      }
      catch (IOException e) {
         Log.instance().err("addHost:  " + e);
      }
   }
   
   public void createConnection() {
      HostDialog hd = new HostDialog(this, new HostAddr());
      hd.show();
   }

   private String getSelected() {
      return hosts.getSelectedItem(); //can be null
   }

   public String getHostname() {
      String str = getSelected();

      try {
         if (str == null) {
            str = hosts.getItem(0);
         }
         
         HostAddr ha = new HostAddr(str);
         return ha.getHostName();
      }
      catch (Exception e) {
         return "scry.wanfear.com"; //hard code a working value
      }
   }//getHostName


   public int getPortnum() {
      String str = getSelected();

      try {
         if (str == null) {
            str = hosts.getItem(0);
         }

         HostAddr ha = new HostAddr(str);
         return ha.getPortNum();
      }
      catch (Exception e) {
         return 4444;
      }
   }//getHostName

   public void do_delete() {
      String str;
      if ((str = hosts.getSelectedItem()) != null) {
         hosts.remove(str);
         try {
            writeObject();
         }
         catch (IOException e) {
            Log.instance().err("ERROR:  could not write out Servers file: " + e);
         }
      }
      else {
        MessageDialog md =
          new MessageDialog("Connection Manager",
                            "You need to select a connection to delete.",
                            "red", "black");
      }
   }

   public void do_new() {
      createConnection();
   }

   public void do_done() {
      setVisible(false);
   }

   public void do_edit() {
      String str;
      if ((str = hosts.getSelectedItem()) != null) {
         hosts.remove(str); //editing will re-add it
         HostDialog hd = new HostDialog(this, new HostAddr(str));
         hd.show();
      }
      else {
        MessageDialog md =
          new MessageDialog("Connection Manager",
                            "You need to select a connection to edit.",
                            "red", "black");
      }
   }//do_edit

   /** Writes it all to disk, for later retrieval by readObject() */
   public void writeObject() throws IOException {
      if (hm.IS_APPLET)
         return;
      
      BOStream ostream =
         new BOStream(new FileOutputStream(hm.getProperties().getProperty("HostFile")));
      String[] entries = hosts.getItems();
      int len = entries.length;
      try {
         for (int i = 0; i<len; i++) {
            ostream.write(entries[i]);
            ostream.write("\n~\n");
         }//for
      }//try
      catch (Exception e) {
         MessageDialog md =
           new MessageDialog("Write Failure",
                             "Failed to write hosts to disk: " +
                             e, "red", "black");
      }//catch
   }//writeObject

   /**  Read it in from a file specified in the hegemon.rc */
   public void readObject() throws IOException {
      BIStream istream;
      String conn_file = hm.getProperties().getProperty("HostFile");

      if (hm.IS_APPLET) {
         URL url = new URL(conn_file);
         istream = new BIStream(url.openStream());
      }
      else {
         istream = new BIStream(new FileInputStream(conn_file));
      }

      String rslt;
      StringBuffer action = new StringBuffer(200);
      
      try {
         while ((rslt = istream.readLine()) != null) {
            if ((rslt.trim()).equals("~")) {
               hosts.addItem((action.toString()).trim());
               action = new StringBuffer(200);
            }
            else {
               action.append(rslt + " ");
            }
         }//while
      }//try
      catch (Exception e) {
         Log.instance().err("in ConnectionManager.readObject():  " + e);
      }
   }//readObject

}//ConnectionManager


class CMButtons extends Panel {
   ConnectionManager parent;

   public CMButtons(ConnectionManager par) {
      super();
      parent = par;

      Button done_b = new Button("Done");
      Button edit_b = new Button("Edit");
      Button new_b = new Button("New");
      Button delete_b = new Button("Delete");

      done_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_done();
         }});

      edit_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_edit();
         }});

      new_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_new();
         }});

      delete_b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            parent.do_delete();
         }});
   
      setLayout(new FlowLayout());

      add(new_b);
      add(edit_b);
      add(delete_b);
      add(done_b);
   }//constructor for CMButtons
}//CMButtons