From 57371e1f2617267e8c96361e68dcd01e2e3a6e60 Mon Sep 17 00:00:00 2001 From: Michal Date: Thu, 13 Feb 2025 20:35:11 +0100 Subject: [PATCH] =?UTF-8?q?vno=C5=99en=C3=AD=20mapObject=20zpet=20do=20map?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/jnet/client/Client.java | 13 ++--- src/jnet/client/ClientMessageParser.java | 53 +++++++++-------- src/jnet/client/SoundManager.java | 12 ++-- src/jnet/client/gui/EventsPanel.java | 7 ++- src/jnet/client/gui/MapTreeCellRenderer.java | 24 +------- src/jnet/client/gui/MapView.java | 22 +++---- src/jnet/client/gui/MapViewAction.java | 60 ++++++++++---------- src/jnet/client/gui/Tray.java | 59 ++++++++++--------- src/jnet/client/gui/UIUpdater.java | 27 +++++++++ 10 files changed, 140 insertions(+), 138 deletions(-) create mode 100644 .gitignore create mode 100644 src/jnet/client/gui/UIUpdater.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf0824e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.log \ No newline at end of file diff --git a/src/jnet/client/Client.java b/src/jnet/client/Client.java index 22a89e0..ba9365e 100644 --- a/src/jnet/client/Client.java +++ b/src/jnet/client/Client.java @@ -11,7 +11,6 @@ import jnet.lib.LogFile; import jnet.lib.PropertiesManager; import jnet.lib.object.Event; import jnet.lib.object.Map; -import jnet.lib.object.MapObject; import jnet.lib.object.ObjectType; import jnet.lib.object.OnlineClients; import jnet.lib.object.ServerConfig; @@ -26,12 +25,12 @@ public class Client { public static final String APP_NAME = "jNet"; public static List maps = new CopyOnWriteArrayList<>(); - public static ArrayList mapObject = new ArrayList<>(); - public static ArrayList onlineClients = new ArrayList<>(); - public static ArrayList objectType = new ArrayList<>(); - public static ArrayList snmpProfile = new ArrayList<>(); - public static ArrayList users = new ArrayList<>(); - public static ArrayList events = new ArrayList<>(); + //public static List mapObject = new ArrayList<>(); + public static List onlineClients = new ArrayList<>(); + public static List objectType = new ArrayList<>(); + public static List snmpProfile = new ArrayList<>(); + public static List users = new ArrayList<>(); + public static List events = new ArrayList<>(); public static User user; public static boolean connected = false; public static Window okno = new Window(); diff --git a/src/jnet/client/ClientMessageParser.java b/src/jnet/client/ClientMessageParser.java index 3123ff3..740d3c8 100644 --- a/src/jnet/client/ClientMessageParser.java +++ b/src/jnet/client/ClientMessageParser.java @@ -3,9 +3,6 @@ package jnet.client; 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; @@ -34,7 +31,6 @@ public class ClientMessageParser { 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); @@ -102,27 +98,22 @@ public class ClientMessageParser { 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; + for (Map map : Client.maps) { + for (MapObject mapObject : map.getObjects()) { + if (mapObject.getId() == obj_id) { + mapObject.setStatus(status); + // aktualizace UI + UIUpdater.updateMapTree(); + UIUpdater.updateTray(); + break; + } } } + SoundManager.changeStatus(status); } @@ -159,12 +150,23 @@ public class ClientMessageParser { } private static void handleAddObject(Message msg) { - Client.mapObject.add((MapObject) msg.getMsg()); + MapObject mo = (MapObject) msg.getMsg(); + for (Map map : Client.maps) { + if (map.getId() == mo.getMap()) { + map.getObjects().add(mo); + } + } } private static void handleRemoveObject(Message msg) { int objId = (int) msg.getMsg(); - Client.mapObject.removeIf(mapObject -> mapObject.getId() == objId); + for (Map map : Client.maps) { + for (MapObject object : map.getObjects()) { + if (object.getId() == objId) { + map.getObjects().remove(object); + } + } + } // aktualizace UI UIUpdater.updateMapTree(); UIUpdater.updateTray(); @@ -172,12 +174,15 @@ public class ClientMessageParser { 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); + for (Map map : Client.maps) { + for (int i = 0; i < map.getObjects().size(); i++) { + if (map.getObjects().get(i).getId() == mo.getId()) { + map.getObjects().set(i, mo); break; } } + } + } private static void handleMapRemove(Message msg) { diff --git a/src/jnet/client/SoundManager.java b/src/jnet/client/SoundManager.java index fb278e3..5ac9626 100644 --- a/src/jnet/client/SoundManager.java +++ b/src/jnet/client/SoundManager.java @@ -10,6 +10,7 @@ import javax.sound.sampled.FloatControl; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException; import jnet.lib.Status; +import jnet.lib.object.Map; import jnet.lib.object.MapObject; public class SoundManager { @@ -19,18 +20,17 @@ public class SoundManager { public static void playOnline(){ int count = 0; - ListIterator iteratorMapObject = Client.mapObject.listIterator(); - while (iteratorMapObject.hasNext()) { - MapObject obj = iteratorMapObject.next(); - if (obj.getStatus() == Status.OFFLINE && count != 0) { + for (Map map : Client.maps) { + for (MapObject object : map.getObjects()) { + if (object.getStatus() == Status.OFFLINE && count != 0) { playNextOffline(); break; - } else if (obj.getStatus() == Status.OFFLINE) { - System.err.println(obj.getName()); + } else if (object.getStatus() == Status.OFFLINE) { count++; playFirstOffline(); break; } + } } } diff --git a/src/jnet/client/gui/EventsPanel.java b/src/jnet/client/gui/EventsPanel.java index 327d96e..038437b 100644 --- a/src/jnet/client/gui/EventsPanel.java +++ b/src/jnet/client/gui/EventsPanel.java @@ -81,9 +81,9 @@ public class EventsPanel extends JPanel { } private String[] getObjetInfo(int id) { - for (MapObject mapObject : Client.mapObject) { - if (mapObject.getId() == id) { - for (Map map : Client.maps) { + for (Map map : Client.maps) { + for (MapObject mapObject : map.getObjects()) { + if (mapObject.getId() == id) { if (map.getId() == mapObject.getMap()) { String[] data = {map.getName(), mapObject.getName()}; return data; @@ -91,6 +91,7 @@ public class EventsPanel extends JPanel { } } } + return null; } diff --git a/src/jnet/client/gui/MapTreeCellRenderer.java b/src/jnet/client/gui/MapTreeCellRenderer.java index b46b297..be55750 100644 --- a/src/jnet/client/gui/MapTreeCellRenderer.java +++ b/src/jnet/client/gui/MapTreeCellRenderer.java @@ -33,7 +33,7 @@ public class MapTreeCellRenderer extends DefaultTreeCellRenderer { if (o instanceof Map) { try { Map m = (Map) o; - switch (getMapStatus(m.getId())) { + switch (m.getStatus()) { case Status.OK: // online image = ImageIO.read(new File("img/flag_green.png")); break; @@ -60,26 +60,4 @@ public class MapTreeCellRenderer extends DefaultTreeCellRenderer { return label; } - private int getMapStatus(int mapId) { - int status = Status.NA; - Iterator iteratorMapObject = Client.mapObject.iterator(); - while (iteratorMapObject.hasNext()) { - MapObject obj = iteratorMapObject.next(); - if (obj.getMap() == mapId) { - switch (obj.getStatus()) { - case Status.OFFLINE: - return Status.OFFLINE; - case Status.WARNING: - status = Status.WARNING; - break; - default: - if (status != Status.WARNING) { - status = Status.OK; - } - } - } - - } - return status; - } } diff --git a/src/jnet/client/gui/MapView.java b/src/jnet/client/gui/MapView.java index 57d54ed..26c454f 100644 --- a/src/jnet/client/gui/MapView.java +++ b/src/jnet/client/gui/MapView.java @@ -23,7 +23,7 @@ public class MapView extends JPanel { public static List paintObjects = new ArrayList<>(); private BufferedImage lockImage; private BufferedImage unlockImage; - + private static Map map; public MapView(Map map) { @@ -80,23 +80,15 @@ public class MapView extends JPanel { } } - public static void updateMapView(int mapId) { - for (Map map : Client.maps) { - if (map.getId() == mapId) { - // obnoveni objektu - paintObjects.clear(); - // nahrat objekty - loadObject(map.getId()); - } - } - } - private static void loadObject(int mapId) { - for (MapObject obj : Client.mapObject) { - if (obj.getMap() == mapId) { - paintObjects.add(new PaintObject(obj)); + for (Map map : Client.maps) { + for (MapObject obj : map.getObjects()) { + if (obj.getMap() == mapId) { + paintObjects.add(new PaintObject(obj)); + } } } + } } diff --git a/src/jnet/client/gui/MapViewAction.java b/src/jnet/client/gui/MapViewAction.java index 28d9e81..4e9dd8a 100644 --- a/src/jnet/client/gui/MapViewAction.java +++ b/src/jnet/client/gui/MapViewAction.java @@ -20,26 +20,26 @@ import jnet.lib.object.Map; import jnet.lib.object.MapObject; public class MapViewAction implements MouseMotionListener, MouseListener { - + private Map map; - + public MapViewAction(Map map) { this.map = map; - + } - + private static PaintObject selectedObject; private static Point offset; public static boolean createConnection = false; public static PaintObject startConMapObject; public static PaintObject endConMapObject; public static Point endConnPoint; - + @Override public void mouseClicked(MouseEvent e) { // vola se pri kliknuti v mape } - + @Override public void mousePressed(MouseEvent e) { // vola se pri stisknuti tlacitka // vyhledani jestli se kliklo na nejaky objekt @@ -66,7 +66,7 @@ public class MapViewAction implements MouseMotionListener, MouseListener { } } } - + @Override public void mouseReleased(MouseEvent e) { // vola se pri uvolneni tlacitka if (selectedObject != null) { @@ -75,12 +75,12 @@ public class MapViewAction implements MouseMotionListener, MouseListener { // odeslani nove pozice objektu // TODO doresit kontrolu souradnic aby se zbytecne neodesilala zmena kdyz k ni nedojde // zkontrolovat zda došlo ke zmene pozice - int[] data = { - selectedObject.getId(), - (int) selectedObject.getX(), - (int) selectedObject.getY() - }; - NettyClient.send(Message.OBJECT_MOVE, data); + int[] data = { + selectedObject.getId(), + (int) selectedObject.getX(), + (int) selectedObject.getY() + }; + NettyClient.send(Message.OBJECT_MOVE, data); } // dvojklik na objekt if (e.getClickCount() == 2) { @@ -98,7 +98,7 @@ public class MapViewAction implements MouseMotionListener, MouseListener { } selectedObject = null; offset = null; - + if (createConnection) { for (PaintObject node : MapView.paintObjects) { if (node.contains(e.getPoint())) { @@ -112,17 +112,17 @@ public class MapViewAction implements MouseMotionListener, MouseListener { createConnection = false; } } - + @Override public void mouseEntered(MouseEvent e) { // vola se pri vstupu kurzoru } - + @Override public void mouseExited(MouseEvent e) { // vola se pri opusteni kurzoru } - + @Override public void mouseDragged(MouseEvent e) { //jen pokud neni mapa zamcena @@ -150,24 +150,24 @@ public class MapViewAction implements MouseMotionListener, MouseListener { } } } - + @Override public void mouseMoved(MouseEvent e) { - + } - + private void doubleClickOnObject(PaintObject selectedObject) { int id = selectedObject.getId(); - Iterator iteratorMapObject = Client.mapObject.iterator(); - while (iteratorMapObject.hasNext()) { - MapObject obj = iteratorMapObject.next(); - if (obj.getId() == id) { - new ObjectDialog(map.getId(), obj, false); - break; + for (Map map : Client.maps) { + for (MapObject object : map.getObjects()) { + if (object.getId() == id) { + new ObjectDialog(map.getId(), object, false); + break; + } } } } - + private void rigthClick(MouseEvent me) { JPopupMenu menu = new JPopupMenu(); // zamek mapy @@ -219,10 +219,10 @@ public class MapViewAction implements MouseMotionListener, MouseListener { }); menu.add(itemPropoj); */ - + menu.show(me.getComponent(), me.getX(), me.getY()); } - + private void rightClickOnObject(MouseEvent e, PaintObject obj) { JPopupMenu menu = new JPopupMenu(); if (obj.getObject().isWinbox()) { @@ -295,5 +295,5 @@ public class MapViewAction implements MouseMotionListener, MouseListener { // zobrazeni menu menu.show(e.getComponent(), e.getX(), e.getY()); } - + } diff --git a/src/jnet/client/gui/Tray.java b/src/jnet/client/gui/Tray.java index 0506d3a..28824e3 100644 --- a/src/jnet/client/gui/Tray.java +++ b/src/jnet/client/gui/Tray.java @@ -15,50 +15,50 @@ import java.util.Iterator; import javax.imageio.ImageIO; import jnet.lib.LogFile; import jnet.lib.Status; +import jnet.lib.object.Map; import jnet.lib.object.MapObject; public class Tray { - - private SystemTray tray = SystemTray.getSystemTray(); private static TrayIcon trayIcon; private static PopupMenu menu = new PopupMenu(); public void createAndShowTray() { try { - + //Check the SystemTray is supported if (!SystemTray.isSupported()) { LogFile.printErr("SystemTray is not supported"); return; } - + // tray menu MenuItem exitItem = new MenuItem("Ukončit"); exitItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - LogFile.printInfo("Exit appliaction from tray icon"); - System.exit(0); - } + @Override + public void actionPerformed(ActionEvent e) { + LogFile.printInfo("Exit appliaction from tray icon"); + System.exit(0); + } }); menu.add(exitItem); trayIcon = new TrayIcon(ImageIO.read(new File("img/flag_gray.png")), Client.APP_NAME, menu); trayIcon.addActionListener(new ActionListener() { @Override - public void actionPerformed( ActionEvent e ) { + public void actionPerformed(ActionEvent e) { //Double click - obnovit/minimalizovat if (Client.okno.isVisible()) { Client.okno.setVisible(false); } else { Client.okno.setVisible(true); } - }} + } + } ); - + tray = SystemTray.getSystemTray(); tray.add(trayIcon); @@ -71,43 +71,42 @@ public class Tray { public static void setIcon(String icon) { try { - BufferedImage image = ImageIO.read(new File("img/"+icon)); + BufferedImage image = ImageIO.read(new File("img/" + icon)); trayIcon.setImage(image); } catch (IOException ex) { LogFile.printErr("TrayIcon error: " + ex.getMessage()); } } - - + public static void setStatusOffline() { setIcon("flag_red.png"); } - + public static void setStatusOnline() { setIcon("flag_green.png"); } - + public static void setStatusWarning() { setIcon("flag_orange.png"); } - + public static void setStatusDisconnected() { setIcon("flag_gray.png"); } - + public static void refresh() { - Iterator iteratorMapObject = Client.mapObject.iterator(); - while (iteratorMapObject.hasNext()) { - MapObject obj = iteratorMapObject.next(); - switch (obj.getStatus()) { - case Status.OFFLINE: - setStatusOffline(); - case Status.WARNING: - setStatusWarning(); - break; - default: - setStatusOnline(); + setStatusOnline(); // Výchozí stav + + for (Map map : Client.maps) { + int status = map.getStatus(); + + if (status == Status.OFFLINE) { + setStatusOffline(); // OFFLINE má nejvyšší prioritu + return; + } + if (status == Status.WARNING) { + setStatusWarning(); // Možná varování, ale pokračujeme } } } diff --git a/src/jnet/client/gui/UIUpdater.java b/src/jnet/client/gui/UIUpdater.java new file mode 100644 index 0000000..6b3943f --- /dev/null +++ b/src/jnet/client/gui/UIUpdater.java @@ -0,0 +1,27 @@ +package jnet.client.gui; + +import javax.swing.SwingUtilities; + + +public class UIUpdater { + + public static void updateMapUI() { + SwingUtilities.invokeLater(() -> { + MapTree.reload(); + Tray.refresh(); + }); + } + + public static void updateMapTree() { + SwingUtilities.invokeLater(() -> { + MapTree.reload(); + }); + } + + public static void updateTray() { + SwingUtilities.invokeLater(() -> { + Tray.refresh(); + }); + } + +}