thufir

controller

Sep 4th, 2013
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.44 KB | None | 0 0
  1. package telnet;
  2.  
  3. import static java.lang.System.out;
  4. import java.io.IOException;
  5. import java.io.OutputStream;
  6. import java.net.InetAddress;
  7. import java.net.SocketException;
  8. import java.net.UnknownHostException;
  9. import java.util.Iterator;
  10. import java.util.Observable;
  11. import java.util.Observer;
  12. import java.util.Properties;
  13. import java.util.concurrent.ConcurrentLinkedQueue;
  14. import org.apache.commons.net.telnet.TelnetClient;
  15.  
  16. public final class Controller implements Runnable, Observer {
  17.  
  18.     private TelnetClient telnetClient = new TelnetClient();
  19.     private InputStreamWorker remoteOutputWorker = new InputStreamWorker();
  20.     private ConsoleReader localInputReader = new ConsoleReader();
  21.     private CharacterDataQueueWorker remoteDataQueueWorker = new CharacterDataQueueWorker();
  22.     private Regex remoteOutputMessageWorker = new Regex();
  23.     private final ConcurrentLinkedQueue<Character> remoteCharDataQueue = new ConcurrentLinkedQueue();
  24.     private final ConcurrentLinkedQueue<Command> commandsQueue = new ConcurrentLinkedQueue();
  25.  
  26.     private Controller() {
  27.     }
  28.  
  29.     public void readPrintParse() throws SocketException, IOException {
  30.         remoteOutputWorker.print(telnetClient.getInputStream(), remoteCharDataQueue);
  31.         localInputReader.read();
  32.         localInputReader.addObserver(this);
  33.         remoteDataQueueWorker.read(remoteCharDataQueue);
  34.         remoteDataQueueWorker.addObserver(this);
  35.     }
  36.  
  37.     private void sendCommands() {
  38.         String commandString = null;
  39.         Iterator it = commandsQueue.iterator();
  40.         byte b = 10;
  41.         byte[] commandBytes = null;
  42.         OutputStream outputStream = telnetClient.getOutputStream();
  43.         while (it.hasNext()) {
  44.             try {
  45.                 Command command = commandsQueue.remove();
  46.                 commandString = command.getCommand();
  47.                 commandBytes = commandString.getBytes();
  48.                 outputStream.write(commandBytes);
  49.                 outputStream.write(10);
  50.                 outputStream.flush();
  51.             } catch (IOException ex) {
  52.                 out.println("sendCommand\n" + ex);
  53.             }
  54.         }
  55.     }
  56.  
  57.     @Override
  58.     public void update(Observable o, Object arg) {
  59.  
  60.         if (o instanceof CharacterDataQueueWorker) {
  61.             String remoteOutputMessage = remoteDataQueueWorker.getFinalData();
  62.             remoteOutputMessageWorker.parse(remoteOutputMessage);
  63.             sendCommands();
  64.         }
  65.  
  66.         if (o instanceof ConsoleReader) {
  67.             String commandString = localInputReader.getCommand();
  68.             Command command = new Command(commandString);
  69.             commandsQueue.add(command);
  70.             sendCommands();
  71.         }
  72.     }
  73.  
  74.     @Override
  75.     public void run() {
  76.         try {
  77.             Properties props = PropertiesReader.getProps();
  78.             InetAddress host = InetAddress.getByName(props.getProperty("host"));
  79.             int port = Integer.parseInt(props.getProperty("port"));
  80.             telnetClient.connect(host, port);
  81.             // outputStream = telnetClient.getOutputStream();
  82.             readPrintParse();
  83.         } catch (UnknownHostException ex) {
  84.             out.println(ex);
  85.         } catch (SocketException ex) {
  86.             out.println(ex);
  87.         } catch (IOException ex) {
  88.             out.println(ex);
  89.         }
  90.     }
  91.  
  92.     public static void main(String[] args) throws SocketException, IOException {
  93.         new Controller().run();
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment