Jump to content

Server.java

From EDM2
import java.util.*;

public class Server {

    private int          port;
    private Vector       socketVec;
    private ServerDaemon daemon;

    /* Constructor Server. */
    public Server(String[] args) {

        if (args.length > 0) {
            try {
                port = java.lang.Integer.parseInt(args[0]);

            } catch (NumberFormatException e) {
                System.out.println("ERROR: "
                    + args[0] + " : " + e.getMessage());
                System.exit(0);
            }
        } else {
            port = 2015;  // default value
        }

        socketVec = new Vector(50);
    }

    // Simply starts the server daemon
    private void startServer() {
        try {
            daemon = new ServerDaemon(this, port);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // add a connection to the vector
    public void addMySocket(MyServerSocket s) {
        socketVec.addElement(s);
    }

    // remove a connection from vector
    public synchronized void loggedOf(MyServerSocket s) {
        socketVec.removeElement(s);
    }

    // method handleMessage
    public synchronized void handleMessage(String line,
                                           MyServerSocket s) {

        if (line.toLowerCase().equals("wwhhoo")) {
            MyServerSocket oth;
            for (int i = 0; i < socketVec.size(); i++) {
                oth = (MyServerSocket) socketVec.elementAt(i);

                if (s != oth)
                    s.sendMessage(oth.getIP());
            }

        } else {
            broadCast(line);
        }
    }

    private synchronized void broadCast(String message) {
        MyServerSocket s;
        for (int i = 0; i < socketVec.size(); i++) {
            s = (MyServerSocket) socketVec.elementAt(i);
            s.sendMessage(message);
        }
    }

    private void cleaner() {
        long sleepTime = 1000L // milliseconds
                         * 60  // seconds
                         * 10; // minutes
        while (true) {
            try {
                Thread.sleep(sleepTime);

                long compTime =
                    System.currentTimeMillis()
                        - sleepTime;

                for (int i = 0; i < socketVec.size();   ) {
                    MyServerSocket s;
                    s = (MyServerSocket) socketVec.elementAt(i);

                    if ( !s.isInactive(compTime)) {
                        i++;
                    }
                }

            } catch (Throwable e) {}
        } // end while
    }

    public static void main(String[] args) {
        Server serv = new Server(args);
        serv.startServer();
        serv.cleaner();
    }
}