Compare commits

..

10 Commits

50 changed files with 378 additions and 378 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.log

View File

@ -69,5 +69,16 @@
properties which you can use, check the target you are overriding in the properties which you can use, check the target you are overriding in the
nbproject/build-impl.xml file. nbproject/build-impl.xml file.
--> -->
<target name="-post-compile">
<copy todir="${build.classes.dir}">
<fileset dir="resources"/>
</copy>
</target>
<target name="-post-jar">
<copy todir="${dist.jar.dir}">
<fileset dir="resources"/>
</copy>
</target>
</project> </project>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 424 B

After

Width:  |  Height:  |  Size: 424 B

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Before

Width:  |  Height:  |  Size: 725 B

After

Width:  |  Height:  |  Size: 725 B

View File

Before

Width:  |  Height:  |  Size: 644 B

After

Width:  |  Height:  |  Size: 644 B

View File

Before

Width:  |  Height:  |  Size: 634 B

After

Width:  |  Height:  |  Size: 634 B

View File

Before

Width:  |  Height:  |  Size: 679 B

After

Width:  |  Height:  |  Size: 679 B

View File

Before

Width:  |  Height:  |  Size: 769 B

After

Width:  |  Height:  |  Size: 769 B

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 188 B

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

View File

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 312 B

View File

Before

Width:  |  Height:  |  Size: 659 B

After

Width:  |  Height:  |  Size: 659 B

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 397 B

After

Width:  |  Height:  |  Size: 397 B

View File

Before

Width:  |  Height:  |  Size: 313 B

After

Width:  |  Height:  |  Size: 313 B

View File

Before

Width:  |  Height:  |  Size: 802 B

After

Width:  |  Height:  |  Size: 802 B

View File

Before

Width:  |  Height:  |  Size: 1023 B

After

Width:  |  Height:  |  Size: 1023 B

View File

Before

Width:  |  Height:  |  Size: 177 B

After

Width:  |  Height:  |  Size: 177 B

View File

