/* File: CommandThread.java
*
* Author: Venkata Sastry Malladi
*
* This file contains the code for the class CommandThread,
* which represents the thread spawned by each Router to
* listen for commands sent by the Command
*
* Preferred Editor: emacs
*/
import java.io.*;
import java.net.*;
class CommandThread extends Thread {
// the instance of the router that spawned this thread
Router r;
// the port on which the thread listens for commands from the Command
// program
int port;
/*
* Constructor
*
* @r: the instance of the router that spawned this thread @port: port
* number
*/
public CommandThread(Router r, int port,String threadName) {
// create the thread
super(threadName);
this.r = r;
this.port = port;
// start the thread;
start();
}
/*
* Method Name: run
*
* Use: To start the execution of the thread
*/
public void run() {
// socket to listen on the command port
ServerSocket l = null;
// socket to represent the accepted connection
Socket t;
// the input and output streams associated with the connection
ObjectOutputStream oos;
ObjectInputStream ois;
try {
// listen on the command port
l = new ServerSocket(port);
System.out.println("Router "+Thread.currentThread().getName()+" Command: Listening for commands on port "
+ port);
} catch (Exception e) {
System.out
.println("Router "+Thread.currentThread().getName()+" Command: Unable to open a listening socket on port: "
+ port);
System.out.println("Quitting.");
System.exit(1);
}
while (true) {
try {
// accept a connection
t = l.accept();
} catch (Exception e) {
System.out
.println("Router "+Thread.currentThread().getName()+" Command: An I/O error occured while accepting a connection");
continue;
}
try {
// open the streams
oos = new ObjectOutputStream(t.getOutputStream());
ois = new ObjectInputStream(t.getInputStream());
// read the command
String in = (String) ois.readObject();
// execute the command and send the response
String out = r.executeCommand(in);
oos.writeObject(out);
// close the streams and the connection
ois.close();
oos.close();
t.close();
} catch (Exception e) {
System.out
.println("Router "+Thread.currentThread().getName()+" Command: An I/O error occured while communicating with COMMAND");
continue;
}
}
}
}