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.ServerSocket; import java.net.Socket; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Observable; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Marian */ public class Server extends Observable implements Runnable { private int port; private ServerSocket server; private Socket client; private static Logger logger = OhmLogger.getLogger(); private BufferedReader reader; private PrintWriter writer; private volatile boolean ready; private Thread thd; private static final SimpleDateFormat sdf = new SimpleDateFormat("HH.mm.ss"); public Server(int port) { this.port = port; this.server = null; this.client = 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(); } } @Override public void run() { logger.info("Running server..."); while (true) { if (server == null) { try { server = new ServerSocket(port); } catch (IOException e) { logger.severe(e.toString()); return; } logger.info("Waiting for client to connect"); try { client = server.accept(); } catch (IOException e) { logger.severe(e.toString()); return; } logger.info("Client connected"); InputStream iStream; try { iStream = client.getInputStream(); } catch (IOException e) { logger.severe(e.toString()); return; } OutputStream oStream; try { oStream = client.getOutputStream(); } catch (IOException e) { logger.severe(e.toString()); return; } InputStreamReader isr; try { isr = new InputStreamReader(iStream, "UTF-8"); } catch (UnsupportedEncodingException e) { logger.severe(e.toString()); return; } OutputStreamWriter osr; try { osr = new OutputStreamWriter(oStream, "UTF-8"); } catch (UnsupportedEncodingException e) { logger.severe(e.toString()); return; } reader = new BufferedReader(isr); writer = new PrintWriter(osr); ready = true; } if (ready) { try { logger.info("Waiting for message"); String msg = reader.readLine(); if (msg == null) { ready = false; continue; } this.setChanged(); this.notifyObservers(msg); } catch (IOException e) { logger.severe(e.toString()); ready = false; continue; } } } } public void sendMessage(String msg) { if (ready) { writer.println(msg); writer.flush(); } else { logger.warning("Server not ready to send message. Connect first"); } } }