Correcao de bug e comeco da documentacao
This commit is contained in:
1 parent
6a597092fe
commit
12497594e4
4 files changed
+111
-90
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) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user