Novos menus e envio de mensagens

This commit is contained in:
GustavoHMDS committed 2026-10-02 20:29:35 -03:00
1 parent 6538dac8af
commit 7c9e61ce0f
55 files changed
+683 -368

No files matched your search

+7 -48
View File
@@ -1,11 +1,13 @@
package GUI;
import pitiupi.models.Menus.MenuCategory;
import pitiupi.models.Menus.MulticastMenus.MulticastSubMenu;
import plugin.MultiProtocolChat;
import javax.swing.*;
import java.awt.*;
public class ChatMenu extends JMenu {
public class ChatMenu extends MulticastSubMenu {
private final MultiProtocolChat multiProtocolChat;
public ChatMenu(MultiProtocolChat multiProtocolChat) {
@@ -28,54 +30,11 @@ public class ChatMenu extends JMenu {
}
private void showPrivateChatDialog() {
JDialog dialog = new JDialog(
SwingUtilities.getWindowAncestor(this),
"Novo chat privado",
Dialog.ModalityType.APPLICATION_MODAL
);
JTextField ipField = new JTextField();
}
JButton startButton = new JButton("Iniciar");
JButton cancelButton = new JButton("Cancelar");
JPanel contentPanel = new JPanel(new BorderLayout(10, 10));
contentPanel.setBorder(
BorderFactory.createEmptyBorder(10, 10, 10, 10)
);
JPanel ipPanel = new JPanel(new BorderLayout(5, 5));
ipPanel.add(new JLabel("IP:"), BorderLayout.WEST);
ipPanel.add(ipField, BorderLayout.CENTER);
JPanel buttonsPanel = new JPanel(
new FlowLayout(FlowLayout.RIGHT)
);
buttonsPanel.add(cancelButton);
buttonsPanel.add(startButton);
JLabel errorLabel = new JLabel("Não foi possível estabelecer a conexão.");
errorLabel.setForeground(Color.RED);
errorLabel.setVisible(false);
contentPanel.add(errorLabel, BorderLayout.NORTH);
contentPanel.add(ipPanel, BorderLayout.CENTER);
contentPanel.add(buttonsPanel, BorderLayout.SOUTH);
cancelButton.addActionListener(e -> dialog.dispose());
startButton.addActionListener(e -> {
String ip = ipField.getText();
if (multiProtocolChat.openConnection(ip)) dialog.dispose();
else errorLabel.setVisible(true);
});
dialog.setContentPane(contentPanel);
dialog.pack();
dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(this));
dialog.setVisible(true);
@Override
public String getText() {
return "MP-Chat";
}
}
@@ -0,0 +1,38 @@
package GUI;
import control.ChatController;
import pitiupi.models.Menus.UnicastMenus.UnicastActionMenu;
import pitiupi.models.User;
import plugin.MultiProtocolChat;
import javax.swing.*;
import java.awt.*;
import java.net.InetAddress;
public class PrivateChatMenu extends UnicastActionMenu {
PrivateChatWindow privateChatWindow;
private final MultiProtocolChat multiProtocolChat;
private final ChatController chatController;
public PrivateChatMenu(PrivateChatWindow PrivateChatWindow, MultiProtocolChat multiProtocolChat, ChatController chatController) {
this.privateChatWindow = PrivateChatWindow;
this.multiProtocolChat = multiProtocolChat;
this.chatController = chatController;
}
@Override
public void onClick(User user) {
if (multiProtocolChat.openConnection(user.getAddress())
else errorLabel.setVisible(true);
dialog.setContentPane(contentPanel);
dialog.pack();
dialog.setLocationRelativeTo(SwingUtilities.getWindowAncestor(privateChatWindow));
dialog.setVisible(true);
}
@Override
public String getText() {
return "start Private Chat";
}
}
@@ -0,0 +1,21 @@
package GUI;
import pitiupi.models.Menus.MulticastMenus.MulticastActionMenu;
public class PublicChatMenu extends MulticastActionMenu {
PublicChatWindow publicChatWindow;
PublicChatMenu(PublicChatWindow publicChatWindow) {
this.publicChatWindow = publicChatWindow;
}
@Override
public void onClick() {
publicChatWindow.setVisible(true);
}
@Override
public String getText() {
return "";
}
}
+14 -2
View File
@@ -6,18 +6,21 @@ 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 {
public class ChatController implements PeerListener {
ConnectionManager connectionManager;
ChatMenu chatMenu;
PublicChatWindow publicChatWindow;
private final HashMap<TcpConnection, JMenuItem> chatMenus;
private final HashMap<TcpConnection, ChatWindow> chatWindows;
public ChatController(ConnectionManager connectionManager, ChatMenu chatMenu) {
@@ -58,4 +61,13 @@ public class ChatController {
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 -1
View File
@@ -1,6 +1,6 @@
package net;
import pitiupi.net.Message;
import pitiupi.models.Messages.Message;
public class MpChatMessage extends Message {
private String nome;
@@ -5,9 +5,9 @@ import control.ChatController;
import net.MpChatMessage;
import pitiupi.control.ConnectionManager;
import pitiupi.control.GuiManager;
import pitiupi.net.Message;
import pitiupi.models.Messages.Message;
import pitiupi.net.tcp.TcpConnection;
import pitiupi.plugin.PrivateConnectionPlugin;
import pitiupi.models.Plugin;
import javax.swing.*;
import java.io.ByteArrayInputStream;
@@ -15,7 +15,7 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.InetAddress;
public class MultiProtocolChat implements PrivateConnectionPlugin{
public class MultiProtocolChat extends Plugin {
ChatController chatController;
ConnectionManager connectionManager;
GuiManager guiManager;
@@ -47,7 +47,7 @@ public class MultiProtocolChat implements PrivateConnectionPlugin{
ChatMenu chatMenu = new ChatMenu(this);
chatController = new ChatController(connectionManager, chatMenu);
guiManager.addMenu(chatMenu);
guiManager.addMulticastMenu(chatMenu);
}
@Override
@@ -61,23 +61,25 @@ public class MultiProtocolChat implements PrivateConnectionPlugin{
chatController.receivePublic(mpChatMessage);
}
@Override
public void receivePrivateConnection(TcpConnection tcpConnection) {
public boolean receivePrivateConnection(TcpConnection connection) {
SwingUtilities.invokeLater(() -> {
chatController.addChatWindow(tcpConnection);
chatController.addChatWindow(connection);
});
return true;
}
@Override
public void receiveBytes(TcpConnection connection, byte[] bytes) {
public boolean receiveBytes(TcpConnection connection, byte[] bytes) {
MpChatMessage mpChatMessage = parseMessage(bytes);
chatController.receivePrivate(connection, mpChatMessage);
return true;
}
@Override
public void onSocketClosed(TcpConnection tcpConnection) {
chatController.removeChatWindow(tcpConnection);
public boolean onSocketClosed(TcpConnection connection) {
chatController.removeChatWindow(connection);
return true;
}
public boolean openConnection(String ip) {