package chatprogramm.model; import chatprogramm.logger.OhmLogger; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.util.Observable; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Marian */ public class Client extends Observable implements Runnable { private Socket socket; private BufferedReader reader; private PrintWriter writer; private boolean ready; private Thread thd; private String ip; private int port; private static Logger logger = OhmLogger.getLogger(); public Client(String ip, int port) { this.ip = ip; this.port = port; this.socket = null; this.reader = null; this.writer = null; this.ready = false; this.thd = null; } public void init() { if (thd == null) { thd = new Thread(this); thd.start(); } } public void sendMessage(String msg) { if (ready) { writer.println(msg); writer.flush(); } else { logger.warning("Server not ready to send message. Connect first"); } } @Override public void run() { logger.info("Running client..."); while (true) { if (socket == null) { try { socket = new Socket(ip, port); logger.info("Connected to server"); } catch (IOException e) { logger.severe(e.getMessage()); socket = null; try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } continue; } InputStream iStream; try { iStream = socket.getInputStream(); } catch (IOException e) { logger.severe(e.getMessage()); return; } OutputStream oStream; try { oStream = socket.getOutputStream(); } catch (IOException e) { logger.severe(e.getMessage()); return; } InputStreamReader isr; try { isr = new InputStreamReader(iStream, "UTF-8"); } catch (UnsupportedEncodingException e) { logger.severe(e.getMessage()); return; } OutputStreamWriter osr; try { osr = new OutputStreamWriter(oStream, "UTF-8"); } catch (UnsupportedEncodingException e) { logger.severe(e.getMessage()); return; } reader = new BufferedReader(isr); writer = new PrintWriter(osr); ready = true; } if (ready) { String msg; try { logger.info("Waiting for message"); msg = reader.readLine(); } catch (IOException e) { logger.severe(e.toString()); return; } this.setChanged(); this.notifyObservers(msg); } } } }