123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- 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;
-
- 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("Server running");
-
- while (true)
- {
- if (server == null)
- {
- try
- {
- server = new ServerSocket(port);
- }
- catch (IOException e)
- {
- logger.severe(e.toString());
- return;
- }
-
- logger.info("Waiting for client");
- 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;
- }
- }
- }
- }
-
- public void sendMessage(String msg)
- {
- if (ready)
- {
- writer.println(msg);
- writer.flush();
- } else
- {
- logger.warning("Server not ready");
- }
- }
-
- }
|