release/facade.v2.0.0 #2
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) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,8 +28,7 @@ public abstract class Plugin {
|
||||
*
|
||||
* <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 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);
|
||||
|
||||
|
||||
Reference in new issue
Block a user