getMenus() {
+ return List.of(chatMulticastMenu);
+ }
+}
+```
+
+### GUI
+
+Essa é a janela principal do plugin de chat.
+
+```
+public class ChatWindow extends JDialog {
+
+ private JButton jButton1;
+ private JEditorPane jEditorPane1;
+ private JPanel jPanel1;
+ private JPanel jPanel2;
+ private JScrollPane jScrollPane1;
+ private JScrollPane jScrollPane2;
+ private JSplitPane jSplitPane1;
+ private JTextArea jTextArea1;
+
+ private final Pitiupi pitiupi;
+
+ public ChatWindow(Pitiupi pitiupi) {
+ this.pitiupi = pitiupi;
+ initComponents();
+ }
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ private void initComponents() {
+
+ this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
+ this.setTitle("Chat Window");
+ this.setBounds(new java.awt.Rectangle(0, 0, 800, 600));
+ this.getContentPane().setLayout(new java.awt.BorderLayout(5, 5));
+ this.setPreferredSize(new java.awt.Dimension(800, 600));
+
+ jSplitPane1 = new JSplitPane();
+ jScrollPane1 = new JScrollPane();
+ jEditorPane1 = new JEditorPane();
+ jPanel1 = new JPanel();
+ jScrollPane2 = new JScrollPane();
+ jTextArea1 = new JTextArea();
+ jPanel2 = new JPanel();
+ jButton1 = new JButton();
+
+ jSplitPane1.setDividerLocation(500);
+ jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);
+ jEditorPane1.setContentType("text/html");
+ jPanel1.setLayout(new java.awt.BorderLayout());
+ jTextArea1.setColumns(20);
+ jTextArea1.setRows(5);
+ jTextArea1.addKeyListener(new java.awt.event.KeyAdapter() {
+ @Override
+ public void keyTyped(java.awt.event.KeyEvent evt) {
+ if (evt.getKeyChar() == '\n') {
+ sendMessage();
+ }
+ }
+ });
+ jButton1.setText("Send");
+
+ jScrollPane1.setViewportView(jEditorPane1);
+ jScrollPane2.setViewportView(jTextArea1);
+ jSplitPane1.setTopComponent(jScrollPane1);
+
+ jPanel1.add(jScrollPane2, java.awt.BorderLayout.CENTER);
+ jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));
+ jButton1.addActionListener((java.awt.event.ActionEvent evt) -> {
+ sendMessage();
+ });
+ jPanel2.add(jButton1);
+ jPanel1.add(jPanel2, java.awt.BorderLayout.PAGE_END);
+ jSplitPane1.setRightComponent(jPanel1);
+ getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
+ pack();
+ }
+
+ private void sendMessage() {
+ if (jTextArea1.getText().trim().isEmpty()) {
+ return;
+ }
+ ChatMessage message = new ChatMessage(pitiupi.getUserName(), jTextArea1.getText());
+ this.sendChatMessage(message);
+ jTextArea1.setText("");
+ }
+
+ public void sendChatMessage(Message message) {
+ pitiupi.sendUdpMulticast(message);
+ }
+
+ public void receiveChatMessage(ChatMessage message) {
+ SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yyyyy hh:mm:ss");
+ Date date = new Date();
+ this.receiveChatMessage(dt.format(date) + " "
+ + "" + message.getName() + ": "
+ + message.getText() + "
");
+ }
+
+ public void receiveChatMessage(String message) {
+ jEditorPane1.setText(message + jEditorPane1.getText());
+ }
+}
+```
\ No newline at end of file
diff --git a/pitiupi/src/pitiupi/control/GuiManager.java b/pitiupi/src/pitiupi/control/GuiManager.java
index b2a6f63..02c3c29 100644
--- a/pitiupi/src/pitiupi/control/GuiManager.java
+++ b/pitiupi/src/pitiupi/control/GuiManager.java
@@ -30,18 +30,6 @@ public class GuiManager {
}
public void createMenu(MenuCategory category, Menu menu) {
- System.out.println(
- menu.getClass().getSuperclass().getSuperclass()
- );
-
- System.out.println(
- MulticastMenu.class
- );
-
- System.out.println(
- menu.getClass().getSuperclass().getSuperclass()
- == MulticastMenu.class
- );
try {
JMenuItem newMenu = buildMenu(menu);
if (menu instanceof MulticastMenu) {
@@ -55,7 +43,6 @@ public class GuiManager {
logger.log(Level.WARNING, e.getMessage());
}
}
-
private JMenuItem buildMenu(Menu menu) {
if (menu instanceof MulticastSubMenu multicastSubMenu) {
JMenu newMenu = new JMenu(menu.getText());
diff --git a/pitiupi/src/pitiupi/control/plugins/PluginManager.java b/pitiupi/src/pitiupi/control/plugins/PluginManager.java
index ada270d..60f29f4 100644
--- a/pitiupi/src/pitiupi/control/plugins/PluginManager.java
+++ b/pitiupi/src/pitiupi/control/plugins/PluginManager.java
@@ -1,5 +1,6 @@
package pitiupi.control.plugins;
+import pitiupi.plugin.Pitiupi;
import pitiupi.Main;
import pitiupi.control.ConnectionManager;
import pitiupi.control.GuiManager;
@@ -92,6 +93,7 @@ public class PluginManager {
public void loadPlugins(ConnectionManager connectionManager, GuiManager guiManager) {
File pluginDir = new File("plugins");
File[] jarFiles = pluginDir.listFiles((dir, name) -> name.endsWith(".jar"));
+ Pitiupi pitiupi = new Pitiupi(connectionManager, guiManager);
if (jarFiles == null || jarFiles.length == 0) {
System.out.println("No plugins found in the " + pluginDir.getAbsolutePath() + " directory.");
@@ -118,7 +120,7 @@ public class PluginManager {
System.out.println("Loading: " + plugin.getName());
LoadedPlugin loadedPlugin = new LoadedPlugin(plugin, classLoader);
- plugin.createPlugin(connectionManager, guiManager);
+ plugin.createPlugin(pitiupi);
loadedPlugins.add(loadedPlugin);
loadedJars.add(file.getName());
}
diff --git a/pitiupi/src/pitiupi/models/Plugin.java b/pitiupi/src/pitiupi/models/Plugin.java
index ffd898c..f28e62b 100644
--- a/pitiupi/src/pitiupi/models/Plugin.java
+++ b/pitiupi/src/pitiupi/models/Plugin.java
@@ -3,9 +3,7 @@
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
*/
package pitiupi.models;
-
-import pitiupi.control.ConnectionManager;
-import pitiupi.control.GuiManager;
+import pitiupi.plugin.Pitiupi;
import pitiupi.models.Messages.Message;
import pitiupi.net.tcp.TcpConnection;
@@ -30,10 +28,9 @@ public abstract class Plugin {
*
* Este método é chamado pela aplicação após o carregamento do plugin.
*
- * @param connectionManager interface com o sistema de conexões da aplicação.
- * @param guiManager interface com a janela principal da aplicação
+ * @param pitiupi interface com o sistema de conexões da aplicação.
*/
- public abstract void createPlugin(ConnectionManager connectionManager, GuiManager guiManager);
+ public abstract void createPlugin(Pitiupi pitiupi);
/**
* Retorna uma mensagem utilizada pelo plugin.
@@ -62,4 +59,4 @@ public abstract class Plugin {
public boolean onSocketClosed(TcpConnection connection) {
return false;
}
-}
\ No newline at end of file
+}
diff --git a/pitiupi/src/pitiupi/plugin/Pitiupi.java b/pitiupi/src/pitiupi/plugin/Pitiupi.java
new file mode 100644
index 0000000..071de18
--- /dev/null
+++ b/pitiupi/src/pitiupi/plugin/Pitiupi.java
@@ -0,0 +1,49 @@
+package pitiupi.plugin;
+
+import pitiupi.control.ConnectionManager;
+import pitiupi.control.GuiManager;
+import pitiupi.models.Menus.Menu;
+import pitiupi.models.Menus.MenuCategory;
+import pitiupi.models.Messages.Message;
+import pitiupi.net.tcp.TcpConnection;
+
+import java.net.InetAddress;
+
+public class Pitiupi {
+
+ private final ConnectionManager connectionManager;
+ private final GuiManager guiManager;
+
+ public Pitiupi(ConnectionManager connectionManager, GuiManager guiManager) {
+ this.connectionManager = connectionManager;
+ this.guiManager = guiManager;
+ }
+
+ public boolean sendUdpMulticast(Message message) {
+ return connectionManager.sendUdpMulticast(message);
+ }
+
+ public boolean sendUdpUnicast(Message message, InetAddress address) {
+ return connectionManager.sendUdpUnicast(message, address);
+ }
+
+ public boolean sendTcp(Message message, InetAddress address) {
+ return connectionManager.sendTcp(message, address);
+ }
+
+ public TcpConnection connectTcp(InetAddress address, String senderId, String receiverId) {
+ return connectionManager.connectPluginTcp(address, senderId, receiverId);
+ }
+
+ public String getUserName() {
+ return connectionManager.getUserName();
+ }
+
+ public int getPort() {
+ return connectionManager.getPort();
+ }
+
+ public void createMenu(MenuCategory category, Menu menu) {
+ guiManager.createMenu(category, menu);
+ }
+}