src/java/isac/bridge/Clients2KernelServer.java
author mlang
Tue, 28 Jun 2005 13:14:03 +0200
changeset 2544 631fe7f467b7
parent 2450 e9695b3ac2ae
child 2708 b174da5b71f4
permissions -rw-r--r--
cosmetics part2
     1 /*
     2  * Created on Aug 21, 2003
     3  */
     4 package isac.bridge;
     5 
     6 /**
     7  * @author rgradisc
     8  */
     9 
    10 import java.io.IOException;
    11 import java.net.ServerSocket;
    12 import java.net.Socket;
    13 
    14 import org.apache.log4j.Logger;
    15 
    16 /**
    17  * Clients2KernelServer: runs in its own thread and handles the communication
    18  * from clients to the kernel
    19  * 
    20  * @author rgradisc
    21  */
    22 public class Clients2KernelServer implements Runnable {
    23 
    24     private ServerSocket server_ = null;
    25 
    26     private BridgeMain bridge_;
    27 
    28     static Logger logger_ = Logger.getLogger(Clients2KernelServer.class
    29             .getName());
    30 
    31     /**
    32      * Constructor: create a new Clients2KernelServer
    33      * 
    34      * @param bridge_
    35      */
    36     public Clients2KernelServer(BridgeMain bridge) {
    37         logger_.warn("Clients2KernelServer: bridge_=" + bridge);
    38         this.bridge_ = bridge;
    39     }
    40 
    41     /**
    42      * Listen on socket: Wait for clients to connect to bridge_, and once the
    43      * connect, start a new ClientOutputWorker that sends the XML-output back to
    44      * the client
    45      */
    46     public void listenSocket() {
    47         ClientOutputWorker w;
    48         Socket socket;
    49         try {
    50             server_ = new ServerSocket(bridge_.getSocketPort());
    51         } catch (IOException e) {
    52             bridge_.log(1, "Could not listen on port "
    53                     + bridge_.getSocketPort());
    54             System.out.println("Could not listen on port "
    55                     + bridge_.getSocketPort());
    56             System.exit(-1);
    57         }
    58         while (true) {
    59             try {
    60                 //TODO id should be fetched from the BridgeMain:
    61                 //smallestFreeBridgeRmiID
    62                 //(so far: only one BridgeRMI)
    63                 int id = 1;
    64                 socket = server_.accept(); // wait for client connections
    65                 bridge_.log(1, "connection received");
    66                 w = new ClientOutputWorker(id, socket, bridge_);
    67                 Thread t = new Thread(w, "java_bridge_clientworker" + id);
    68                 t.setDaemon(true);
    69                 t.start();
    70                 bridge_.log(1, "new Client accepted, id=" + id);
    71                 //TODO if to much load, start new kernel: e.g.
    72                 // bridge_.startNewKernel();
    73 
    74             } catch (IOException e) {
    75                 bridge_.log(1, "Accept failed on port"
    76                         + bridge_.getSocketPort());
    77                 System.out.println("Accept failed on port"
    78                         + bridge_.getSocketPort());
    79                 //Quit program: could not connect to port
    80                 System.exit(-1);
    81             }
    82         }
    83     }
    84 
    85     /**
    86      * This starts the Client2KernelServer thread
    87      */
    88     public void run() {
    89         listenSocket();
    90         try {
    91             bridge_.log(1, "Clients2KernelServer: Cleaning up...");
    92             server_.close();
    93 
    94         } catch (IOException e) {
    95             bridge_.log(1, "Could not close socket");
    96             System.exit(-1);
    97         }
    98         bridge_.log(1, "Done cleaning up");
    99     }
   100 }