diff --git a/src/jnet/client/ClientMessageParser.java b/src/jnet/client/ClientMessageParser.java index b8277e9..3123ff3 100644 --- a/src/jnet/client/ClientMessageParser.java +++ b/src/jnet/client/ClientMessageParser.java @@ -1,13 +1,16 @@ package jnet.client; -import jnet.client.gui.MapTree; -import jnet.client.gui.MapView; -import jnet.client.gui.Tray; -import jnet.client.network.NettyClient; import java.util.ArrayList; +import java.util.HashMap; +import java.util.function.Consumer; +import javax.swing.SwingUtilities; +import jnet.client.gui.MapTree; +import jnet.client.gui.Tray; +import jnet.client.gui.UIUpdater; +import jnet.client.network.NettyClient; import jnet.lib.LogFile; import jnet.lib.Message; -import jnet.lib.object.Event; +import jnet.lib.object.Event; import jnet.lib.object.Map; import jnet.lib.object.MapObject; import jnet.lib.object.ObjectType; @@ -17,204 +20,184 @@ import jnet.lib.object.SnmpProfile; import jnet.lib.object.User; public class ClientMessageParser { - - public static void parse(Message msg) { - - LogFile.printDebug("-> Message type: " + msg.getType()); - - - switch (msg.getType()) { - - case Message.CLIENT_VERSION: - NettyClient.send(Message.CLIENT_VERSION, Client.CLIENT_VERSION); - break; - - case Message.UPDATE: - LogFile.printInfo("Received update request"); -// String[] run = {"java", "-jar", "Updater.jar"}; -// // TODO po přijetí pozadavku dialogove okno s informaci ze dojde k aktualizace a odpoctem k jejimu provedeni -// try { -// // odpoji se -// client.disconnect(); -// // spusti updater -// Runtime.getRuntime().exec(run); -// // vypne program -// System.exit(0); -// } catch (IOException ex) { -// LogFile.printErr("Client update exception: " + ex.getMessage()); -// } - break; - - case Message.AUTH_REQUEST: - String[] userPass = {Client.config.getString("user"), Client.config.getString("password"), String.valueOf(OnlineClients.PLATFORM_PC)}; - NettyClient.send(Message.AUTH, userPass); - break; - - case Message.AUTH_SUCEFULL: - LogFile.printInfo("Log in to server"); - Client.setConnected(); - break; - - case Message.AUTH_FAIL: - LogFile.printInfo("Authorization failed on server"); - // TODO co dal ? když se nepřihlásí ? někam vypsat informaci nebo otevřít okno s informací ? - break; - - case Message.ONLINE_CLIENTS: - Client.onlineClients = (ArrayList) msg.getMsg(); - break; - - case Message.OBJECT_TYPE: - Client.objectType.add((ObjectType) msg.getMsg()); - break; - - case Message.USER: - Client.users.add((User) msg.getMsg()); - break; - - case Message.USER_INFO: - Client.user = (User) msg.getMsg(); - break; - - case Message.MAP: - // pridani do arraylistu - Client.maps.add((Map) msg.getMsg()); - // pridani do stromu map o refres se postara pri pridavani - MapTree.reload(); - // aktualizace tray icon - Tray.refresh(); - break; - - case Message.OBJECT_LIST: - Client.mapObject = (ArrayList) msg.getMsg(); - // pridani do stromu map o refres se postara pri pridavani - MapTree.reload(); - // aktualizace tray icon - Tray.refresh(); - break; - - case Message.STATUS_UPDATE: - int[] o = (int[]) msg.getMsg(); - int status = o[1]; - int obj_id = o[0]; - for (MapObject mapObject : Client.mapObject) { - if (mapObject.getId() == obj_id) { - // nastaveni statusu objektu - mapObject.setStatus(status); - // aktualizace pohledu map - MapView.updateMapView(mapObject.getId()); - //aktualizace seznamu map - MapTree.reload(); - // aktualizace tray icon - Tray.refresh(); - break; - } - } - SoundManager.changeStatus(status); - break; - - case Message.SET_MAP_LOCK: - int[] data_lock = (int[]) msg.getMsg(); - for (Map map : Client.maps) { - if (map.getId() == data_lock[0]) { - map.setLock((data_lock[1] == 1)); - break; - } - } - break; - - case Message.SNMP_PROFILE: - Client.snmpProfile.add((SnmpProfile) msg.getMsg()); - break; - - case Message.EVENT_LIST: - Client.events = ((ArrayList) msg.getMsg()); - break; - case Message.EVENT_NEW: - Client.events.add((Event) msg.getMsg()); - break; - - case Message.EVENT_UPDATE: - Event event_update = (Event) msg.getMsg(); - for (int i = 0; i < Client.events.size(); i++) { - if (event_update.getId() == Client.events.get(i).getId()) { - Client.events.set(i, event_update); - break; - } - } - break; - case Message.ADD_OBJECT: - MapObject new_mo = (MapObject) msg.getMsg(); - // pridat do seznamu - Client.mapObject.add(new_mo); - - break; - - case Message.REMOVE_OBJECT: - for (MapObject mapObject : Client.mapObject) { - if (mapObject.getId() == (int) msg.getMsg()) { - // odebere ze seznamu - Client.mapObject.remove(mapObject); - // update map view - MapView.updateMapView(mapObject.getId()); - break; - } - } - break; - - case Message.UPDATE_OBJECT: - MapObject mo = (MapObject) msg.getMsg(); - for (int i = 0; i < Client.mapObject.size(); i++) { - if (Client.mapObject.get(i).getId() == mo.getId()) { - Client.mapObject.set(i, mo); - break; - } - } - break; - - case Message.MAP_REMOVE: - for (Map map : Client.maps) { - if (map.getId() == (int) msg.getMsg()) { - // odebere ze seznamu - Client.maps.remove(map); - // aktualizace seznamu map - MapTree.reload(); - break; - } - } - break; - - case Message.USER_EDIT: - User ue = (User) msg.getMsg(); - // zmenit v seznamu - for (User user : Client.users) { - if (user.getId() == ue.getId()) { - Client.users.remove(user); - break; - } - } - break; - - case Message.DELETE_LOG: - int objId = (int) msg.getMsg(); - // vymaze logy v listu - for (Event event : Client.events) { - if (event.getObject() == objId) { - Client.events.remove(event); - break; - } - } - break; - - case Message.SERVER_CONFIG: - Client.serverConfig = (ServerConfig) msg.getMsg(); - break; - - default: - LogFile.printErr("Neznamy typ zpravy"); - - } - + + private static final java.util.Map> handlers = new HashMap<>(); + + static { + handlers.put(Message.CLIENT_VERSION, ClientMessageParser::handleClientVersion); + handlers.put(Message.UPDATE, ClientMessageParser::handleUpdate); + handlers.put(Message.AUTH_REQUEST, ClientMessageParser::handleAuthRequest); + handlers.put(Message.AUTH_SUCEFULL, ClientMessageParser::handleAuthSuccessful); + handlers.put(Message.AUTH_FAIL, ClientMessageParser::handleAuthFail); + handlers.put(Message.ONLINE_CLIENTS, ClientMessageParser::handleOnlineClients); + handlers.put(Message.OBJECT_TYPE, ClientMessageParser::handleObjectType); + handlers.put(Message.USER, ClientMessageParser::handleUser); + handlers.put(Message.USER_INFO, ClientMessageParser::handleUserInfo); + handlers.put(Message.MAP, ClientMessageParser::handleMap); + handlers.put(Message.OBJECT_LIST, ClientMessageParser::handleObjectList); + handlers.put(Message.STATUS_UPDATE, ClientMessageParser::handleStatusUpdate); + handlers.put(Message.SET_MAP_LOCK, ClientMessageParser::handleSetMapLock); + handlers.put(Message.SNMP_PROFILE, ClientMessageParser::handleSnmpProfile); + handlers.put(Message.EVENT_LIST, ClientMessageParser::handleEventList); + handlers.put(Message.EVENT_NEW, ClientMessageParser::handleEventNew); + handlers.put(Message.EVENT_UPDATE, ClientMessageParser::handleEventUpdate); + handlers.put(Message.ADD_OBJECT, ClientMessageParser::handleAddObject); + handlers.put(Message.REMOVE_OBJECT, ClientMessageParser::handleRemoveObject); + handlers.put(Message.UPDATE_OBJECT, ClientMessageParser::handleUpdateObject); + handlers.put(Message.MAP_REMOVE, ClientMessageParser::handleMapRemove); + handlers.put(Message.USER_EDIT, ClientMessageParser::handleUserEdit); + handlers.put(Message.DELETE_LOG, ClientMessageParser::handleDeleteLog); + handlers.put(Message.SERVER_CONFIG, ClientMessageParser::handleServerConfig); } - + + public static void parse(Message msg) { + LogFile.printDebug("-> Message type: " + msg.getType()); + handlers.getOrDefault(msg.getType(), m -> LogFile.printErr("Neznámý typ zprávy")).accept(msg); + } + + private static void handleClientVersion(Message msg) { + NettyClient.send(Message.CLIENT_VERSION, Client.CLIENT_VERSION); + } + + private static void handleUpdate(Message msg) { + LogFile.printInfo("Received update request"); + // TODO: Dialogové okno s informací o aktualizaci a odpočtem k jejímu provedení + } + + private static void handleAuthRequest(Message msg) { + String[] userPass = {Client.config.getString("user"), Client.config.getString("password"), String.valueOf(OnlineClients.PLATFORM_PC)}; + NettyClient.send(Message.AUTH, userPass); + } + + private static void handleAuthSuccessful(Message msg) { + LogFile.printInfo("Log in to server"); + Client.setConnected(); + } + + private static void handleAuthFail(Message msg) { + LogFile.printInfo("Authorization failed on server"); + // TODO: Otevřít okno s informací o neúspěšném přihlášení + } + + private static void handleOnlineClients(Message msg) { + Client.onlineClients = (ArrayList) msg.getMsg(); + } + + private static void handleObjectType(Message msg) { + Client.objectType.add((ObjectType) msg.getMsg()); + } + + private static void handleUser(Message msg) { + Client.users.add((User) msg.getMsg()); + } + + private static void handleUserInfo(Message msg) { + Client.user = (User) msg.getMsg(); + } + + private static void handleMap(Message msg) { + Client.maps.add((Map) (Map) msg.getMsg()); + // aktualizace UI + UIUpdater.updateMapTree(); + UIUpdater.updateTray(); + } + + private static void handleObjectList(Message msg) { + Client.mapObject = (ArrayList) msg.getMsg(); + // aktualizace UI + UIUpdater.updateMapTree(); + UIUpdater.updateTray(); + } + + private static void handleStatusUpdate(Message msg) { + int[] o = (int[]) msg.getMsg(); + int obj_id = o[0]; + int status = o[1]; + + for (MapObject mapObject : Client.mapObject) { + if (mapObject.getId() == obj_id) { + mapObject.setStatus(status); + // aktualizace UI + UIUpdater.updateMapTree(); + UIUpdater.updateTray(); + break; + } + } + SoundManager.changeStatus(status); + } + + private static void handleSetMapLock(Message msg) { + int[] data_lock = (int[]) msg.getMsg(); + for (Map map : Client.maps) { + if (map.getId() == data_lock[0]) { + map.setLock((data_lock[1] == 1)); + break; + } + } + } + + private static void handleSnmpProfile(Message msg) { + Client.snmpProfile.add((SnmpProfile) msg.getMsg()); + } + + private static void handleEventList(Message msg) { + Client.events = (ArrayList) msg.getMsg(); + } + + private static void handleEventNew(Message msg) { + Client.events.add((Event) msg.getMsg()); + } + + private static void handleEventUpdate(Message msg) { + Event event_update = (Event) msg.getMsg(); + for (int i = 0; i < Client.events.size(); i++) { + if (event_update.getId() == Client.events.get(i).getId()) { + Client.events.set(i, event_update); + break; + } + } + } + + private static void handleAddObject(Message msg) { + Client.mapObject.add((MapObject) msg.getMsg()); + } + + private static void handleRemoveObject(Message msg) { + int objId = (int) msg.getMsg(); + Client.mapObject.removeIf(mapObject -> mapObject.getId() == objId); + // aktualizace UI + UIUpdater.updateMapTree(); + UIUpdater.updateTray(); + } + + private static void handleUpdateObject(Message msg) { + MapObject mo = (MapObject) msg.getMsg(); + for (int i = 0; i < Client.mapObject.size(); i++) { + if (Client.mapObject.get(i).getId() == mo.getId()) { + Client.mapObject.set(i, mo); + break; + } + } + } + + private static void handleMapRemove(Message msg) { + int mapId = (int) msg.getMsg(); + Client.maps.removeIf(map -> map.getId() == mapId); + + } + + private static void handleUserEdit(Message msg) { + User ue = (User) msg.getMsg(); + Client.users.removeIf(user -> user.getId() == ue.getId()); + } + + private static void handleDeleteLog(Message msg) { + int objId = (int) msg.getMsg(); + Client.events.removeIf(event -> event.getObject() == objId); + } + + private static void handleServerConfig(Message msg) { + Client.serverConfig = (ServerConfig) msg.getMsg(); + } + }