package com.tlabs.labeltool; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; /** * tells the server to evaluate the classification model and informs the user * via message box.. * * @version 1.0 * @author Felix Burkhardt */ public class RecognitionThread extends Thread { /** * name of server's host. */ String servername; /** * to read a string. */ BufferedReader stringReader; /** * port where server listens. */ int portNum; /** * socket to connect. */ Socket s; /** * output stream. */ DataOutputStream out; /** * input stream */ DataInputStream in; /** * instance of applet needed by JOptionPane. */ IRecorder rec; Recording _recording; /** * @param fileName * name of file to send. * @param recipient * email of recipient. * @param servername * name of server's host. * @param portNum * port where server listens. * @param rec * main applet. */ public RecognitionThread(String servername, int portNum, IRecorder rec, Recording recording) { this.servername = servername; this.portNum = portNum; this.rec = rec; _recording = recording; } /** * called by thread.start(). */ public void run() { // open a connection openConnection(Constants.MODE_RECOGNIZE); // send filename and offset to server try { out.writeBytes(_recording.path + '\n'); } catch (IOException e) { System.out.println("unable to send data " + e); } stringReader = new BufferedReader(new InputStreamReader(in)); String receivedString = "", recoResultString = ""; try { while (!(receivedString = stringReader.readLine()) .equals("finished")) { recoResultString += receivedString + "\n"; } } catch (Exception e) { System.err.println("problem receiving send status: " + e); } // close closeConnection(); _recording.words = recoResultString; rec.getRecordings().fireTableDataChanged(); } /** * opens a connection and streams and sends mode number. */ private void openConnection(int modus) { try { s = new Socket(servername, portNum); System.out.println("Verbindung mit: " + s.getInetAddress()); out = new DataOutputStream(s.getOutputStream()); in = new DataInputStream(s.getInputStream()); } catch (UnknownHostException e) { System.err.println("Don't know about host: " + servername + ", " + e); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to host: " + servername + ", " + e); System.exit(-1); } // send modus code to server try { out.writeInt(modus); } catch (IOException e) { System.out.println("problem sending modus code: " + e); } } /** * closes the connection. */ private void closeConnection() { // Close the Streams and the socket. try { in.close(); out.close(); s.close(); } catch (Exception e) { System.err.println("problem closing streams and socket: " + e); } } }