Jump to content

MyServerSocket.java

From EDM2
import java.net.*;
import java.io.*;

public class MyServerSocket extends Thread {

    private Socket sock;
    private Server owner;
    private long   lastTime;

    // constructor
    public MyServerSocket(Socket s, Server o) {
        sock  = s;
        owner = o;
        lastTime = System.currentTimeMillis();
    }

    // run that is started by the start call to JVM
    public void run() {

        sendMessage("Welcome to this server."
                    + " Log off with 'logout'.");

        sendMessage("Get the list of connected users"
                    + " with command 'wwhhoo'");

        try {
            BufferedReader bis = new BufferedReader(
                                  new InputStreamReader(
                                   sock.getInputStream()));

            String line;
            while ((line = bis.readLine()) != null) {

                lastTime = System.currentTimeMillis();

                if (line.toLowerCase().trim().
                        equals("logout")) {

                    break; // out from the while loop

                } else if (line.length() > 0) {
                    // skip empty lines
                    owner.handleMessage(line, this);
                }
            }

            sock.close();

        } catch (Exception e) { }

        owner.loggedOf(this);
    }

    public String getIP() {
        return (sock.getInetAddress().getHostAddress()
                + " at "
                + sock.getInetAddress().getHostName());
    }

    public void sendMessage(String txt) {

        try {
            PrintWriter pws = new PrintWriter(
                                sock.getOutputStream(),
                                true);

            pws.println(txt);
        } catch (IOException e) { }
    }

    public boolean isInactive(long time) {
        if (lastTime < time) {
            /* will cause an automatic logout in this
             * object's run method */
            try {
                sock.close();
            } catch (IOException e) {}
            return true;
        } else {
            return false;
        }
    }
}