FileFrontEnd/app/src/main/java/lightcontainer/repository/ClientHandlerRepository.java
Benjamin e3635b980b - Système de de lecture/ecriture fichier fini.
- Système de tâche presque fini et synchronisation. Reste à alerter SBE d'une nouvelle tâche et permettre à un SBE d'attendre un tâche
2022-03-06 17:29:04 +01:00

79 lines
2.0 KiB
Java

package lightcontainer.repository;
import lightcontainer.domains.client.ClientHandler;
import lightcontainer.domains.server.UnicastServerListener;
import lightcontainer.interfaces.UnicastCHR;
import lightcontainer.protocol.ProtocolWriter;
import java.util.ArrayList;
import java.util.List;
// TODO : C'est genre un ClientHandlerManager quoi hein, normal qu'il fasse blinder de chose ;)
/**
* ClientHandlerRepository
*
* Repository storing ClientHandler class.
* Contains some utility functions.
*
* @version 1.0
* @since 1.0
*
* @see ClientHandler
* @see AutoCloseable
* @author Jérémi NIHART <j.nihart@student.helmo.be>
*/
public class ClientHandlerRepository implements AutoCloseable, UnicastCHR {
// Variable
private final List<ClientHandler> handlers;
private UnicastServerListener server;
// Constructor
public ClientHandlerRepository() {
this.handlers = new ArrayList<>();
}
/**
* Setter, allow to define the ServerListener of a repository.
* & Start the server.
* @param server ServerListener to set as default.
*
* @since 1.0
*/
@Override
public void setServerListener(UnicastServerListener server) {
this.server = server;
server.start();
}
/**
* Add a ClientHandler.
* @param client Client Handler to add.
*
* @since 1.0
*/
@Override
public void addClient(ClientHandler client) {
this.handlers.add(client);
}
@Override
public void respondToClient(String login, ProtocolWriter.ProtocolResult response) {
for (ClientHandler client : handlers) {
client.respond(response);
}
}
/**
* AutoClosable Function
* Closes all ClientHandlers stored in this repository and deallocates all resources.
*
* @since 1.0
*/
@Override
public void close() {
// Stop the server.
this.server.stop();
// Stop each clients.
this.handlers.forEach(ClientHandler::close);
}
}