package ru.gravit.launchserver.manangers;

import java.util.HashSet;
import java.util.Set;

import ru.gravit.launcher.LauncherAPI;
import ru.gravit.launcher.NeedGarbageCollection;
import ru.gravit.launchserver.socket.Client;

public class SessionManager implements NeedGarbageCollection {

    public static final long SESSION_TIMEOUT = 10 * 60 * 1000; // 10 минут
    public static final boolean NON_GARBAGE_SERVER = true;
    private Set<Client> clientSet = new HashSet<>(128);


    public boolean addClient(Client client) {
        clientSet.add(client);
        return true;
    }

    @Override

    public void garbageCollection() {
        long time = System.currentTimeMillis();
        clientSet.removeIf(c -> (c.timestamp + SESSION_TIMEOUT < time)  && ((c.type == Client.Type.USER) || ((c.type == Client.Type.SERVER) && !NON_GARBAGE_SERVER ) ));
    }


    public Client getClient(long session) {
        for (Client c : clientSet)
            if (c.session == session) return c;
        return null;
    }


    public Client getOrNewClient(long session) {
        for (Client c : clientSet)
            if (c.session == session) return c;
        Client newClient = new Client(session);
        clientSet.add(newClient);
        return newClient;
    }


    public void updateClient(long session) {
        for (Client c : clientSet) {
            if (c.session == session) {
                c.up();
                return;
            }
        }
        Client newClient = new Client(session);
        clientSet.add(newClient);
    }
}
