BootStrapper.java
上传用户:xiekaiwei
上传日期:2015-07-04
资源大小:620k
文件大小:2k
源码类别:

Telnet客户端

开发平台:

Java

  1. package org.tn5250j;
  2. import java.net.*;
  3. import java.io.*;
  4. import java.util.Vector;
  5. import org.tn5250j.event.*;
  6. public class BootStrapper extends Thread {
  7.    private Socket socket = null;
  8.    private ServerSocket serverSocket = null;
  9.    boolean listening = true;
  10.    private Vector listeners;
  11.    private BootEvent bootEvent;
  12.    public BootStrapper() {
  13.       super("BootStrapper");
  14.       try {
  15.          serverSocket = new ServerSocket(3036);
  16.       }
  17.       catch (IOException e) {
  18.          System.err.println("Could not listen on port: 3036.");
  19.       }
  20.    }
  21.    public void run() {
  22.       System.out.println("BootStrapper listening");
  23.       while (true) {
  24.          listen();
  25.          getNewSessionOptions();
  26.          System.out.println("got one");
  27.       }
  28.    }
  29.    /**
  30.     * Add a BootListener to the listener list.
  31.     *
  32.     * @param listener  The BootListener to be added
  33.     */
  34.    public synchronized void addBootListener(BootListener listener) {
  35.       if (listeners == null) {
  36.           listeners = new java.util.Vector(3);
  37.       }
  38.       listeners.addElement(listener);
  39.    }
  40.    /**
  41.     * Notify all registered listeners of the BootEvent.
  42.     *
  43.     */
  44.    private void fireBootEvent() {
  45.     if (listeners != null) {
  46.       int size = listeners.size();
  47.       for (int i = 0; i < size; i++) {
  48.          BootListener target =
  49.                     (BootListener)listeners.elementAt(i);
  50.          target.bootOptionsReceived(bootEvent);
  51.       }
  52.     }
  53.    }
  54.    /**
  55.     * Listen for a connection from another tn5250j session starting.
  56.     */
  57.    private void listen() {
  58.       try {
  59.          socket = serverSocket.accept();
  60.       }
  61.       catch (IOException ioe) {
  62.          System.out.println(this.getName() + ": " + ioe.getMessage());
  63.       }
  64.    }
  65.    /**
  66.     * Retrieve the boot options from the other JVM wanting to start a new
  67.     *    session.
  68.     */
  69.    private void getNewSessionOptions() {
  70.       try {
  71.          BufferedReader in = new BufferedReader(
  72.                               new InputStreamReader(
  73.                               socket.getInputStream()));
  74.          bootEvent = new BootEvent(this,in.readLine());
  75.          System.out.println(bootEvent.getNewSessionOptions());
  76.          fireBootEvent();
  77.          in.close();
  78.          socket.close();
  79.       }
  80.       catch (IOException e) {
  81.          e.printStackTrace();
  82.       }
  83.    }
  84. }