/* * ClientListener.java * * Created on den 2 september 2001, 11:23 */ package ip1.u3.b; import java.io.*; /** ClientListener lyssnar efter meddelanden från en klient samt sänder medelanden från * servern till klienten. * En ClientListener skapas för varje ansluten klient. När ett mefddelande tas emot * anropas kontrollklassens broadcast-metod med meddelandet och klientens address som * argument. * * @author Henrik Johansson, DS80 * @version ht2001 */ public class ClientListener implements Runnable { private java.net.Socket socket = null; private String ip = null; private ChatServer server = null; private PrintWriter output = null; private BufferedReader input = null; /** Skapar en ny ClientListener * *@param server Kontrollklassen *@param socket Socketen som har kontakt med klienten. */ public ClientListener(ChatServer server, java.net.Socket socket) { this.server = server; this.socket = socket; ip = getInetAddress(); (new Thread(this)).start(); } /** Returnerar klientens adress * *@return Klientens adress. */ public String getInetAddress() { return socket.getInetAddress().getHostName().toLowerCase(); } /** Skickar ett meddelande till klienten * *@param messge Meddelandet som skall sändas till klienten. */ protected void sendMessage(String message) { output.println(message); } /** Stänger in och utströmmarna, samt socketen.*/ protected void close() { try { output.close(); input.close(); socket.close(); } catch (IOException e) { } } public void run() { String message; ip = getInetAddress(); try{ output = new PrintWriter(socket.getOutputStream(), true); input = new BufferedReader(new InputStreamReader(socket.getInputStream())); server.add(this); while((message = input.readLine()) != null) { server.broadcast(ip, message); } close(); } catch(IOException e) { System.err.println(e.getMessage()); } server.remove(this); } }