mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-11-22 08:13:20 +00:00
Module Client : ajout service NetworkService
This commit is contained in:
parent
96a45958de
commit
a34a623003
@ -2,6 +2,7 @@ package com.pqt.client.module;
|
|||||||
|
|
||||||
import com.pqt.client.module.account.AccountService;
|
import com.pqt.client.module.account.AccountService;
|
||||||
import com.pqt.client.module.connection.ConnectionService;
|
import com.pqt.client.module.connection.ConnectionService;
|
||||||
|
import com.pqt.client.module.network.NetworkService;
|
||||||
import com.pqt.client.module.query.QueryExecutor;
|
import com.pqt.client.module.query.QueryExecutor;
|
||||||
import com.pqt.client.module.sale.SaleService;
|
import com.pqt.client.module.sale.SaleService;
|
||||||
import com.pqt.client.module.stat.StatService;
|
import com.pqt.client.module.stat.StatService;
|
||||||
@ -9,10 +10,11 @@ import com.pqt.client.module.stock.StockService;
|
|||||||
|
|
||||||
public class ClientBackEndModuleManager {
|
public class ClientBackEndModuleManager {
|
||||||
|
|
||||||
private SaleService saleService;
|
private final SaleService saleService;
|
||||||
private StockService stockService;
|
private final StockService stockService;
|
||||||
private AccountService accountService;
|
private final AccountService accountService;
|
||||||
private StatService statService;
|
private final StatService statService;
|
||||||
|
private final NetworkService networkService;
|
||||||
|
|
||||||
public ClientBackEndModuleManager(String serverUrl) {
|
public ClientBackEndModuleManager(String serverUrl) {
|
||||||
ConnectionService connectionService = new ConnectionService(serverUrl);
|
ConnectionService connectionService = new ConnectionService(serverUrl);
|
||||||
@ -21,6 +23,7 @@ public class ClientBackEndModuleManager {
|
|||||||
stockService = new StockService(queryExecutor);
|
stockService = new StockService(queryExecutor);
|
||||||
accountService = new AccountService(queryExecutor);
|
accountService = new AccountService(queryExecutor);
|
||||||
statService = new StatService(queryExecutor);
|
statService = new StatService(queryExecutor);
|
||||||
|
networkService = new NetworkService(queryExecutor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SaleService getSaleService() {
|
public SaleService getSaleService() {
|
||||||
@ -38,4 +41,8 @@ public class ClientBackEndModuleManager {
|
|||||||
public StatService getStatService() {
|
public StatService getStatService() {
|
||||||
return statService;
|
return statService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NetworkService getNetworkService() {
|
||||||
|
return networkService;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,128 @@
|
|||||||
|
package com.pqt.client.module.network;
|
||||||
|
|
||||||
|
import com.pqt.client.module.network.listeners.INetworkServiceListener;
|
||||||
|
import com.pqt.client.module.query.QueryExecutor;
|
||||||
|
import com.pqt.client.module.query.query_callback.IMapItemMessageCallback;
|
||||||
|
import com.pqt.client.module.query.query_callback.INoItemMessageCallback;
|
||||||
|
import com.pqt.core.entities.server_config.ConfigFields;
|
||||||
|
import com.pqt.core.entities.server_config.ServerConfig;
|
||||||
|
|
||||||
|
import javax.swing.event.EventListenerList;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
//TODO ajout javadoc
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ce service doit permettre de faire des ping et de récupérer la config d'un serveur distant
|
||||||
|
*/
|
||||||
|
public class NetworkService {
|
||||||
|
|
||||||
|
private final QueryExecutor queryExecutor;
|
||||||
|
private final EventListenerList listenerList;
|
||||||
|
private final ServerConfigCache configCache;
|
||||||
|
|
||||||
|
public NetworkService(QueryExecutor queryExecutor) {
|
||||||
|
this.queryExecutor = queryExecutor;
|
||||||
|
listenerList = new EventListenerList();
|
||||||
|
configCache = new ServerConfigCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addListener(INetworkServiceListener l){
|
||||||
|
listenerList.add(INetworkServiceListener.class, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeListener(INetworkServiceListener l){
|
||||||
|
listenerList.remove(INetworkServiceListener.class, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendPQTPing(String host, Integer port){
|
||||||
|
checkData(host, port);
|
||||||
|
queryExecutor.executePingQuery(new INoItemMessageCallback() {
|
||||||
|
@Override
|
||||||
|
public void ack() {
|
||||||
|
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
|
||||||
|
.forEach(l->l.onPQTPingSuccessEvent(host, port));
|
||||||
|
sendConfigRequest(host, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void err(Throwable cause) {
|
||||||
|
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
|
||||||
|
.forEach(l->l.onPQTPingFailureEvent(host, port, cause));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ref(Throwable cause) {
|
||||||
|
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
|
||||||
|
.forEach(l->l.onPQTPingFailureEvent(host, port, cause));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerConfig getServerConfig(String host, Integer port){
|
||||||
|
checkData(host, port);
|
||||||
|
return configCache.getConfig(host, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendConfigRequest(String host, Integer port){
|
||||||
|
queryExecutor.executeConfigListQuery(new IMapItemMessageCallback<String, String>(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void err(Throwable cause) {
|
||||||
|
//TODO ajouter log erreur
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ref(Throwable cause) {
|
||||||
|
//TODO ajouter log erreur
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ack(Map<String, String> obj) {
|
||||||
|
configCache.addServerConfig(host, port, convertToServerConfig(obj));
|
||||||
|
Arrays.stream(listenerList.getListeners(INetworkServiceListener.class))
|
||||||
|
.forEach(INetworkServiceListener::onNewServerConfigData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private ServerConfig convertToServerConfig(Map<String, String> data){
|
||||||
|
|
||||||
|
ServerConfig serverConfig = new ServerConfig();
|
||||||
|
List<String> allowedFields = new ArrayList<>();
|
||||||
|
EnumSet.allOf(ConfigFields.class).forEach(e->allowedFields.add(e.name()));
|
||||||
|
|
||||||
|
data.keySet()
|
||||||
|
.stream()
|
||||||
|
.filter(allowedFields::contains)
|
||||||
|
.filter(key->isBoolean(data.get(key)))
|
||||||
|
.forEach(key->serverConfig.add(getMatchingConfigFields(key), Boolean.parseBoolean(data.get(key))));
|
||||||
|
|
||||||
|
return serverConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isBoolean(String str){
|
||||||
|
return str.equals("true") || str.equals("false");
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConfigFields getMatchingConfigFields(String str){
|
||||||
|
ConfigFields match = null;
|
||||||
|
|
||||||
|
EnumSet<ConfigFields> enumSet = EnumSet.allOf(ConfigFields.class);
|
||||||
|
for(ConfigFields field : enumSet){
|
||||||
|
if(str.equals(field.name()))
|
||||||
|
match = field;
|
||||||
|
}
|
||||||
|
|
||||||
|
return match;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void checkData(String host, Integer port){
|
||||||
|
if(host==null || port == null)
|
||||||
|
throw new NullPointerException("Null value as server data is not allowed");
|
||||||
|
if(host.isEmpty())
|
||||||
|
throw new IllegalArgumentException("host cannot be empty");
|
||||||
|
if(port<1 || port>65535)
|
||||||
|
throw new IllegalArgumentException("port number must be an unsigned 16-bit integer (0<n<65536)");
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
package com.pqt.client.module.network;
|
||||||
|
|
||||||
|
import com.pqt.core.entities.server_config.ServerConfig;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ServerConfigCache {
|
||||||
|
|
||||||
|
private final Map<ServerData, ServerConfig> cache;
|
||||||
|
|
||||||
|
public ServerConfigCache() {
|
||||||
|
cache = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addServerConfig(String host, Integer port, ServerConfig config){
|
||||||
|
ServerData match = cache.keySet().stream().filter(key->key.getHost().equals(host)&&key.getPort().equals(port)).findFirst().orElse(null);
|
||||||
|
if(match==null){
|
||||||
|
cache.put(new ServerData(host, port), config);
|
||||||
|
}else{
|
||||||
|
cache.replace(match, config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeServerData(String host, Integer port){
|
||||||
|
ServerData data = new ServerData(host, port);
|
||||||
|
if(cache.containsKey(data))
|
||||||
|
cache.remove(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasConfig(String host, Integer port){
|
||||||
|
return cache.containsKey(new ServerData(host, port));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerConfig getConfig(String host, Integer port){
|
||||||
|
if(hasConfig(host, port))
|
||||||
|
return cache.get(new ServerData(host, port));
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ServerData{
|
||||||
|
private String host;
|
||||||
|
private Integer port;
|
||||||
|
|
||||||
|
public ServerData(String host, Integer port) {
|
||||||
|
this.host = host;
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHost() {
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
ServerData that = (ServerData) o;
|
||||||
|
|
||||||
|
if (host != null ? !host.equals(that.host) : that.host != null) return false;
|
||||||
|
return port != null ? port.equals(that.port) : that.port == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = host != null ? host.hashCode() : 0;
|
||||||
|
result = 31 * result + (port != null ? port.hashCode() : 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,9 @@
|
|||||||
|
package com.pqt.client.module.network.listeners;
|
||||||
|
|
||||||
|
import java.util.EventListener;
|
||||||
|
|
||||||
|
public interface INetworkServiceListener extends EventListener {
|
||||||
|
void onPQTPingSuccessEvent(String host, Integer port);
|
||||||
|
void onPQTPingFailureEvent(String host, Integer port, Throwable cause);
|
||||||
|
void onNewServerConfigData();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user