From 6538dac8affbe7baf143c0313b0d89a6c5c6b684 Mon Sep 17 00:00:00 2001 From: GustavoHMDS Date: Thu, 1 Oct 2026 22:21:19 -0300 Subject: [PATCH] Mover algumas classes para a camada de modelo --- pitiupi/.idea/misc.xml | 1 - pitiupi/docs/Documentation.md | 4 +- pitiupi/src/pitiupi/GUI/MainWindow.java | 2 +- pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java | 6 +- .../pitiupi/control/ConnectionManager.java | 4 +- .../src/pitiupi/control/HeartbeatManager.java | 16 ++-- pitiupi/src/pitiupi/control/PeerListener.java | 4 +- pitiupi/src/pitiupi/control/PluginLoader.java | 73 ------------------- .../src/pitiupi/control/PluginManager.java | 70 +++++++++++++----- pitiupi/src/pitiupi/model/Menus/Menu.java | 6 ++ .../src/pitiupi/model/Menus/MenuCategory.java | 7 ++ .../pitiupi/model/Menus/MulticastMenu.java | 5 ++ .../src/pitiupi/model/Menus/UnicastMenu.java | 7 ++ .../Messages}/HeartbeatMessage.java | 4 +- .../Messages/InfoMessage.java} | 27 ++++--- .../Messages/InfoType.java} | 4 +- .../{net => model/Messages}/Message.java | 2 +- .../src/pitiupi/{plugin => model}/Plugin.java | 33 ++++++--- .../PeerInfo.java => model/User.java} | 6 +- .../pitiupi/net/tcp/ConnectionFactory.java | 26 ++++--- .../src/pitiupi/net/tcp/HandshakeMessage.java | 2 +- pitiupi/src/pitiupi/net/tcp/SocketTCP.java | 15 ++-- .../pitiupi/net/tcp/TcpConnectionManager.java | 14 ++-- pitiupi/src/pitiupi/net/udp/SocketUDP.java | 6 +- .../plugin/PrivateConnectionPlugin.java | 9 --- 25 files changed, 170 insertions(+), 183 deletions(-) delete mode 100644 pitiupi/src/pitiupi/control/PluginLoader.java create mode 100644 pitiupi/src/pitiupi/model/Menus/Menu.java create mode 100644 pitiupi/src/pitiupi/model/Menus/MenuCategory.java create mode 100644 pitiupi/src/pitiupi/model/Menus/MulticastMenu.java create mode 100644 pitiupi/src/pitiupi/model/Menus/UnicastMenu.java rename pitiupi/src/pitiupi/{net => model/Messages}/HeartbeatMessage.java (91%) rename pitiupi/src/pitiupi/{net/tcp/SysInfoMessage.java => model/Messages/InfoMessage.java} (54%) rename pitiupi/src/pitiupi/{net/tcp/SysInfoType.java => model/Messages/InfoType.java} (68%) rename pitiupi/src/pitiupi/{net => model/Messages}/Message.java (97%) rename pitiupi/src/pitiupi/{plugin => model}/Plugin.java (55%) rename pitiupi/src/pitiupi/{control/PeerInfo.java => model/User.java} (89%) delete mode 100644 pitiupi/src/pitiupi/plugin/PrivateConnectionPlugin.java diff --git a/pitiupi/.idea/misc.xml b/pitiupi/.idea/misc.xml index 0ae1195..8f30b94 100644 --- a/pitiupi/.idea/misc.xml +++ b/pitiupi/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/pitiupi/docs/Documentation.md b/pitiupi/docs/Documentation.md index fb7024a..6f6e5e6 100644 --- a/pitiupi/docs/Documentation.md +++ b/pitiupi/docs/Documentation.md @@ -468,10 +468,10 @@ MeusPlugins | +---services | - +---pitiupi.plugin.Plugin + +---pitiupi.model.Plugin ``` -O arquivo `pitiupi.plugin.Plugin` deve conter o nome completo das classes que +O arquivo `pitiupi.model.Plugin` deve conter o nome completo das classes que implementam a interface Plugin: ``` diff --git a/pitiupi/src/pitiupi/GUI/MainWindow.java b/pitiupi/src/pitiupi/GUI/MainWindow.java index 1426c42..37f4b5d 100644 --- a/pitiupi/src/pitiupi/GUI/MainWindow.java +++ b/pitiupi/src/pitiupi/GUI/MainWindow.java @@ -46,7 +46,7 @@ public class MainWindow extends javax.swing.JFrame { public MainWindow(String userName, int port) { initMenu(); - pluginManager = new PluginManager(this); + pluginManager = new PluginManager(); connectionManager = new ConnectionManager(this, userName, pluginManager, port); guiManager = new GuiManager(this); diff --git a/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java b/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java index 7d3231e..f6519e0 100644 --- a/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java +++ b/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java @@ -9,7 +9,7 @@ import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; -import pitiupi.control.PeerInfo; +import pitiupi.model.User; import pitiupi.control.PeerListener; /** @@ -39,10 +39,10 @@ public class OnlineUsersPanel extends JPanel implements PeerListener { * @param peers lista atualizada de usuários ativos na rede. */ @Override - public void onPeersChanged(List peers) { + public void onPeersChanged(List peers) { SwingUtilities.invokeLater(() -> { listModel.clear(); - for (PeerInfo peer : peers) { + for (User peer : peers) { listModel.addElement(peer.toString()); } }); diff --git a/pitiupi/src/pitiupi/control/ConnectionManager.java b/pitiupi/src/pitiupi/control/ConnectionManager.java index 197b97d..4d37561 100644 --- a/pitiupi/src/pitiupi/control/ConnectionManager.java +++ b/pitiupi/src/pitiupi/control/ConnectionManager.java @@ -1,8 +1,8 @@ package pitiupi.control; import pitiupi.GUI.MainWindow; -import pitiupi.net.HeartbeatMessage; -import pitiupi.net.Message; +import pitiupi.model.Messages.HeartbeatMessage; +import pitiupi.model.Messages.Message; import pitiupi.net.tcp.SocketTCP; import pitiupi.net.tcp.TcpConnection; import pitiupi.net.udp.SocketUDP; diff --git a/pitiupi/src/pitiupi/control/HeartbeatManager.java b/pitiupi/src/pitiupi/control/HeartbeatManager.java index 7bc566e..4041ff8 100644 --- a/pitiupi/src/pitiupi/control/HeartbeatManager.java +++ b/pitiupi/src/pitiupi/control/HeartbeatManager.java @@ -1,6 +1,5 @@ package pitiupi.control; -import java.io.IOException; import java.net.InetAddress; import java.util.ArrayList; import java.util.List; @@ -10,10 +9,9 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; -import pitiupi.GUI.MainWindow; -import pitiupi.net.HeartbeatMessage; + +import pitiupi.model.User; +import pitiupi.model.Messages.HeartbeatMessage; import java.util.UUID; /** * Gerencia o mecanismo de heartbeat da aplicação. @@ -29,7 +27,7 @@ public class HeartbeatManager { private static final long HEARTBEAT_INTERVAL_MS = 5000; private static final long PEER_TIMEOUT_MS = 15000; // ~3 batimentos perdidos private final ConnectionManager connectionManager; - private final Map peers = new ConcurrentHashMap<>(); + private final Map peers = new ConcurrentHashMap<>(); private final List listeners = new CopyOnWriteArrayList<>(); private ScheduledExecutorService scheduler; private final String instanceId = UUID.randomUUID().toString(); @@ -87,7 +85,7 @@ public class HeartbeatManager { String key = msg.getInstanceId(); boolean isNew = !peers.containsKey(key); - PeerInfo peer = peers.computeIfAbsent(key, k -> new PeerInfo(msg.getUserName(), from, msg.getTimestamp())); + User peer = peers.computeIfAbsent(key, k -> new User(msg.getUserName(), from, msg.getTimestamp())); peer.touch(System.currentTimeMillis()); if (isNew) { @@ -104,7 +102,7 @@ public class HeartbeatManager { } private void notifyListeners() { - List snapshot = new ArrayList<>(peers.values()); + List snapshot = new ArrayList<>(peers.values()); for (PeerListener l : listeners) { l.onPeersChanged(snapshot); } @@ -137,7 +135,7 @@ public class HeartbeatManager { * * @return lista contendo os peers atualmente conhecidos. */ - public List getPeers() { + public List getPeers() { return new ArrayList<>(peers.values()); } } diff --git a/pitiupi/src/pitiupi/control/PeerListener.java b/pitiupi/src/pitiupi/control/PeerListener.java index 679395c..3b64e93 100644 --- a/pitiupi/src/pitiupi/control/PeerListener.java +++ b/pitiupi/src/pitiupi/control/PeerListener.java @@ -1,5 +1,7 @@ package pitiupi.control; +import pitiupi.model.User; + import java.util.List; /** @@ -17,5 +19,5 @@ public interface PeerListener { * * @param peers lista atualizada de usuários ativos. */ - void onPeersChanged(List peers); + void onPeersChanged(List peers); } diff --git a/pitiupi/src/pitiupi/control/PluginLoader.java b/pitiupi/src/pitiupi/control/PluginLoader.java deleted file mode 100644 index 96915eb..0000000 --- a/pitiupi/src/pitiupi/control/PluginLoader.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ -package pitiupi.control; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.*; - -import pitiupi.GUI.MainWindow; -import pitiupi.Main; -import pitiupi.plugin.Plugin; - -/** - * Responsável por localizar, carregar e registrar os plugins - * presentes no diretório {@code plugins}. - * - *

Os plugins são descobertos utilizando {@link java.util.ServiceLoader} - * e devem estar empacotados como arquivos JAR contendo a configuração - * {@code META-INF/services} correspondente.

- * @author flavio - */ -public class PluginLoader { - - private final pitiupi.GUI.MainWindow mainWindow; - - public PluginLoader(MainWindow main) { - this.mainWindow = main; - } - - public void loadPlugins(List plugins, HashSet loadedJars, ConnectionManager connectionManager, GuiManager guiManager) { - File pluginDir = new File("plugins"); - File[] jarFiles = pluginDir.listFiles((dir, name) -> name.endsWith(".jar")); - - if (jarFiles == null || jarFiles.length == 0) { - System.out.println("No plugins found in the " + pluginDir.getAbsolutePath() + " directory."); - return; - } - - for (File file : jarFiles) { - - if (loadedJars.contains(file.getName())) { - continue; - } - - System.out.println("Discovered plugin package: " + file.getName()); - - try { - URLClassLoader classLoader = new URLClassLoader( - new URL[]{file.toURI().toURL()}, - Main.class.getClassLoader() - ); - - ServiceLoader serviceLoader = ServiceLoader.load(Plugin.class, classLoader); - - for (Plugin plugin : serviceLoader) { - System.out.println("Loading: " + plugin.getName()); - - plugin.createPlugin(connectionManager, guiManager); - plugins.add(plugin); - loadedJars.add(file.getName()); - } - - } catch (Exception e) { - System.out.println("Failed to load plugin " + file.getName()); - e.printStackTrace(); - } - } - } -} diff --git a/pitiupi/src/pitiupi/control/PluginManager.java b/pitiupi/src/pitiupi/control/PluginManager.java index 1a11f60..51a60d7 100644 --- a/pitiupi/src/pitiupi/control/PluginManager.java +++ b/pitiupi/src/pitiupi/control/PluginManager.java @@ -1,29 +1,27 @@ package pitiupi.control; import pitiupi.GUI.MainWindow; +import pitiupi.Main; import pitiupi.net.tcp.TcpConnection; -import pitiupi.plugin.Plugin; -import pitiupi.plugin.PrivateConnectionPlugin; +import pitiupi.model.Plugin; +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.ServiceLoader; public class PluginManager { - private final PluginLoader pluginLoader; private final List plugins; private final HashSet loadedJars; - public PluginManager(MainWindow main) { - this.pluginLoader = new PluginLoader(main); + public PluginManager() { this.plugins = new ArrayList<>(); this.loadedJars = new HashSet<>(); } - public void loadPlugins(ConnectionManager connectionManager, GuiManager guiManager) { - pluginLoader.loadPlugins(plugins, loadedJars, connectionManager, guiManager); - } - public void handlePublicMessage(byte[] msg) { for (Plugin plugin : plugins) { plugin.receiveMessage(msg); @@ -41,28 +39,62 @@ public class PluginManager { Plugin plugin = getPlugin(connection.getReceiver()); if (plugin == null) return; - if (plugin instanceof PrivateConnectionPlugin privatePlugin) { - privatePlugin.receiveBytes(connection, msg); - } - + plugin.receiveBytes(connection, msg); } public boolean handleConnection(TcpConnection connection, String receiverId) { Plugin plugin = getPlugin(receiverId); if (plugin == null) return false; - if (plugin instanceof PrivateConnectionPlugin privatePlugin) { - privatePlugin.receivePrivateConnection(connection); - return true; - } + plugin.receivePrivateConnection(connection); return false; } public void handleDisconnection(TcpConnection connection, String receiverId) { Plugin plugin = getPlugin(receiverId); - if (plugin instanceof PrivateConnectionPlugin privatePlugin) { - privatePlugin.onSocketClosed(connection); + if (plugin == null) return; + + plugin.onSocketClosed(connection); + } + + public void loadPlugins(ConnectionManager connectionManager, GuiManager guiManager) { + File pluginDir = new File("plugins"); + File[] jarFiles = pluginDir.listFiles((dir, name) -> name.endsWith(".jar")); + + if (jarFiles == null || jarFiles.length == 0) { + System.out.println("No plugins found in the " + pluginDir.getAbsolutePath() + " directory."); + return; + } + + for (File file : jarFiles) { + + if (loadedJars.contains(file.getName())) { + continue; + } + + System.out.println("Discovered plugin package: " + file.getName()); + + try { + URLClassLoader classLoader = new URLClassLoader( + new URL[]{file.toURI().toURL()}, + Main.class.getClassLoader() + ); + + ServiceLoader serviceLoader = ServiceLoader.load(Plugin.class, classLoader); + + for (Plugin plugin : serviceLoader) { + System.out.println("Loading: " + plugin.getName()); + + plugin.createPlugin(connectionManager, guiManager); + plugins.add(plugin); + loadedJars.add(file.getName()); + } + + } catch (Exception e) { + System.out.println("Failed to load plugin " + file.getName()); + e.printStackTrace(); + } } } } diff --git a/pitiupi/src/pitiupi/model/Menus/Menu.java b/pitiupi/src/pitiupi/model/Menus/Menu.java new file mode 100644 index 0000000..5cc8805 --- /dev/null +++ b/pitiupi/src/pitiupi/model/Menus/Menu.java @@ -0,0 +1,6 @@ +package pitiupi.model.Menus; + +public abstract class Menu { + public abstract String getText(); + public abstract MenuCategory getCategory(); +} diff --git a/pitiupi/src/pitiupi/model/Menus/MenuCategory.java b/pitiupi/src/pitiupi/model/Menus/MenuCategory.java new file mode 100644 index 0000000..1d4f57e --- /dev/null +++ b/pitiupi/src/pitiupi/model/Menus/MenuCategory.java @@ -0,0 +1,7 @@ +package pitiupi.model.Menus; + +public enum MenuCategory { + JOGOS, + SOCIAL, + STREAMING +} diff --git a/pitiupi/src/pitiupi/model/Menus/MulticastMenu.java b/pitiupi/src/pitiupi/model/Menus/MulticastMenu.java new file mode 100644 index 0000000..fa740cc --- /dev/null +++ b/pitiupi/src/pitiupi/model/Menus/MulticastMenu.java @@ -0,0 +1,5 @@ +package pitiupi.model.Menus; + +public abstract class MulticastMenu extends Menu { + public abstract void onClick(); +} diff --git a/pitiupi/src/pitiupi/model/Menus/UnicastMenu.java b/pitiupi/src/pitiupi/model/Menus/UnicastMenu.java new file mode 100644 index 0000000..3ce02c1 --- /dev/null +++ b/pitiupi/src/pitiupi/model/Menus/UnicastMenu.java @@ -0,0 +1,7 @@ +package pitiupi.model.Menus; + +import pitiupi.model.User; + +public abstract class UnicastMenu extends Menu { + public abstract void onClick(User user); +} diff --git a/pitiupi/src/pitiupi/net/HeartbeatMessage.java b/pitiupi/src/pitiupi/model/Messages/HeartbeatMessage.java similarity index 91% rename from pitiupi/src/pitiupi/net/HeartbeatMessage.java rename to pitiupi/src/pitiupi/model/Messages/HeartbeatMessage.java index 5476e0e..4fb198c 100644 --- a/pitiupi/src/pitiupi/net/HeartbeatMessage.java +++ b/pitiupi/src/pitiupi/model/Messages/HeartbeatMessage.java @@ -1,4 +1,6 @@ -package pitiupi.net; +package pitiupi.model.Messages; + +import pitiupi.model.Messages.Message; /** * Mensagem utilizada para sinalizar a presença de um usuário na rede. diff --git a/pitiupi/src/pitiupi/net/tcp/SysInfoMessage.java b/pitiupi/src/pitiupi/model/Messages/InfoMessage.java similarity index 54% rename from pitiupi/src/pitiupi/net/tcp/SysInfoMessage.java rename to pitiupi/src/pitiupi/model/Messages/InfoMessage.java index 9e149eb..8ac292f 100644 --- a/pitiupi/src/pitiupi/net/tcp/SysInfoMessage.java +++ b/pitiupi/src/pitiupi/model/Messages/InfoMessage.java @@ -1,6 +1,6 @@ -package pitiupi.net.tcp; +package pitiupi.model.Messages; -import pitiupi.net.Message; +import pitiupi.net.tcp.TcpConnection; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -8,12 +8,11 @@ import java.io.ObjectInputStream; import java.util.logging.Level; import java.util.logging.Logger; -public class SysInfoMessage extends Message { - - private final SysInfoType type; +public class InfoMessage extends Message { + private final InfoType type; private final String message; - public SysInfoMessage(String message, SysInfoType type) { + public InfoMessage(String message, InfoType type) { this.message = message; this.type = type; } @@ -22,29 +21,29 @@ public class SysInfoMessage extends Message { return message; } - public SysInfoType getType() { + public InfoType getType() { return type; } - public static void sendSystemInfo(TcpConnection connection, SysInfoType type, String description) { + public static void sendSystemInfo(TcpConnection connection, InfoType type, String description) { try { - SysInfoMessage error = new SysInfoMessage(description, type); + InfoMessage error = new InfoMessage(description, type); connection.send(error.toByteArray()); } catch (IOException ex) { - Logger.getLogger(SysInfoMessage.class.getName()).log(Level.WARNING, null, ex); + Logger.getLogger(InfoMessage.class.getName()).log(Level.WARNING, null, ex); } } - public static SysInfoMessage parseSystemInfo(byte[] bytes) { + public static InfoMessage parseSystemInfo(byte[] bytes) { try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bis)) { Object object = ois.readObject(); - if (object instanceof SysInfoMessage) { - return (SysInfoMessage) object; + if (object instanceof InfoMessage) { + return (InfoMessage) object; } } catch (IOException | ClassNotFoundException ex) { - Logger.getLogger(SysInfoMessage.class.getName()).log(Level.WARNING, null, ex); + Logger.getLogger(InfoMessage.class.getName()).log(Level.WARNING, null, ex); } return null; } diff --git a/pitiupi/src/pitiupi/net/tcp/SysInfoType.java b/pitiupi/src/pitiupi/model/Messages/InfoType.java similarity index 68% rename from pitiupi/src/pitiupi/net/tcp/SysInfoType.java rename to pitiupi/src/pitiupi/model/Messages/InfoType.java index c5dfe44..12cc8fa 100644 --- a/pitiupi/src/pitiupi/net/tcp/SysInfoType.java +++ b/pitiupi/src/pitiupi/model/Messages/InfoType.java @@ -1,6 +1,6 @@ -package pitiupi.net.tcp; +package pitiupi.model.Messages; -public enum SysInfoType { +public enum InfoType { CONNECTION_REJECTED, RECEIVER_NOT_FOUND, MESSAGE_REJECTED, diff --git a/pitiupi/src/pitiupi/net/Message.java b/pitiupi/src/pitiupi/model/Messages/Message.java similarity index 97% rename from pitiupi/src/pitiupi/net/Message.java rename to pitiupi/src/pitiupi/model/Messages/Message.java index db6be65..5d579ba 100644 --- a/pitiupi/src/pitiupi/net/Message.java +++ b/pitiupi/src/pitiupi/model/Messages/Message.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package pitiupi.net; +package pitiupi.model.Messages; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/pitiupi/src/pitiupi/plugin/Plugin.java b/pitiupi/src/pitiupi/model/Plugin.java similarity index 55% rename from pitiupi/src/pitiupi/plugin/Plugin.java rename to pitiupi/src/pitiupi/model/Plugin.java index 321335b..c84be36 100644 --- a/pitiupi/src/pitiupi/plugin/Plugin.java +++ b/pitiupi/src/pitiupi/model/Plugin.java @@ -2,12 +2,11 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template */ -package pitiupi.plugin; +package pitiupi.model; -import pitiupi.GUI.MainWindow; import pitiupi.control.ConnectionManager; import pitiupi.control.GuiManager; -import pitiupi.net.Message; +import pitiupi.model.Messages.Message; import pitiupi.net.tcp.TcpConnection; /** @@ -18,28 +17,29 @@ import pitiupi.net.tcp.TcpConnection; * * @author flavio */ -public interface Plugin { +public abstract class Plugin { - public String getName(); - public String getAuthor(); - public String getVersion(); - public String getIdentifier(); + public abstract String getName(); + public abstract String getAuthor(); + public abstract String getVersion(); + public abstract String getIdentifier(); /** * Inicializa o plugin. * *

Este método é chamado pela aplicação após o carregamento do plugin.

* - * @param window janela principal da aplicação. + * @param connectionManager interface com o sistema de conexões da aplicação. + * @param guiManager interface com a janela principal da aplicação */ - public void createPlugin(ConnectionManager connectionManager, GuiManager guiManager); + public abstract void createPlugin(ConnectionManager connectionManager, GuiManager guiManager); /** * Retorna uma mensagem utilizada pelo plugin. * * @return mensagem criada pelo plugin. */ - public Message getMessage(); + public abstract Message getMessage(); /** * Recebe uma mensagem enviada pela aplicação. @@ -49,6 +49,15 @@ public interface Plugin { * * @param message mensagem serializada recebida. */ - public void receiveMessage(byte[] message); + public abstract void receiveMessage(byte[] message); + public boolean receivePrivateConnection(TcpConnection connection) { + return false; + } + public boolean receiveBytes(TcpConnection connection, byte[] bytes) { + return false; + } + public boolean onSocketClosed(TcpConnection connection) { + return false; + } } \ No newline at end of file diff --git a/pitiupi/src/pitiupi/control/PeerInfo.java b/pitiupi/src/pitiupi/model/User.java similarity index 89% rename from pitiupi/src/pitiupi/control/PeerInfo.java rename to pitiupi/src/pitiupi/model/User.java index b798120..22d4024 100644 --- a/pitiupi/src/pitiupi/control/PeerInfo.java +++ b/pitiupi/src/pitiupi/model/User.java @@ -1,4 +1,4 @@ -package pitiupi.control; +package pitiupi.model; import java.net.InetAddress; /** @@ -10,13 +10,13 @@ import java.net.InetAddress; * * @author tony */ -public class PeerInfo { +public class User { private final String userName; private final InetAddress address; private volatile long lastSeen; - public PeerInfo(String userName, InetAddress address, long lastSeen) { + public User(String userName, InetAddress address, long lastSeen) { this.userName = userName; this.address = address; this.lastSeen = lastSeen; diff --git a/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java b/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java index 954a56e..2d07c0b 100644 --- a/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java +++ b/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java @@ -1,6 +1,8 @@ package pitiupi.net.tcp; -import pitiupi.net.Message; +import pitiupi.model.Messages.Message; +import pitiupi.model.Messages.InfoMessage; +import pitiupi.model.Messages.InfoType; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -152,7 +154,7 @@ public class ConnectionFactory { Object object = ois.readObject(); if (object instanceof Message message) { - SysInfoMessage sysInfo = SysInfoMessage.parseSystemInfo(bytes); + InfoMessage sysInfo = InfoMessage.parseSystemInfo(bytes); if (sysInfo != null) return null; @@ -161,25 +163,25 @@ public class ConnectionFactory { } } - SysInfoMessage.sendSystemInfo( + InfoMessage.sendSystemInfo( connection, - SysInfoType.CONNECTION_REJECTED, + InfoType.CONNECTION_REJECTED, "The message was not from an allowed type." ); } catch (SocketTimeoutException ex) { - SysInfoMessage.sendSystemInfo( + InfoMessage.sendSystemInfo( connection, - SysInfoType.CONNECTION_REJECTED, + InfoType.CONNECTION_REJECTED, "No handshake was received within the allowed time." ); } catch (ClassNotFoundException | IOException ex) { Logger.getLogger(ConnectionFactory.class.getName()).log(Level.SEVERE, null, ex); - SysInfoMessage.sendSystemInfo( + InfoMessage.sendSystemInfo( connection, - SysInfoType.INTERNAL_ERROR, + InfoType.INTERNAL_ERROR, "The server could not process the handshake." ); } @@ -206,17 +208,17 @@ public class ConnectionFactory { String receiver = handshake.getReceiver(); if (sender == null || sender.isBlank()) { - SysInfoMessage.sendSystemInfo( + InfoMessage.sendSystemInfo( connection, - SysInfoType.CONNECTION_REJECTED, + InfoType.CONNECTION_REJECTED, "Invalid Sender: " + sender + "." ); return false; } if (receiver == null || receiver.isBlank()) { - SysInfoMessage.sendSystemInfo( + InfoMessage.sendSystemInfo( connection, - SysInfoType.CONNECTION_REJECTED, + InfoType.CONNECTION_REJECTED, "Invalid Receiver: " + receiver + "." ); return false; diff --git a/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java b/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java index d18b593..4783cd0 100644 --- a/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java +++ b/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java @@ -1,6 +1,6 @@ package pitiupi.net.tcp; -import pitiupi.net.Message; +import pitiupi.model.Messages.Message; class HandshakeMessage extends Message { private final boolean isPrivate; diff --git a/pitiupi/src/pitiupi/net/tcp/SocketTCP.java b/pitiupi/src/pitiupi/net/tcp/SocketTCP.java index a08e309..11d9ca4 100644 --- a/pitiupi/src/pitiupi/net/tcp/SocketTCP.java +++ b/pitiupi/src/pitiupi/net/tcp/SocketTCP.java @@ -2,8 +2,9 @@ package pitiupi.net.tcp; import pitiupi.control.ConnectionManager; import pitiupi.control.PluginManager; -import pitiupi.net.Message; -import pitiupi.plugin.PrivateConnectionPlugin; +import pitiupi.model.Messages.Message; +import pitiupi.model.Messages.InfoMessage; +import pitiupi.model.Messages.InfoType; import java.io.*; import java.net.*; @@ -273,9 +274,9 @@ public class SocketTCP extends Thread { if (pluginManager.handleConnection(connection, connection.getReceiver())) privateConnectionReceiver(connection); else { - SysInfoMessage.sendSystemInfo( + InfoMessage.sendSystemInfo( connection, - SysInfoType.RECEIVER_NOT_FOUND, + InfoType.RECEIVER_NOT_FOUND, "This peer does not have the plugin: " + connection.getReceiver() ); } @@ -300,7 +301,7 @@ public class SocketTCP extends Thread { try { byte[] bytes = connection.receive(); - SysInfoMessage sysMessage = SysInfoMessage.parseSystemInfo(bytes); + InfoMessage sysMessage = InfoMessage.parseSystemInfo(bytes); if (sysMessage == null) { pluginManager.handlePublicMessage(bytes); @@ -345,7 +346,7 @@ public class SocketTCP extends Thread { while (running) { try { byte[] message = connection.receive(); - SysInfoMessage sysMessage = SysInfoMessage.parseSystemInfo(message); + InfoMessage sysMessage = InfoMessage.parseSystemInfo(message); if (sysMessage == null) { pluginManager.handlePrivateMessage(connection, message); @@ -390,7 +391,7 @@ public class SocketTCP extends Thread { try (ByteArrayInputStream bis = new ByteArrayInputStream(message); ObjectInputStream ois = new ObjectInputStream(bis)) { - SysInfoMessage sysMessage = SysInfoMessage.parseSystemInfo(message); + InfoMessage sysMessage = InfoMessage.parseSystemInfo(message); if (sysMessage != null) continue; //TODO: Ainda não existem mensagens trocadas entre o sistema. diff --git a/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java b/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java index 473283e..527b574 100644 --- a/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java +++ b/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java @@ -1,7 +1,9 @@ package pitiupi.net.tcp; -import pitiupi.control.PeerInfo; +import pitiupi.model.Messages.InfoType; +import pitiupi.model.User; import pitiupi.control.PeerListener; +import pitiupi.model.Messages.InfoMessage; import java.io.IOException; import java.net.InetAddress; @@ -99,7 +101,7 @@ class TcpConnectionManager implements PeerListener { * @param reason motivo do encerramento que será informado ao peer. */ public void closeConnection(TcpConnection connection, String reason) { - SysInfoMessage.sendSystemInfo(connection, SysInfoType.CONNECTION_CLOSED, reason); + InfoMessage.sendSystemInfo(connection, InfoType.CONNECTION_CLOSED, reason); closeConnection(connection); } @@ -153,7 +155,7 @@ class TcpConnectionManager implements PeerListener { public void closeByAdress(InetAddress address, String reason) { List connections = privateConnections.get(address); for (TcpConnection connection : connections) { - SysInfoMessage.sendSystemInfo(connection, SysInfoType.CONNECTION_CLOSED, reason); + InfoMessage.sendSystemInfo(connection, InfoType.CONNECTION_CLOSED, reason); } closeByAdress(address); } @@ -205,7 +207,7 @@ class TcpConnectionManager implements PeerListener { public void closeAllConnections(String reason) { for (List connections : privateConnections.values()) { for (TcpConnection connection : connections) { - SysInfoMessage.sendSystemInfo(connection, SysInfoType.CONNECTION_CLOSED, reason); + InfoMessage.sendSystemInfo(connection, InfoType.CONNECTION_CLOSED, reason); } } closeAllConnections(); @@ -245,8 +247,8 @@ class TcpConnectionManager implements PeerListener { */ @Override - public void onPeersChanged(List peers) { - Set activePeers = peers.stream().map(PeerInfo::getAddress).collect(Collectors.toSet()); + public void onPeersChanged(List peers) { + Set activePeers = peers.stream().map(User::getAddress).collect(Collectors.toSet()); for (InetAddress address : publicConnections.keySet()) { if (!activePeers.contains(address)) { diff --git a/pitiupi/src/pitiupi/net/udp/SocketUDP.java b/pitiupi/src/pitiupi/net/udp/SocketUDP.java index fbb6708..6bc9cc1 100644 --- a/pitiupi/src/pitiupi/net/udp/SocketUDP.java +++ b/pitiupi/src/pitiupi/net/udp/SocketUDP.java @@ -5,7 +5,6 @@ */ package pitiupi.net.udp; -import pitiupi.GUI.MainWindow; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInput; @@ -16,9 +15,8 @@ import java.util.logging.Logger; import pitiupi.control.ConnectionManager; import pitiupi.control.PluginManager; -import pitiupi.net.HeartbeatMessage; -import pitiupi.net.Message; -import pitiupi.plugin.Plugin; +import pitiupi.model.Messages.HeartbeatMessage; +import pitiupi.model.Messages.Message; /** * Gerencia a comunicação UDP multicast e unicast da aplicação. diff --git a/pitiupi/src/pitiupi/plugin/PrivateConnectionPlugin.java b/pitiupi/src/pitiupi/plugin/PrivateConnectionPlugin.java deleted file mode 100644 index 7da4368..0000000 --- a/pitiupi/src/pitiupi/plugin/PrivateConnectionPlugin.java +++ /dev/null @@ -1,9 +0,0 @@ -package pitiupi.plugin; - -import pitiupi.net.tcp.TcpConnection; - -public interface PrivateConnectionPlugin extends Plugin { - public void receivePrivateConnection(TcpConnection connection); - public void receiveBytes(TcpConnection connection, byte[] bytes); - public void onSocketClosed(TcpConnection connection); -}