release/facade.v2.0.0 #2

Merged
gustavo merged 12 commits from release/facade.v2.0.0 into main 2026-10-07 12:08:17 -03:00
4 changed files with 111 additions and 90 deletions
Showing only changes of commit 12497594e4 - Show all commits

No files matched your search

@@ -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<TcpConnection, ChatWindow> 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<User> list) {
}
}
+110 -1
View File
@@ -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.
@@ -30,18 +30,6 @@ public class GuiManager {
} }
public void createMenu(MenuCategory category, Menu menu) { 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 { try {
JMenuItem newMenu = buildMenu(menu); JMenuItem newMenu = buildMenu(menu);
if (menu instanceof MulticastMenu) { if (menu instanceof MulticastMenu) {
@@ -63,8 +51,6 @@ public class GuiManager {
newMenu.add(buildMenu(child)); newMenu.add(buildMenu(child));
} }
multicastSubMenu.onMenuBuilt(newMenu);
return newMenu; return newMenu;
} }
+1 -2
View File
@@ -28,8 +28,7 @@ public abstract class Plugin {
* *
* <p>Este método é chamado pela aplicação após o carregamento do plugin.</p> * <p>Este método é chamado pela aplicação após o carregamento do plugin.</p>
* *
* @param connectionManager interface com o sistema de conexões da aplicação. * @param pitiupi interface com o sistema de conexões da aplicação.
* @param guiManager interface com a janela principal da aplicação
*/ */
public abstract void createPlugin(Pitiupi pitiupi); public abstract void createPlugin(Pitiupi pitiupi);