From 12497594e4dea31f45cfeaf8eb37231d5086a5f8 Mon Sep 17 00:00:00 2001 From: GustavoHMDS Date: Mon, 5 Oct 2026 15:03:24 -0300 Subject: [PATCH] Correcao de bug e comeco da documentacao --- .../src/control/ChatController.java | 73 ------------ pitiupi/docs/PluginTutorial.md | 111 +++++++++++++++++- pitiupi/src/pitiupi/control/GuiManager.java | 14 --- pitiupi/src/pitiupi/models/Plugin.java | 3 +- 4 files changed, 111 insertions(+), 90 deletions(-) delete mode 100644 pitiupi.mpChat/src/control/ChatController.java diff --git a/pitiupi.mpChat/src/control/ChatController.java b/pitiupi.mpChat/src/control/ChatController.java deleted file mode 100644 index 07f7bb7..0000000 --- a/pitiupi.mpChat/src/control/ChatController.java +++ /dev/null @@ -1,73 +0,0 @@ -package control; - -import GUI.ChatMenu; -import GUI.ChatWindow; -import GUI.PrivateChatWindow; -import GUI.PublicChatWindow; -import net.MpChatMessage; -import pitiupi.control.ConnectionManager; -import pitiupi.control.PeerListener; -import pitiupi.models.User; -import pitiupi.net.tcp.TcpConnection; - -import javax.swing.*; -import java.net.InetAddress; -import java.util.HashMap; -import java.util.List; - -public class ChatController implements PeerListener { - ConnectionManager connectionManager; - ChatMenu chatMenu; - - PublicChatWindow publicChatWindow; - - private final HashMap chatWindows; - - public ChatController(ConnectionManager connectionManager, ChatMenu chatMenu) { - this.connectionManager = connectionManager; - publicChatWindow = new PublicChatWindow(connectionManager); - - chatMenus = new HashMap<>(); - chatWindows = new HashMap<>(); - - this.chatMenu = chatMenu; - - this.chatMenu.newMenuItem(new JMenuItem("Show global chat"), publicChatWindow); - } - - public void addChatWindow(TcpConnection tcpConnection) { - if (chatWindows.containsKey(tcpConnection)) return; - - PrivateChatWindow newChat = new PrivateChatWindow(connectionManager, tcpConnection); - chatWindows.put(tcpConnection, newChat); - JMenuItem newMenuItem = new JMenuItem(); - chatMenus.put(tcpConnection, newMenuItem); - newMenuItem.setText(tcpConnection.getAddress().toString()); - chatMenu.newMenuItem(newMenuItem, newChat); - } - - public void removeChatWindow(TcpConnection tcpConnection) { - ChatWindow removedWindow = chatWindows.remove(tcpConnection); - JMenuItem removedMenu = chatMenus.remove(tcpConnection); - - chatMenu.removeMenuItem(removedMenu); - removedWindow.setVisible(false); - removedWindow.dispose(); - } - - public void receivePublic(MpChatMessage message) { - publicChatWindow.receiveMessage(message); - } - public void receivePrivate(TcpConnection tcpConnection, MpChatMessage message) { - chatWindows.get(tcpConnection).receiveMessage(message); - } - - public void openChatWindow(InetAddress address) { - - } - - @Override - public void onPeersChanged(List list) { - - } -} diff --git a/pitiupi/docs/PluginTutorial.md b/pitiupi/docs/PluginTutorial.md index 120dcfd..e6202d2 100644 --- a/pitiupi/docs/PluginTutorial.md +++ b/pitiupi/docs/PluginTutorial.md @@ -1,2 +1,111 @@ -# Como criar plugins para o Share my Sheet +# Como criar plugins para o Pitiupi + +## Pitiupi + +A classe `Pitiupi` é a interface que o seu plugin +vai receber quando for criado, ela fornece os métodos +necessários para interagir com a interface gráfica e +comunicação para outros peers. + +### sendUdpMulticast(Message message) + +Envia uma mensagem multicast, retorna `boolean` indicando +se teve sucesso. + +### sendUdpUnicast(Message message, InetAddress address) + +Envia uma mensagem unicast via udp para o endereço fornecido, +retorna `boolean` indicando se teve sucesso. + +### sendTcp(Message message, InetAddress address) + +Envia uma mensagem unicast via tcp para o endereço fornecido, +retorna `boolean` indicando se teve sucesso. + +### connectTcp(InetAddress address, String senderId, String receiverId) + +Pede uma conexão tcp privada para o seu plugin com outro usuário, +para utilizar essa funcionalidade é necessário implementar alguns +métodos opcionais em Plugin. Mais informações serão discutidas na +seção TcpConnection. + +### getUserName() + +Retorna o nome do usuário conectado + +### getPort() + +Retorna a porta que o usuário está usando o Pitiupi + +### createMenu(MenuCategory category, Menu menu) + +Adiciona um menu ao pitiupi, mais detalhes são encontrados +na seção sobre Menus. + +## Classe Plugin + +Essa é a classe que o pitiupi vai procurar ao +carregar o seu plugin, ela define um contrato +de métodos que todo plugin deve possuir. + +### getName() + +Indica o nome público do plugin. + +### getAuthor() + +Indica o nome dos desenvolvedores do plugin. + +### getVersion() + +Indica a versão atual do plugin. + +### getIdentifier() + +Indica um id que o pitiupi vai utilizar para +enontrar seu plugin, por isso é importante que +ele seja bem especifico para evitar que dois +plugins sejam confundidos durante a comunicação. +Procure usar algo como: MeuPlugin.Autor.Números + +### createPlugin(Pitiupi pitiupi) + +Após o pitiupi identificar e carregar o seu plugin, +ele vai chamar esse método para inicializá-lo, por +isso pense nele como o construtor do seu plugin, +é aqui que você inicializa atributos, adiciona os +menus inciais, etc. + +### getMessages() + +Esse método indica ao pitiupi quais tipos de mensagem +seu plugin quer receber, normalmente as que ele mesmo +implementar. +Nesse caso, é normal que ele faça: +``` +return List.of( + SuaMensagem1.class, + SuaMensagem2.class, + ... + ); +``` + +Caso você queira que seu plugin receba todo tipo de +mensagem, existe um método `receiveAllTypes()` que +ele pode sobreescrever para receber todas mensagens +que não sejam consideradas privadas. + +### receiveMessage(Message message) + +Esse é o método que o pitiupi vai chamar quando quiser +te entregar uma mensagem pelo canal publico de mensagens. +Note que ele entrega uma `Message`, então é necessário que +seu plugin confira o tipo real ele mesmo. Como em: + +``` +if (message instanceOf MinhaMensagem minhaMensagem) {...} +``` +O pitiupi garante que é uma mensagem de um tipo +que o seu plugin diz aceitar. + diff --git a/pitiupi/src/pitiupi/control/GuiManager.java b/pitiupi/src/pitiupi/control/GuiManager.java index 1d84241..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) { @@ -63,8 +51,6 @@ public class GuiManager { newMenu.add(buildMenu(child)); } - multicastSubMenu.onMenuBuilt(newMenu); - return newMenu; } diff --git a/pitiupi/src/pitiupi/models/Plugin.java b/pitiupi/src/pitiupi/models/Plugin.java index be51ab2..f28e62b 100644 --- a/pitiupi/src/pitiupi/models/Plugin.java +++ b/pitiupi/src/pitiupi/models/Plugin.java @@ -28,8 +28,7 @@ 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(Pitiupi pitiupi);