@ -1,23 +1,23 @@
package jnet.client; package jnet.client;
import jnet.client.gui.Tray;
import jnet.client.gui.Window; import jnet.client.gui.Window;
import jnet.client.network.NettyClient; import jnet.client.network.NettyClient;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
import jnet.client.gui.Tray;
import jnet.lib.BuilddDate; import jnet.lib.BuilddDate;
import jnet.lib.LogFile; import jnet.lib.LogFile;
import jnet.lib.PropertiesManager; import jnet.lib.PropertiesManager;
import jnet.lib.object.Event; import jnet.lib.object.Event;
import jnet.lib.object.Map; import jnet.lib.object.Map;
import jnet.lib.object.MapObject;
import jnet.lib.object.ObjectType; import jnet.lib.object.ObjectType;
import jnet.lib.object.OnlineClients; import jnet.lib.object.OnlineClients;
import jnet.lib.object.ServerConfig; import jnet.lib.object.ServerConfig;
import jnet.lib.object.SnmpProfile; import jnet.lib.object.SnmpProfile;
import jnet.lib.object.User; import jnet.lib.object.User;
public class Client { public class Client {
// verze serveru // verze serveru
@ -26,12 +26,12 @@ public class Client {
public static final String APP_NAME = "jNet"; public static final String APP_NAME = "jNet";
public static List<Map> maps = new CopyOnWriteArrayList<>(); public static List<Map> maps = new CopyOnWriteArrayList<>();
public static ArrayList<MapObject> mapObject = new ArrayList<>(); //public static List<MapObject> mapObject = new ArrayList<>();
public static ArrayList<OnlineClients> onlineClients = new ArrayList<>(); public static List<OnlineClients> onlineClients = new ArrayList<>();
public static ArrayList<ObjectType> objectType = new ArrayList<>(); public static List<ObjectType> objectType = new ArrayList<>();
public static ArrayList<SnmpProfile> snmpProfile = new ArrayList<>(); public static List<SnmpProfile> snmpProfile = new ArrayList<>();
public static ArrayList<User> users = new ArrayList<>(); public static List<User> users = new ArrayList<>();
public static ArrayList<Event> events = new ArrayList<>(); public static List<Event> events = new ArrayList<>();
public static User user; public static User user;
public static boolean connected = false; public static boolean connected = false;
public static Window okno = new Window(); public static Window okno = new Window();

View File

@ -1,13 +1,14 @@
package jnet.client; 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.ArrayList;
import java.util.HashMap;
import java.util.function.Consumer;
import javax.swing.JOptionPane;
import jnet.client.gui.UIUpdater;
import jnet.client.network.NettyClient;
import jnet.lib.LogFile; import jnet.lib.LogFile;
import jnet.lib.Message; import jnet.lib.Message;
import jnet.lib.object.Event; import jnet.lib.object.Event;
import jnet.lib.object.Map; import jnet.lib.object.Map;
import jnet.lib.object.MapObject; import jnet.lib.object.MapObject;
import jnet.lib.object.ObjectType; import jnet.lib.object.ObjectType;
@ -17,204 +18,196 @@ import jnet.lib.object.SnmpProfile;
import jnet.lib.object.User; import jnet.lib.object.User;
public class ClientMessageParser { public class ClientMessageParser {
public static void parse(Message msg) { private static final java.util.Map<Integer, Consumer<Message>> handlers = new HashMap<>();
LogFile.printDebug("-> Message type: " + msg.getType()); static {
handlers.put(Message.CLIENT_VERSION, ClientMessageParser::handleClientVersion);
handlers.put(Message.UPDATE, ClientMessageParser::handleUpdate);
switch (msg.getType()) { handlers.put(Message.AUTH_REQUEST, ClientMessageParser::handleAuthRequest);
handlers.put(Message.AUTH_SUCEFULL, ClientMessageParser::handleAuthSuccessful);
case Message.CLIENT_VERSION: handlers.put(Message.AUTH_FAIL, ClientMessageParser::handleAuthFail);
NettyClient.send(Message.CLIENT_VERSION, Client.CLIENT_VERSION); handlers.put(Message.ONLINE_CLIENTS, ClientMessageParser::handleOnlineClients);
break; handlers.put(Message.OBJECT_TYPE, ClientMessageParser::handleObjectType);
handlers.put(Message.USER, ClientMessageParser::handleUser);
case Message.UPDATE: handlers.put(Message.USER_INFO, ClientMessageParser::handleUserInfo);
LogFile.printInfo("Received update request"); handlers.put(Message.MAP, ClientMessageParser::handleMap);
// String[] run = {"java", "-jar", "Updater.jar"}; handlers.put(Message.STATUS_UPDATE, ClientMessageParser::handleStatusUpdate);
// // TODO po přijetí pozadavku dialogove okno s informaci ze dojde k aktualizace a odpoctem k jejimu provedeni handlers.put(Message.SET_MAP_LOCK, ClientMessageParser::handleSetMapLock);
// try { handlers.put(Message.SNMP_PROFILE, ClientMessageParser::handleSnmpProfile);
// // odpoji se handlers.put(Message.EVENT_LIST, ClientMessageParser::handleEventList);
// client.disconnect(); handlers.put(Message.EVENT_NEW, ClientMessageParser::handleEventNew);
// // spusti updater handlers.put(Message.EVENT_UPDATE, ClientMessageParser::handleEventUpdate);
// Runtime.getRuntime().exec(run); handlers.put(Message.ADD_OBJECT, ClientMessageParser::handleAddObject);
// // vypne program handlers.put(Message.REMOVE_OBJECT, ClientMessageParser::handleRemoveObject);
// System.exit(0); handlers.put(Message.UPDATE_OBJECT, ClientMessageParser::handleUpdateObject);
// } catch (IOException ex) { handlers.put(Message.MAP_REMOVE, ClientMessageParser::handleMapRemove);
// LogFile.printErr("Client update exception: " + ex.getMessage()); handlers.put(Message.USER_EDIT, ClientMessageParser::handleUserEdit);
// } handlers.put(Message.DELETE_LOG, ClientMessageParser::handleDeleteLog);
break; handlers.put(Message.SERVER_CONFIG, ClientMessageParser::handleServerConfig);
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<OnlineClients>) 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<MapObject>) 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<Event>) 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");
}
} }
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");
JOptionPane.showMessageDialog(null, "Chybné přihlašovací údaje!", "Chyba", JOptionPane.ERROR_MESSAGE);
}
private static void handleOnlineClients(Message msg) {
Client.onlineClients = (ArrayList<OnlineClients>) 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 handleStatusUpdate(Message msg) {
int[] o = (int[]) msg.getMsg();
int obj_id = o[0];
int status = o[1];
for (Map map : Client.maps) {
for (MapObject mapObject : map.getObjects()) {
if (mapObject.getId() == obj_id) {
mapObject.setStatus(status);
// aktualizace UI
UIUpdater.updateMapTree();
UIUpdater.updateTray();
UIUpdater.updateMapView();
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<Event>) 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) {
MapObject mo = (MapObject) msg.getMsg();
for (Map map : Client.maps) {
if (map.getId() == mo.getMap()) {
map.getObjects().add(mo);
UIUpdater.updateMapView();
break;
}
}
}
private static void handleRemoveObject(Message msg) {
int objId = (int) msg.getMsg();
for (Map map : Client.maps) {
for (MapObject object : map.getObjects()) {
if (object.getId() == objId) {
map.getObjects().remove(object);
}
}
}
// aktualizace UI
UIUpdater.updateMapTree();
UIUpdater.updateTray();
}
private static void handleUpdateObject(Message msg) {
MapObject mo = (MapObject) msg.getMsg();
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);
UIUpdater.updateMapView();
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();
}
} }

View File

@ -10,6 +10,7 @@ import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException; import javax.sound.sampled.UnsupportedAudioFileException;
import jnet.lib.Status; import jnet.lib.Status;
import jnet.lib.object.Map;
import jnet.lib.object.MapObject; import jnet.lib.object.MapObject;
public class SoundManager { public class SoundManager {
@ -19,18 +20,17 @@ public class SoundManager {
public static void playOnline(){ public static void playOnline(){
int count = 0; int count = 0;
ListIterator<MapObject> iteratorMapObject = Client.mapObject.listIterator(); for (Map map : Client.maps) {
while (iteratorMapObject.hasNext()) { for (MapObject object : map.getObjects()) {
MapObject obj = iteratorMapObject.next(); if (object.getStatus() == Status.OFFLINE && count != 0) {
if (obj.getStatus() == Status.OFFLINE && count != 0) {
playNextOffline(); playNextOffline();
break; break;
} else if (obj.getStatus() == Status.OFFLINE) { } else if (object.getStatus() == Status.OFFLINE) {
System.err.println(obj.getName());
count++; count++;
playFirstOffline(); playFirstOffline();
break; break;
} }
}
} }
} }

View File

@ -81,9 +81,9 @@ public class EventsPanel extends JPanel {
} }
private String[] getObjetInfo(int id) { private String[] getObjetInfo(int id) {
for (MapObject mapObject : Client.mapObject) { for (Map map : Client.maps) {
if (mapObject.getId() == id) { for (MapObject mapObject : map.getObjects()) {
for (Map map : Client.maps) { if (mapObject.getId() == id) {
if (map.getId() == mapObject.getMap()) { if (map.getId() == mapObject.getMap()) {
String[] data = {map.getName(), mapObject.getName()}; String[] data = {map.getName(), mapObject.getName()};
return data; return data;
@ -91,6 +91,7 @@ public class EventsPanel extends JPanel {
} }
} }
} }
return null; return null;
} }

View File

@ -1,10 +1,8 @@
package jnet.client.gui; package jnet.client.gui;
import jnet.client.Client;
import java.awt.Component; import java.awt.Component;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.util.Iterator;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.ImageIcon; import javax.swing.ImageIcon;
import javax.swing.JLabel; import javax.swing.JLabel;
@ -14,18 +12,17 @@ import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeCellRenderer;
import jnet.lib.Status; import jnet.lib.Status;
import jnet.lib.object.Map; import jnet.lib.object.Map;
import jnet.lib.object.MapObject;
public class MapTreeCellRenderer extends DefaultTreeCellRenderer { public class MapTreeCellRenderer extends DefaultTreeCellRenderer {
private JLabel label; private JLabel label;
private BufferedImage image; private BufferedImage image;
public MapTreeCellRenderer() { public MapTreeCellRenderer() {
label = new JLabel(); label = new JLabel();
} }
@Override @Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
label = (JLabel) super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); label = (JLabel) super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
@ -33,19 +30,22 @@ public class MapTreeCellRenderer extends DefaultTreeCellRenderer {
if (o instanceof Map) { if (o instanceof Map) {
try { try {
Map m = (Map) o; Map m = (Map) o;
switch (getMapStatus(m.getId())) { String imagePath = "";
switch (m.getStatus()) {
case Status.OK: // online case Status.OK: // online
image = ImageIO.read(new File("img/flag_green.png")); imagePath = "/img/flag_green.png";
break; break;
case Status.WARNING: // warning case Status.WARNING: // warning
image = ImageIO.read(new File("img/flag_orange.png")); imagePath = "/img/flag_orange.png";
break; break;
case Status.OFFLINE: // offline case Status.OFFLINE: // offline
image = ImageIO.read(new File("img/flag_red.png")); imagePath = "/img/flag_red.png";
break; break;
default: // other default: // other
image = ImageIO.read(new File("img/flag_gray.png")); imagePath = "/img/flag_gray.png";
} }
image = ImageIO.read(getClass().getResourceAsStream(imagePath));
if (image != null) { if (image != null) {
label.setIcon(new ImageIcon(image)); label.setIcon(new ImageIcon(image));
} }
@ -59,27 +59,5 @@ public class MapTreeCellRenderer extends DefaultTreeCellRenderer {
label.setBorder(border); label.setBorder(border);
return label; return label;
} }
private int getMapStatus(int mapId) {
int status = Status.NA;
Iterator<MapObject> 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;
}
} }

View File

@ -21,7 +21,11 @@ import jnet.lib.object.MapObject;
public class MapView extends JPanel { public class MapView extends JPanel {
public static List<PaintObject> paintObjects = new ArrayList<>(); public static List<PaintObject> paintObjects = new ArrayList<>();
;
private BufferedImage lockImage;
private BufferedImage unlockImage;
private static Map map; private static Map map;
public MapView(Map map) { public MapView(Map map) {
@ -30,6 +34,13 @@ public class MapView extends JPanel {
LogFile.printDebug("View map: " + map.getName()); LogFile.printDebug("View map: " + map.getName());
paintObjects.clear(); paintObjects.clear();
try {
lockImage = ImageIO.read(new File("img/lock.png"));
unlockImage = ImageIO.read(new File("img/unlock.png"));
} catch (IOException ex) {
LogFile.printErr("File not found: " + ex);
}
loadObject(map.getId()); loadObject(map.getId());
this.addMouseMotionListener(new MapViewAction(map)); this.addMouseMotionListener(new MapViewAction(map));
@ -53,18 +64,7 @@ public class MapView extends JPanel {
Graphics2D g2 = (Graphics2D) g.create(); Graphics2D g2 = (Graphics2D) g.create();
// vykresleni lock/unlock mapy // vykresleni lock/unlock mapy
try { g.drawImage(map.isLock() ? lockImage : unlockImage, 0, 0, this);
BufferedImage image;
if (map.isLock()) {
image = ImageIO.read(new File("img/lock.png"));
} else {
image = ImageIO.read(new File("img/unlock.png"));
}
g.drawImage(image, 0, 0, this);
} catch (IOException ex) {
LogFile.printErr("File not found: " + ex);
}
// vykresleni objektu // vykresleni objektu
for (PaintObject paintObject : paintObjects) { for (PaintObject paintObject : paintObjects) {
@ -81,24 +81,25 @@ public class MapView extends JPanel {
loadObject(map.getId()); loadObject(map.getId());
} }
} }
public static void updateMapView(int mapId) { public static void updateMapView() {
for (Map map : Client.maps) { if (map.equals(MapView.map)) {
if (map.equals(MapView.map)) { // obnoveni objektu
// obnoveni objektu paintObjects.clear();
paintObjects.clear(); // nahrat objekty
// nahrat objekty loadObject(map.getId());
loadObject(map.getId());
}
} }
} }
private static void loadObject(int mapId) { private static void loadObject(int mapId) {
for (MapObject obj : Client.mapObject) { for (Map map : Client.maps) {
if (obj.getMap() == mapId) { for (MapObject obj : map.getObjects()) {
paintObjects.add(new PaintObject(obj)); if (obj.getMap() == mapId) {
paintObjects.add(new PaintObject(obj));
}
} }
} }
} }
} }

View File

@ -20,26 +20,26 @@ import jnet.lib.object.Map;
import jnet.lib.object.MapObject; import jnet.lib.object.MapObject;
public class MapViewAction implements MouseMotionListener, MouseListener { public class MapViewAction implements MouseMotionListener, MouseListener {
private Map map; private Map map;
public MapViewAction(Map map) { public MapViewAction(Map map) {
this.map = map; this.map = map;
} }
private static PaintObject selectedObject; private static PaintObject selectedObject;
private static Point offset; private static Point offset;
public static boolean createConnection = false; public static boolean createConnection = false;
public static PaintObject startConMapObject; public static PaintObject startConMapObject;
public static PaintObject endConMapObject; public static PaintObject endConMapObject;
public static Point endConnPoint; public static Point endConnPoint;
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
// vola se pri kliknuti v mape // vola se pri kliknuti v mape
} }
@Override @Override
public void mousePressed(MouseEvent e) { // vola se pri stisknuti tlacitka public void mousePressed(MouseEvent e) { // vola se pri stisknuti tlacitka
// vyhledani jestli se kliklo na nejaky objekt // vyhledani jestli se kliklo na nejaky objekt
@ -66,7 +66,7 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
} }
} }
} }
@Override @Override
public void mouseReleased(MouseEvent e) { // vola se pri uvolneni tlacitka public void mouseReleased(MouseEvent e) { // vola se pri uvolneni tlacitka
if (selectedObject != null) { if (selectedObject != null) {
@ -75,12 +75,12 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
// odeslani nove pozice objektu // odeslani nove pozice objektu
// TODO doresit kontrolu souradnic aby se zbytecne neodesilala zmena kdyz k ni nedojde // TODO doresit kontrolu souradnic aby se zbytecne neodesilala zmena kdyz k ni nedojde
// zkontrolovat zda došlo ke zmene pozice // zkontrolovat zda došlo ke zmene pozice
int[] data = { int[] data = {
selectedObject.getId(), selectedObject.getId(),
(int) selectedObject.getX(), (int) selectedObject.getX(),
(int) selectedObject.getY() (int) selectedObject.getY()
}; };
NettyClient.send(Message.OBJECT_MOVE, data); NettyClient.send(Message.OBJECT_MOVE, data);
} }
// dvojklik na objekt // dvojklik na objekt
if (e.getClickCount() == 2) { if (e.getClickCount() == 2) {
@ -98,7 +98,7 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
} }
selectedObject = null; selectedObject = null;
offset = null; offset = null;
if (createConnection) { if (createConnection) {
for (PaintObject node : MapView.paintObjects) { for (PaintObject node : MapView.paintObjects) {
if (node.contains(e.getPoint())) { if (node.contains(e.getPoint())) {
@ -112,17 +112,17 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
createConnection = false; createConnection = false;
} }
} }
@Override @Override
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
// vola se pri vstupu kurzoru // vola se pri vstupu kurzoru
} }
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
// vola se pri opusteni kurzoru // vola se pri opusteni kurzoru
} }
@Override @Override
public void mouseDragged(MouseEvent e) { public void mouseDragged(MouseEvent e) {
//jen pokud neni mapa zamcena //jen pokud neni mapa zamcena
@ -150,24 +150,24 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
} }
} }
} }
@Override @Override
public void mouseMoved(MouseEvent e) { public void mouseMoved(MouseEvent e) {
} }
private void doubleClickOnObject(PaintObject selectedObject) { private void doubleClickOnObject(PaintObject selectedObject) {
int id = selectedObject.getId(); int id = selectedObject.getId();
Iterator<MapObject> iteratorMapObject = Client.mapObject.iterator(); for (Map map : Client.maps) {
while (iteratorMapObject.hasNext()) { for (MapObject object : map.getObjects()) {
MapObject obj = iteratorMapObject.next(); if (object.getId() == id) {
if (obj.getId() == id) { new ObjectDialog(map.getId(), object, false);
new ObjectDialog(map.getId(), obj, false); break;
break; }
} }
} }
} }
private void rigthClick(MouseEvent me) { private void rigthClick(MouseEvent me) {
JPopupMenu menu = new JPopupMenu(); JPopupMenu menu = new JPopupMenu();
// zamek mapy // zamek mapy
@ -219,10 +219,10 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
}); });
menu.add(itemPropoj); menu.add(itemPropoj);
*/ */
menu.show(me.getComponent(), me.getX(), me.getY()); menu.show(me.getComponent(), me.getX(), me.getY());
} }
private void rightClickOnObject(MouseEvent e, PaintObject obj) { private void rightClickOnObject(MouseEvent e, PaintObject obj) {
JPopupMenu menu = new JPopupMenu(); JPopupMenu menu = new JPopupMenu();
if (obj.getObject().isWinbox()) { if (obj.getObject().isWinbox()) {
@ -295,5 +295,5 @@ public class MapViewAction implements MouseMotionListener, MouseListener {
// zobrazeni menu // zobrazeni menu
menu.show(e.getComponent(), e.getX(), e.getY()); menu.show(e.getComponent(), e.getX(), e.getY());
} }
} }

View File

@ -22,7 +22,7 @@ class MenuPanel extends JPanel {
// tlacitko pripojit / odpojit // tlacitko pripojit / odpojit
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/connect.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/connect.png"));
JButton bLogin = new JButton(new ImageIcon(buttonIcon)); JButton bLogin = new JButton(new ImageIcon(buttonIcon));
bLogin.setFocusPainted(false); bLogin.setFocusPainted(false);
bLogin.setContentAreaFilled(false); bLogin.setContentAreaFilled(false);
@ -44,7 +44,7 @@ class MenuPanel extends JPanel {
// tlacitko nastaveni // tlacitko nastaveni
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/settings.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/settings.png"));
JButton bSettings = new JButton(new ImageIcon(buttonIcon)); JButton bSettings = new JButton(new ImageIcon(buttonIcon));
bSettings.setFocusPainted(false); bSettings.setFocusPainted(false);
bSettings.setContentAreaFilled(false); bSettings.setContentAreaFilled(false);
@ -62,7 +62,7 @@ class MenuPanel extends JPanel {
// tlacitko log // tlacitko log
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/log.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/log.png"));
JButton bLog = new JButton(new ImageIcon(buttonIcon)); JButton bLog = new JButton(new ImageIcon(buttonIcon));
bLog.setFocusPainted(false); bLog.setFocusPainted(false);
bLog.setContentAreaFilled(false); bLog.setContentAreaFilled(false);
@ -80,7 +80,7 @@ class MenuPanel extends JPanel {
// tlacitko server settings // tlacitko server settings
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/server_settings.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/server_settings.png"));
JButton bServerSettings = new JButton(new ImageIcon(buttonIcon)); JButton bServerSettings = new JButton(new ImageIcon(buttonIcon));
bServerSettings.setFocusPainted(false); bServerSettings.setFocusPainted(false);
bServerSettings.setContentAreaFilled(false); bServerSettings.setContentAreaFilled(false);

View File

@ -36,7 +36,7 @@ public class StatusBar extends JPanel {
// tlacitko zobrazujici klienty // tlacitko zobrazujici klienty
try { try {
BufferedImage buttonIcon = ImageIO.read(new File("img/online_clients.png")); BufferedImage buttonIcon = ImageIO.read(getClass().getResourceAsStream("/img/online_clients.png"));
btnOnline = new JButton(new ImageIcon(buttonIcon)); btnOnline = new JButton(new ImageIcon(buttonIcon));
btnOnline.setFocusPainted(false); btnOnline.setFocusPainted(false);
btnOnline.setContentAreaFilled(false); btnOnline.setContentAreaFilled(false);

View File

@ -1,113 +1,96 @@
package jnet.client.gui; package jnet.client.gui;
import jnet.client.Client; import java.awt.*;
import java.awt.AWTException;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import jnet.client.Client;
import jnet.lib.LogFile; import jnet.lib.LogFile;
import jnet.lib.Status; import jnet.lib.Status;
import jnet.lib.object.MapObject; import jnet.lib.object.Map;
public class Tray { public class Tray {
private SystemTray tray;
private SystemTray tray = SystemTray.getSystemTray();
private static TrayIcon trayIcon; private static TrayIcon trayIcon;
private static PopupMenu menu = new PopupMenu(); private static PopupMenu menu = new PopupMenu();
public void createAndShowTray() { public void createAndShowTray() {
try { try {
// Ověření, zda je SystemTray podporován
//Check the SystemTray is supported
if (!SystemTray.isSupported()) { if (!SystemTray.isSupported()) {
LogFile.printErr("SystemTray is not supported"); LogFile.printErr("SystemTray is not supported");
return; return;
} }
// tray menu
MenuItem exitItem = new MenuItem("Ukončit");
exitItem.addActionListener(new ActionListener() {
@Override // Menu pro tray ikonu
public void actionPerformed(ActionEvent e) { MenuItem exitItem = new MenuItem("Ukončit");
LogFile.printInfo("Exit appliaction from tray icon"); exitItem.addActionListener(e -> {
System.exit(0); LogFile.printInfo("Exit application from tray icon");
} System.exit(0);
}); });
menu.add(exitItem); menu.add(exitItem);
trayIcon = new TrayIcon(ImageIO.read(new File("img/flag_gray.png")), Client.APP_NAME, menu); // Načtení výchozí ikony ze zdrojů
trayIcon.addActionListener(new ActionListener() { trayIcon = new TrayIcon(loadImage("/img/flag_gray.png"), Client.APP_NAME, menu);
@Override trayIcon.setImageAutoSize(true);
public void actionPerformed( ActionEvent e ) { trayIcon.addActionListener(e -> {
//Double click - obnovit/minimalizovat // Dvojklik - obnovit/minimalizovat okno
if (Client.okno.isVisible()) { Client.okno.setVisible(!Client.okno.isVisible());
Client.okno.setVisible(false); });
} else {
Client.okno.setVisible(true);
}
}}
);
tray = SystemTray.getSystemTray(); tray = SystemTray.getSystemTray();
tray.add(trayIcon); tray.add(trayIcon);
} catch (IOException ex) { } catch (IOException | AWTException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage());
} catch (AWTException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage()); LogFile.printErr("TrayIcon error: " + ex.getMessage());
} }
} }
private static BufferedImage loadImage(String path) throws IOException {
try (var input = Tray.class.getResourceAsStream(path)) {
if (input == null) {
throw new IOException("Soubor nenalezen: " + path);
}
return ImageIO.read(input);
}
}
public static void setIcon(String icon) { public static void setIcon(String icon) {
try { try {
BufferedImage image = ImageIO.read(new File("img/"+icon)); trayIcon.setImage(loadImage("/img/" + icon));
trayIcon.setImage(image);
} catch (IOException ex) { } catch (IOException ex) {
LogFile.printErr("TrayIcon error: " + ex.getMessage()); LogFile.printErr("TrayIcon error: " + ex.getMessage());
} }
} }
public static void setStatusOffline() { public static void setStatusOffline() {
setIcon("flag_red.png"); setIcon("flag_red.png");
} }
public static void setStatusOnline() { public static void setStatusOnline() {
setIcon("flag_green.png"); setIcon("flag_green.png");
} }
public static void setStatusWarning() { public static void setStatusWarning() {
setIcon("flag_orange.png"); setIcon("flag_orange.png");
} }
public static void setStatusDisconnected() { public static void setStatusDisconnected() {
setIcon("flag_gray.png"); setIcon("flag_gray.png");
} }
public static void refresh() { public static void refresh() {
Iterator<MapObject> iteratorMapObject = Client.mapObject.iterator(); setStatusOnline(); // Výchozí stav
while (iteratorMapObject.hasNext()) {
MapObject obj = iteratorMapObject.next(); for (Map map : Client.maps) {
switch (obj.getStatus()) { int status = map.getStatus();
case Status.OFFLINE: if (status == Status.OFFLINE) {
setStatusOffline(); setStatusOffline();
case Status.WARNING: return;
setStatusWarning(); }
break; if (status == Status.WARNING) {
default: setStatusWarning();
setStatusOnline();
} }
} }
} }

View File

@ -0,0 +1,33 @@
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();
});
}
public static void updateMapView() {
SwingUtilities.invokeLater(() -> {
MapView.updateMapView();
});
}
}

View File

@ -40,7 +40,6 @@ public class Window extends JFrame {
} catch (IOException ex) { } catch (IOException ex) {
LogFile.printErr("APP icon exception"); LogFile.printErr("APP icon exception");
} }
this.addWindowListener(new WindowAdapter() { this.addWindowListener(new WindowAdapter() {
@Override @Override