- 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
79 lines
2.0 KiB
Java
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);
|
|
}
|
|
}
|