From 7c9e61ce0ffe302788ccca83012b30edd181b581 Mon Sep 17 00:00:00 2001 From: GustavoHMDS Date: Fri, 2 Oct 2026 20:29:35 -0300 Subject: [PATCH] Novos menus e envio de mensagens --- pitiupi.chat/build/built-jar.properties | 6 +- .../classes/pitiupi/chat/GUI/ChatMenu.class | Bin 1552 -> 922 bytes .../pitiupi/chat/GUI/ChatWindow$1.class | Bin 944 -> 944 bytes .../classes/pitiupi/chat/GUI/ChatWindow.class | Bin 5266 -> 5302 bytes .../pitiupi/chat/net/ChatMessage.class | Bin 876 -> 888 bytes .../pitiupi/chat/plugin/ChatPlugin.class | Bin 2363 -> 2058 bytes ...pi.plugin.Plugin => pitiupi.models.Plugin} | 0 .../src/pitiupi/chat/GUI/ChatMenu.java | 29 ++-- .../pitiupi/chat/GUI/ChatMulticastMenu.java | 21 +++ .../src/pitiupi/chat/GUI/ChatWindow.java | 46 +++--- .../src/pitiupi/chat/net/ChatMessage.java | 6 +- .../src/pitiupi/chat/plugin/ChatPlugin.java | 44 +++-- pitiupi.mpChat/src/GUI/ChatMenu.java | 55 +------ pitiupi.mpChat/src/GUI/PrivateChatMenu.java | 38 +++++ pitiupi.mpChat/src/GUI/PublicChatMenu.java | 21 +++ ...pi.plugin.Plugin => pitiupi.models.Plugin} | 0 .../src/control/ChatController.java | 16 +- pitiupi.mpChat/src/net/MpChatMessage.java | 2 +- .../src/plugin/MultiProtocolChat.java | 22 +-- pitiupi.testSocket/pitiupi.testSocket.iml | 11 -- pitiupi/docs/Documentation.md | 4 +- pitiupi/src/pitiupi/GUI/MainWindow.java | 31 ++-- pitiupi/src/pitiupi/GUI/MenuBar.java | 85 ++++++---- pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java | 70 ++++++-- .../pitiupi/control/ConnectionManager.java | 7 +- pitiupi/src/pitiupi/control/GuiManager.java | 84 +++++++++- .../src/pitiupi/control/HeartbeatManager.java | 4 +- pitiupi/src/pitiupi/control/PeerListener.java | 2 +- .../src/pitiupi/control/PluginManager.java | 100 ------------ .../pitiupi/control/plugins/LoadedPlugin.java | 22 +++ .../control/plugins/PluginManager.java | 154 ++++++++++++++++++ .../plugins/PluginObjectInputStream.java | 20 +++ pitiupi/src/pitiupi/model/Menus/Menu.java | 6 - .../src/pitiupi/model/Menus/MenuCategory.java | 7 - .../pitiupi/model/Menus/MulticastMenu.java | 5 - .../src/pitiupi/model/Menus/UnicastMenu.java | 7 - pitiupi/src/pitiupi/models/Menus/Menu.java | 5 + .../pitiupi/models/Menus/MenuCategory.java | 7 + .../MulticastMenus/MulticastActionMenu.java | 5 + .../Menus/MulticastMenus/MulticastMenu.java | 9 + .../MulticastMenus/MulticastSubMenu.java | 7 + .../Menus/UnicastMenus/UnicastActionMenu.java | 7 + .../Menus/UnicastMenus/UnicastMenu.java | 8 + .../Menus/UnicastMenus/UnicastSubMenu.java | 7 + .../Messages/HeartbeatMessage.java | 4 +- .../Messages/InfoMessage.java | 2 +- .../{model => models}/Messages/InfoType.java | 2 +- .../{model => models}/Messages/Message.java | 15 +- .../src/pitiupi/{model => models}/Plugin.java | 12 +- .../src/pitiupi/{model => models}/User.java | 2 +- .../pitiupi/net/tcp/ConnectionFactory.java | 6 +- .../src/pitiupi/net/tcp/HandshakeMessage.java | 2 +- pitiupi/src/pitiupi/net/tcp/SocketTCP.java | 12 +- .../pitiupi/net/tcp/TcpConnectionManager.java | 6 +- pitiupi/src/pitiupi/net/udp/SocketUDP.java | 8 +- 55 files changed, 683 insertions(+), 368 deletions(-) rename pitiupi.chat/src/META-INF/services/{pitiupi.plugin.Plugin => pitiupi.models.Plugin} (100%) create mode 100644 pitiupi.chat/src/pitiupi/chat/GUI/ChatMulticastMenu.java create mode 100644 pitiupi.mpChat/src/GUI/PrivateChatMenu.java create mode 100644 pitiupi.mpChat/src/GUI/PublicChatMenu.java rename pitiupi.mpChat/src/META-INF/services/{pitiupi.plugin.Plugin => pitiupi.models.Plugin} (100%) delete mode 100644 pitiupi.testSocket/pitiupi.testSocket.iml delete mode 100644 pitiupi/src/pitiupi/control/PluginManager.java create mode 100644 pitiupi/src/pitiupi/control/plugins/LoadedPlugin.java create mode 100644 pitiupi/src/pitiupi/control/plugins/PluginManager.java create mode 100644 pitiupi/src/pitiupi/control/plugins/PluginObjectInputStream.java delete mode 100644 pitiupi/src/pitiupi/model/Menus/Menu.java delete mode 100644 pitiupi/src/pitiupi/model/Menus/MenuCategory.java delete mode 100644 pitiupi/src/pitiupi/model/Menus/MulticastMenu.java delete mode 100644 pitiupi/src/pitiupi/model/Menus/UnicastMenu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/Menu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/MenuCategory.java create mode 100644 pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastActionMenu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastMenu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastSubMenu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastActionMenu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastMenu.java create mode 100644 pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastSubMenu.java rename pitiupi/src/pitiupi/{model => models}/Messages/HeartbeatMessage.java (91%) rename pitiupi/src/pitiupi/{model => models}/Messages/InfoMessage.java (97%) rename pitiupi/src/pitiupi/{model => models}/Messages/InfoType.java (80%) rename pitiupi/src/pitiupi/{model => models}/Messages/Message.java (83%) rename pitiupi/src/pitiupi/{model => models}/Plugin.java (87%) rename pitiupi/src/pitiupi/{model => models}/User.java (97%) diff --git a/pitiupi.chat/build/built-jar.properties b/pitiupi.chat/build/built-jar.properties index 5d16962..54fc683 100644 --- a/pitiupi.chat/build/built-jar.properties +++ b/pitiupi.chat/build/built-jar.properties @@ -1,6 +1,6 @@ -#Tue, 29 Sep 2026 11:11:06 -0300 +#Fri, 02 Oct 2026 20:11:21 -0300 -C\:\\Users\\Gustavo\\OneDrive\\Documentos\\Faculdade\\2026_2\\Monitoria\\pitiupi\\pitiupi.chat= +C\:\\Users\\extre\\OneDrive\\Documentos\\Faculdade\\2026_02\\Monitoria\\Pitiupi\\pitiupi.chat= -C\:\\Users\\Gustavo\\OneDrive\\Documentos\\Faculdade\\2026_2\\Monitoria\\pitiupi\\pitiupi= +C\:\\Users\\extre\\OneDrive\\Documentos\\Faculdade\\2026_02\\Monitoria\\Pitiupi\\pitiupi= diff --git a/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatMenu.class b/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatMenu.class index e78acc994fa3a5f5656aebb47946a22944d40069..af3942e3eaea0de2491bbb847bd3769a9524f5e4 100644 GIT binary patch literal 922 zcma)4(M}UV6g{`C-ECQlEd{LzBA{$*bQ9y-5?%-rlSLnjH9l^ar3_hi$#xd~EKM{R zP5b~q%6MmXArx!k!`#fhbI!SE?#!>>-+uzwMYoO;$_6SHZlOweaVDh5&V+NC9EQ=@ z*$?B4V-`sf_+xn^?Po((Ayl_SEaWz!YivN6{>cSuUtxXb!xEM_Hkbm;GqBAP z3%JkOVot&`RyYF-Kfo$W5;t5cq@U`X8@5`X7?O)sxd?Q$h^6=CLWHo64Mr(f&kL&A a`vU75+Bf+t*Z5|^f24anX6B~e*?$0}kl2U- literal 1552 zcma)6>rN9v6#j-5mM)8h0_6?`LEECN_Y1`fRIV0d0+#5%fev=0-EDTaTwcMqF_DsB z;sY3;$#`bBk&*)ON4s;*ob#RU+~(Jxv!4K#u%V*`Aq`;zt!QKD{=yIVk?9^v>$ADO zA*?Dx+q|@-_mUx$OywhJM?`~epaTZOU`2YeT9M{%k$dLKhcz=xhrmx)x@~C{>_djp z+@+Smb*3FR7{ba`C;To0-H0)0uJE?Rk;l-N%qe1Ki4(0&&mnf1R9-_bT{SUY^F&!k z4?>D-zkvY^GPIW|7j?tX?_*s^Qe6;m6)@+Ao+%E5<(Uh%^1Vv4HI3x$i<43qWL zuLMZtRn2Z0xQ!(Bh#(m51y0R525g%3I?|ZYaL2%1%rXpL(<}y^`jVHf+$jm_TJlpW z&ycvH2K5FjlW^89kV7;lE%B~e-Vx3g_aS0AdzY8;+>uJIE5lw}g3rtWGT4-xq5K}Lef1-!L|1x^( zOwg8)^c5lBZZ3TamYz9*mX3AS5KaF;&&N~rogkk6j(BXSh7om0pJ5cJVIr-h8m70u z`Iz_Vf0AN?);Ww`M9_yQ;uu0d?e+l08pLyw9*{*mh=_-HL=rIPGo*=BGgIfaK$7Ag zp)gvwhSYf&^<;xsv}3FRF7gj9f~R;!Fd+)43NVKZeGSsQCfz(<&~Jq_I%!t1jvNO6 E0$t;jod5s; diff --git a/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow$1.class b/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow$1.class index 62a7d32341525c173c411ee7e23ea869886229af..3d3023dea6ab0544590e42c02e72a115284fe166 100644 GIT binary patch delta 27 jcmdnMzJYzi4<<&Z$v>H5Ib9hz8Qd5I7(6D&GY0|yd|wBG delta 27 jcmdnMzJYzi4<<&J$v>H5Io%mJ89W#S7`!IOGY0|ye7gsV diff --git a/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow.class b/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow.class index 23f514a7e9eb915dbf667a9189c0dc40f3492be6..34763e9d4337e5f3fb2089d47a166afe2f704ae6 100644 GIT binary patch delta 341 zcmaKnJ1>J_0EM5o>6i49245>u2}xg`v=%ga?X=;&gH=4!2O4<(;rOKO2?&>S}AN)bNPxHPUcNBTg;pC z+ZO%DZp7?{#q0ZvZag^yR+kSeJ=p2Rg}>2kxf5rDXbj;bOgF7=UI9L`PtcX5VMTE47vn~>3 zM1~EKV^bVh*peRIXy2xl9okf3KUqTTsq%e!rKhxl+FO*Ldf8jXp~mP`@M6%#5do!x YRAt>=*6MgL<-2=9TT?GnGUO@z0x#iGH~;_u delta 305 zcmZ9HJuCxZ0EVBh>4|G|QoU>Fz(T7{MA4M`iTaB{E;O`SKMA3gUb#BS)hc$AFJU$^ zi6#b<)o8X@B}O|piuKKtywCHLyh=WNwRdzUOviGqremcVRadsDnSWEOsMN8@Ome{#mrQfR47VP2 z$1IP`@xnZ>Ebzu6ADDcy!Z)k@kQV{gL>KEKPC=w8i5z8NvMEYzi3;1I=3_@@!**ns zkayO}J_8&uNX3(=%I9!Fsd>JZ)b)Dwm;g3m8bmpv2gmDZkl<8a>vhG&peYq&Nhx}j J8!~Sk{sQSTLA(F} diff --git a/pitiupi.chat/build/classes/pitiupi/chat/net/ChatMessage.class b/pitiupi.chat/build/classes/pitiupi/chat/net/ChatMessage.class index de14b13bc396d0d254efbf2b05ab996a250453af..661793bd1c06c00b8e6310cfe9a49aaf814258ef 100644 GIT binary patch delta 35 qcmaFE_JeJLq=bAyW=UpgL8g9geoAUivA%C=adBdLYVk%@cV+YjfK~6g?ZKk?kl+YaHk!P246eexy;#qdXKsQHI}Ny)=|@G`DqCd9qepPz4z??`|8iX0PNy%9#hCDm{xHCGYpGe z5s0uWw2phiZC^XGLrXXeGh4zD!8SvtTxl!FGF4G!4hFxTjazIm}^R!Gem5xWurW`bhL{#3BmNBb1k6 z<7f=m`yocj=sCQBqJl*gZ{jV68$IYG#U^(`Uz20q2)N~XKTx_Y*A#}$u$m%IwAK|| zVYt#m{ZBb0Y95zyO%`K`p)^p8F-$A%JeIMdprqmkZZcd=QIpc`ha#yNL*Dc_F_tkH zcKXPZnNCiII-p>UVJQtL={Y=zir(bDPkoxjZM?0ZtfGP{!~8Sj%+SI>*jhvQ0mGF0 zlwqyhi2mD#V`-0$pHZXrO8hG|)ulkzRouY_L&4)F7iV0`CkaGN>ZcPGbchMj&0>>b zS~_L%4#TBA`=6iAgj;Hvr@}aM9g)R*3~V!tdkn>+Sk@cTeq;B0qtmsybSITFEHs3} z55vwe_Z}O^@}SUgO~Y;*o{;{UK1$QLV2Wf47rxD93u!ls?))U!PY?c>$c(h zTeUP|D$Gbt^3FvIeVaa#Q=)@Z1Ei#$8Yg+m!elzWMGr=5J610YN+*s++Dc6)!7|LX z0>k{aX>^m`D^!<5qeCeddnrc(Zv~!kEMlJ{gPkxqbv;>d9<;gV(*s9Hv^hB8P9UBN zE)QF7=$U*^NS!T6J;pNGkhg|z{Tw~W09_{e5Yj43YkHb#{D5{E&5Y&?)pM|4XfcHk zX_UvHcjhA+)z|NwqvD%b`*Po*%>1LuT#B{4fw}v7;F0vYu zu1ZDx90vqK5GnCRe1V4)pb`1AA}yOZOd{T)S@O;lv|-YB2S{hqDnAQ7apb81MU@6)HVj%*h5sk{Syfo45%%Xx`fxbGzs=F!8s6^0%8`9aE0>d@VwqS~9BDjq{1$Uz8$AG{c zpVbR(qoR8;2`FkVCk+VPjBUx3o+Qezbtd(x+-1xPh6DzjWb0;P_0-l@EK5DzG)fga zZCjdJj9?JM(zg+T_SpWa#N1;rRg5c79bgo1OTd`GZP#jo+%-37H-b^bqKIRHd8CX)!e05hJCQ%hXTGJrhL&vjRPqmeurQO%{W9EHKiL)&{(j ziu(e+)vz{q)=sioNmhu02b9G*a0)V6P|M|Q(_S|#M$W$##=Ce=!NVvXVWF;o)2C%y zE3$6Q3d{J08y+*VYw3oUQBAyB1i9k^1E`+B7*VYSve0Qvy!|Cjyt{$6)9>SJ@ zm0=+2b%RvJt%Oe zXUoj0g^X(Ha_wyf?L)mx1?oGjsUa5yqFI)btyRse)@c5}eSgW?)ITf=CLr7RR0!N_ z0yV!Utm}MDCk`}0F8h?8U-fF%uh&4aOqqu+Q7wv|xPU2B)9=?*Q#bNXn|9)tU42RM zP${|%#B2Mjp#yY~L#?GD;oxxk<_cQj2ytO@jhVg~=zV_cS`7L_;+JD33LQs0q z7d*rC_vl^-{)loIN|s=W`Czn8yqr zb0w3qOh?9f>q~saB=pe5uc4A-9#@!_EcfW9AJz(T&=^D*5AhOtT0i9ZT?GEdtb#!W zqyKV`Z$qa7of{AemSoSTcrvii1t#~-vD1iuQiBiq0hgS#eDfc`s3xWW diff --git a/pitiupi.chat/src/META-INF/services/pitiupi.plugin.Plugin b/pitiupi.chat/src/META-INF/services/pitiupi.models.Plugin similarity index 100% rename from pitiupi.chat/src/META-INF/services/pitiupi.plugin.Plugin rename to pitiupi.chat/src/META-INF/services/pitiupi.models.Plugin diff --git a/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java b/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java index 8406b59..0d763c8 100644 --- a/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java +++ b/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java @@ -4,28 +4,29 @@ */ package pitiupi.chat.GUI; -import java.awt.event.ActionEvent; -import javax.swing.JMenu; +import pitiupi.models.Menus.MulticastMenus.MulticastMenu; +import pitiupi.models.Menus.MulticastMenus.MulticastSubMenu; + +import java.util.List; /** * * @author flavio */ -public class ChatMenu extends JMenu { - - private final ChatWindow chatWindow; - private javax.swing.JMenuItem menuItem; +public class ChatMenu extends MulticastSubMenu { + ChatMulticastMenu chatMulticastMenu; public ChatMenu(ChatWindow chatWindow) { - this.chatWindow = chatWindow; - this.setText("Chat"); - menuItem = new javax.swing.JMenuItem(); - menuItem.setText("Show Chat Window"); - menuItem.addActionListener(this::chatMenuActionPerformed); - this.add(menuItem); + this.chatMulticastMenu = new ChatMulticastMenu(chatWindow); } - private void chatMenuActionPerformed(ActionEvent ae) { - this.chatWindow.setVisible(true); + @Override + public String getText() { + return "Chat"; + } + + @Override + public List getMenus() { + return List.of(chatMulticastMenu); } } diff --git a/pitiupi.chat/src/pitiupi/chat/GUI/ChatMulticastMenu.java b/pitiupi.chat/src/pitiupi/chat/GUI/ChatMulticastMenu.java new file mode 100644 index 0000000..89cedb7 --- /dev/null +++ b/pitiupi.chat/src/pitiupi/chat/GUI/ChatMulticastMenu.java @@ -0,0 +1,21 @@ +package pitiupi.chat.GUI; + +import pitiupi.models.Menus.MulticastMenus.MulticastActionMenu;; + +public class ChatMulticastMenu extends MulticastActionMenu { + ChatWindow chatWindow; + + public ChatMulticastMenu(ChatWindow chatWindow) { + this.chatWindow = chatWindow; + } + + @Override + public String getText() { + return "Show Chat Window"; + } + + @Override + public void onClick() { + chatWindow.setVisible(true); + } +} diff --git a/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java b/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java index b0cf6d8..7aeed97 100644 --- a/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java +++ b/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java @@ -5,30 +5,28 @@ */ package pitiupi.chat.GUI; -import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.logging.Level; -import java.util.logging.Logger; import pitiupi.chat.net.ChatMessage; -import pitiupi.GUI.MainWindow; import pitiupi.control.ConnectionManager; -import pitiupi.net.Message; +import pitiupi.models.Messages.Message; + +import javax.swing.*; /** * * @author flavio */ -public class ChatWindow extends javax.swing.JDialog { +public class ChatWindow extends JDialog { - private javax.swing.JButton jButton1; - private javax.swing.JEditorPane jEditorPane1; - private javax.swing.JPanel jPanel1; - private javax.swing.JPanel jPanel2; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JScrollPane jScrollPane2; - private javax.swing.JSplitPane jSplitPane1; - private javax.swing.JTextArea jTextArea1; + private JButton jButton1; + private JEditorPane jEditorPane1; + private JPanel jPanel1; + private JPanel jPanel2; + private JScrollPane jScrollPane1; + private JScrollPane jScrollPane2; + private JSplitPane jSplitPane1; + private JTextArea jTextArea1; private final ConnectionManager connectionManager; @@ -44,23 +42,23 @@ public class ChatWindow extends javax.swing.JDialog { */ private void initComponents() { - this.setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE); + this.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE); this.setTitle("Chat Window"); this.setBounds(new java.awt.Rectangle(0, 0, 800, 600)); this.getContentPane().setLayout(new java.awt.BorderLayout(5, 5)); this.setPreferredSize(new java.awt.Dimension(800, 600)); - jSplitPane1 = new javax.swing.JSplitPane(); - jScrollPane1 = new javax.swing.JScrollPane(); - jEditorPane1 = new javax.swing.JEditorPane(); - jPanel1 = new javax.swing.JPanel(); - jScrollPane2 = new javax.swing.JScrollPane(); - jTextArea1 = new javax.swing.JTextArea(); - jPanel2 = new javax.swing.JPanel(); - jButton1 = new javax.swing.JButton(); + jSplitPane1 = new JSplitPane(); + jScrollPane1 = new JScrollPane(); + jEditorPane1 = new JEditorPane(); + jPanel1 = new JPanel(); + jScrollPane2 = new JScrollPane(); + jTextArea1 = new JTextArea(); + jPanel2 = new JPanel(); + jButton1 = new JButton(); jSplitPane1.setDividerLocation(500); - jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); + jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT); jEditorPane1.setContentType("text/html"); jPanel1.setLayout(new java.awt.BorderLayout()); jTextArea1.setColumns(20); diff --git a/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java b/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java index e194a2b..db283bc 100644 --- a/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java +++ b/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java @@ -5,14 +5,14 @@ */ package pitiupi.chat.net; -import pitiupi.net.Message; -import pitiupi.net.Message; + +import pitiupi.models.Messages.Message; /** * * @author flavio */ -public class ChatMessage extends Message{ +public class ChatMessage extends Message { private String text; private String name; diff --git a/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java b/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java index 7658b31..cb9b16f 100644 --- a/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java +++ b/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java @@ -4,46 +4,43 @@ */ package pitiupi.chat.plugin; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import pitiupi.GUI.MainWindow; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + import pitiupi.chat.GUI.ChatMenu; import pitiupi.chat.GUI.ChatWindow; import pitiupi.chat.net.ChatMessage; import pitiupi.control.ConnectionManager; import pitiupi.control.GuiManager; -import pitiupi.net.Message; -import pitiupi.plugin.Plugin; +import pitiupi.models.Menus.MenuCategory; +import pitiupi.models.Messages.Message; +import pitiupi.models.Plugin; /** * * @author flavio */ -public class ChatPlugin implements Plugin { +public class ChatPlugin extends Plugin { private ChatWindow chatWindow; - public ChatPlugin() { - } - @Override public void createPlugin(ConnectionManager connectionManager, GuiManager guiManager) { this.chatWindow = new ChatWindow(connectionManager); - guiManager.addMenu(new ChatMenu(chatWindow)); + guiManager.createMenu(MenuCategory.Social, new ChatMenu(chatWindow)); } @Override - public void receiveMessage(byte[] message) { - ByteArrayInputStream bis = new ByteArrayInputStream(message); - ObjectInputStream ois; - try { - ois = new ObjectInputStream(bis); - if (ois.readObject() instanceof ChatMessage msg) { - this.chatWindow.receiveChatMessage(msg); - } - } catch (IOException | ClassNotFoundException ex) { - System.out.println(ex.toString()); + public List> getMessages() { + return List.of(ChatMessage.class); + } + + + @Override + public void receiveMessage(Message message) { + if (message instanceof ChatMessage msg) { + this.chatWindow.receiveChatMessage(msg); } } @@ -67,8 +64,5 @@ public class ChatPlugin implements Plugin { return "Pitiupi.Chat.Example"; } - @Override - public Message getMessage() { - return new ChatMessage(); - } + } diff --git a/pitiupi.mpChat/src/GUI/ChatMenu.java b/pitiupi.mpChat/src/GUI/ChatMenu.java index cf24b5b..1881c6e 100644 --- a/pitiupi.mpChat/src/GUI/ChatMenu.java +++ b/pitiupi.mpChat/src/GUI/ChatMenu.java @@ -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"; } } diff --git a/pitiupi.mpChat/src/GUI/PrivateChatMenu.java b/pitiupi.mpChat/src/GUI/PrivateChatMenu.java new file mode 100644 index 0000000..e57bc2f --- /dev/null +++ b/pitiupi.mpChat/src/GUI/PrivateChatMenu.java @@ -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"; + } +} diff --git a/pitiupi.mpChat/src/GUI/PublicChatMenu.java b/pitiupi.mpChat/src/GUI/PublicChatMenu.java new file mode 100644 index 0000000..aa1b18a --- /dev/null +++ b/pitiupi.mpChat/src/GUI/PublicChatMenu.java @@ -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 ""; + } +} diff --git a/pitiupi.mpChat/src/META-INF/services/pitiupi.plugin.Plugin b/pitiupi.mpChat/src/META-INF/services/pitiupi.models.Plugin similarity index 100% rename from pitiupi.mpChat/src/META-INF/services/pitiupi.plugin.Plugin rename to pitiupi.mpChat/src/META-INF/services/pitiupi.models.Plugin diff --git a/pitiupi.mpChat/src/control/ChatController.java b/pitiupi.mpChat/src/control/ChatController.java index e437a4b..07f7bb7 100644 --- a/pitiupi.mpChat/src/control/ChatController.java +++ b/pitiupi.mpChat/src/control/ChatController.java @@ -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 chatMenus; private final HashMap 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 list) { + + } } diff --git a/pitiupi.mpChat/src/net/MpChatMessage.java b/pitiupi.mpChat/src/net/MpChatMessage.java index 731367b..f84346f 100644 --- a/pitiupi.mpChat/src/net/MpChatMessage.java +++ b/pitiupi.mpChat/src/net/MpChatMessage.java @@ -1,6 +1,6 @@ package net; -import pitiupi.net.Message; +import pitiupi.models.Messages.Message; public class MpChatMessage extends Message { private String nome; diff --git a/pitiupi.mpChat/src/plugin/MultiProtocolChat.java b/pitiupi.mpChat/src/plugin/MultiProtocolChat.java index 089c582..a9999bd 100644 --- a/pitiupi.mpChat/src/plugin/MultiProtocolChat.java +++ b/pitiupi.mpChat/src/plugin/MultiProtocolChat.java @@ -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) { diff --git a/pitiupi.testSocket/pitiupi.testSocket.iml b/pitiupi.testSocket/pitiupi.testSocket.iml deleted file mode 100644 index c90834f..0000000 --- a/pitiupi.testSocket/pitiupi.testSocket.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/pitiupi/docs/Documentation.md b/pitiupi/docs/Documentation.md index 6f6e5e6..6e15422 100644 --- a/pitiupi/docs/Documentation.md +++ b/pitiupi/docs/Documentation.md @@ -468,10 +468,10 @@ MeusPlugins | +---services | - +---pitiupi.model.Plugin + +---pitiupi.models.Plugin ``` -O arquivo `pitiupi.model.Plugin` deve conter o nome completo das classes que +O arquivo `pitiupi.models.Plugin` deve conter o nome completo das classes que implementam a interface Plugin: ``` diff --git a/pitiupi/src/pitiupi/GUI/MainWindow.java b/pitiupi/src/pitiupi/GUI/MainWindow.java index 37f4b5d..87c4495 100644 --- a/pitiupi/src/pitiupi/GUI/MainWindow.java +++ b/pitiupi/src/pitiupi/GUI/MainWindow.java @@ -7,11 +7,11 @@ package pitiupi.GUI; import pitiupi.control.ConnectionManager; import pitiupi.control.GuiManager; -import pitiupi.control.PluginManager; +import pitiupi.control.plugins.PluginManager; -import javax.swing.JMenu; +import javax.swing.*; -import pitiupi.control.HeartbeatManager; +import java.awt.*; /** * Janela principal da aplicação. @@ -27,16 +27,16 @@ import pitiupi.control.HeartbeatManager; * @author tony * @author Gustavo */ -public class MainWindow extends javax.swing.JFrame { +public class MainWindow extends JFrame { private MenuBar menuBar; - private javax.swing.JLabel status; + private JLabel status; + OnlineUsersPanel onlineUsersPanel; private final ConnectionManager connectionManager; private final PluginManager pluginManager; private final GuiManager guiManager; - /** * Cria a janela principal da aplicação. * @@ -47,13 +47,13 @@ public class MainWindow extends javax.swing.JFrame { initMenu(); pluginManager = new PluginManager(); - connectionManager = new ConnectionManager(this, userName, pluginManager, port); - guiManager = new GuiManager(this); initUserPanel(); initStatusPanel(); + guiManager = new GuiManager(this, menuBar, onlineUsersPanel); + loadPlugins(); this.pack(); @@ -66,7 +66,7 @@ public class MainWindow extends javax.swing.JFrame { this.setJMenuBar(menuBar); this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); - this.setTitle("Share My Sheet"); + this.setTitle("Pitiupi"); javax.swing.JScrollPane jScrollPane1 = new javax.swing.JScrollPane(); javax.swing.JTabbedPane tabbedPane = new javax.swing.JTabbedPane(); @@ -77,20 +77,20 @@ public class MainWindow extends javax.swing.JFrame { } private void initUserPanel() { - OnlineUsersPanel onlineUsersPanel = new OnlineUsersPanel(); + onlineUsersPanel = new OnlineUsersPanel(); this.connectionManager.addPeerListener(onlineUsersPanel); this.getContentPane().add(onlineUsersPanel, java.awt.BorderLayout.LINE_END); } private void initStatusPanel() { - javax.swing.JPanel statusPanel = new javax.swing.JPanel(); - status = new javax.swing.JLabel(); + JPanel statusPanel = new JPanel(); + status = new JLabel(); - statusPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT)); + statusPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); updateStatus(); statusPanel.add(status); - this.getContentPane().add(statusPanel, java.awt.BorderLayout.PAGE_END); + this.getContentPane().add(statusPanel, BorderLayout.PAGE_END); } public void exit() { @@ -107,9 +107,6 @@ public class MainWindow extends javax.swing.JFrame { pluginManager.loadPlugins(connectionManager, guiManager); } - public void addMenu(JMenu menu) { - this.menuBar.addPlugin(menu); - } public void setUserName(String userName) { connectionManager.setUserName(userName); updateStatus(); diff --git a/pitiupi/src/pitiupi/GUI/MenuBar.java b/pitiupi/src/pitiupi/GUI/MenuBar.java index 4e517a8..c6c67c8 100644 --- a/pitiupi/src/pitiupi/GUI/MenuBar.java +++ b/pitiupi/src/pitiupi/GUI/MenuBar.java @@ -5,8 +5,14 @@ */ package pitiupi.GUI; -import javax.swing.JMenu; -import javax.swing.JMenuBar; +import pitiupi.models.Menus.MenuCategory; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.util.HashMap; +import java.util.Map; /** * Barra de menus principal da aplicação. @@ -21,12 +27,14 @@ import javax.swing.JMenuBar; */ public class MenuBar extends JMenuBar { - private javax.swing.JMenuItem setupMenu; - private javax.swing.JMenuItem aboutMenu; - private javax.swing.JMenu fileMenu; - private javax.swing.JMenu helpMenu; - private javax.swing.JMenu pluginMenu; - private javax.swing.JMenuItem exitMenu; + private JMenuItem preferencesMenu; + private JMenuItem aboutMenu; + private JMenu fileMenu; + private JMenu helpMenu; + private JMenu pluginMenu; + private Map categories; + + private JMenuItem exitMenu; private final MainWindow mainWindow; /** @@ -40,42 +48,54 @@ public class MenuBar extends JMenuBar { } private void initComponents() { - fileMenu = new javax.swing.JMenu(); - exitMenu = new javax.swing.JMenuItem(); - helpMenu = new javax.swing.JMenu(); - pluginMenu = new javax.swing.JMenu(); - setupMenu = new javax.swing.JMenuItem(); - aboutMenu = new javax.swing.JMenuItem(); + initFileMenu(); + initPluginMenu(); + initHelpMenu(); + } - fileMenu.setText("File"); - exitMenu.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, java.awt.event.InputEvent.ALT_MASK)); - exitMenu.setText("Exit"); + private void initFileMenu() { + fileMenu = new JMenu("File"); + exitMenu = new JMenuItem("Exit"); + + exitMenu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_DOWN_MASK)); exitMenu.addActionListener(this::exitMenuActionPerformed); fileMenu.add(exitMenu); this.add(fileMenu); + } + + private void initPluginMenu() { + pluginMenu = new JMenu("Plugin"); + categories = new HashMap<>(); + + for (MenuCategory category : MenuCategory.values()) { + JMenu newCategoryMenu = new JMenu(category.toString()); + + pluginMenu.add(newCategoryMenu); + categories.put(category, newCategoryMenu); + } - pluginMenu.setText("Plugin"); this.add(pluginMenu); + } - helpMenu.setText("Help"); + private void initHelpMenu() { + helpMenu = new JMenu("Help"); + preferencesMenu = new JMenuItem("Preferences"); + aboutMenu = new JMenuItem("About"); - setupMenu.setText("Preferences"); - setupMenu.addActionListener(this::setupMenuActionPerformed); - helpMenu.add(setupMenu); + preferencesMenu.addActionListener(this::setupMenuActionPerformed); + helpMenu.add(preferencesMenu); - aboutMenu.setText("About"); aboutMenu.addActionListener(this::aboutMenuActionPerformed); helpMenu.add(aboutMenu); this.add(helpMenu); } - private void exitMenuActionPerformed(java.awt.event.ActionEvent evt) { + private void exitMenuActionPerformed(ActionEvent evt) { mainWindow.exit(); } - - private void setupMenuActionPerformed(java.awt.event.ActionEvent evt) { + private void setupMenuActionPerformed(ActionEvent evt) { Login login = new Login(); login.setVisible(true); @@ -85,18 +105,13 @@ public class MenuBar extends JMenuBar { login.dispose(); } - private void aboutMenuActionPerformed(java.awt.event.ActionEvent evt) { + private void aboutMenuActionPerformed(ActionEvent evt) { About about = new About(); about.setVisible(true); } - /** - * Adiciona um menu fornecido por um plugin à seção de plugins da barra - * de menus. - * - * @param menu menu criado pelo plugin. - */ - public void addPlugin(JMenu menu){ - this.pluginMenu.add(menu); + public void addPluginMenu(MenuCategory category, JMenuItem menu){ + System.out.println("addPluginMenu"); + categories.get(category).add(menu); } } diff --git a/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java b/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java index f6519e0..81084ad 100644 --- a/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java +++ b/pitiupi/src/pitiupi/GUI/OnlineUsersPanel.java @@ -2,14 +2,16 @@ package pitiupi.GUI; import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.HashMap; import java.util.List; -import javax.swing.BorderFactory; -import javax.swing.DefaultListModel; -import javax.swing.JList; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.SwingUtilities; -import pitiupi.model.User; +import java.util.Map; +import java.util.function.Consumer; +import javax.swing.*; + +import pitiupi.models.Menus.MenuCategory; +import pitiupi.models.User; import pitiupi.control.PeerListener; /** @@ -20,10 +22,16 @@ import pitiupi.control.PeerListener; */ public class OnlineUsersPanel extends JPanel implements PeerListener { - private final DefaultListModel listModel; - private final JList userList; + private final DefaultListModel listModel; + private final JList userList; + JPopupMenu menu; + private Map categories; public OnlineUsersPanel() { + menu = new JPopupMenu(); + categories = new HashMap<>(); + initMenu(); + setLayout(new BorderLayout()); setBorder(BorderFactory.createTitledBorder("Online")); setPreferredSize(new Dimension(160, 0)); @@ -31,6 +39,48 @@ public class OnlineUsersPanel extends JPanel implements PeerListener { listModel = new DefaultListModel<>(); userList = new JList<>(listModel); add(new JScrollPane(userList), BorderLayout.CENTER); + + setupUserListActions(); + } + + private void initMenu() { + for (MenuCategory category : MenuCategory.values()) { + JMenu newCategory = new JMenu(category.toString()); + + menu.add(newCategory); + categories.put(category, newCategory); + } + } + + private void setupUserListActions() { + userList.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + int index = userList.locationToIndex(e.getPoint()); + + if (index == -1) { + return; + } + + userList.setSelectedIndex(index); + menu.show(userList, e.getX(), e.getY()); + } + }); + } + + public void initUnicastMenu(JMenuItem menuItem, Consumer action) { + menuItem.addActionListener(e -> { + User user = userList.getSelectedValue(); + + if (user != null) { + action.accept(user); + } + }); + } + + public void addUnicastMenu(MenuCategory category, JMenuItem menuItem) { + categories.get(category).add(menuItem); } /** @@ -43,7 +93,7 @@ public class OnlineUsersPanel extends JPanel implements PeerListener { SwingUtilities.invokeLater(() -> { listModel.clear(); for (User peer : peers) { - listModel.addElement(peer.toString()); + listModel.addElement(peer); } }); } diff --git a/pitiupi/src/pitiupi/control/ConnectionManager.java b/pitiupi/src/pitiupi/control/ConnectionManager.java index 4d37561..56a24d8 100644 --- a/pitiupi/src/pitiupi/control/ConnectionManager.java +++ b/pitiupi/src/pitiupi/control/ConnectionManager.java @@ -1,8 +1,9 @@ package pitiupi.control; import pitiupi.GUI.MainWindow; -import pitiupi.model.Messages.HeartbeatMessage; -import pitiupi.model.Messages.Message; +import pitiupi.control.plugins.PluginManager; +import pitiupi.models.Messages.HeartbeatMessage; +import pitiupi.models.Messages.Message; import pitiupi.net.tcp.SocketTCP; import pitiupi.net.tcp.TcpConnection; import pitiupi.net.udp.SocketUDP; @@ -63,7 +64,7 @@ public class ConnectionManager { } public void broadcastLocal(byte[] message) { - pluginManager.handlePublicMessage(message); + pluginManager.handleMessage(message); } public void addPeerListener(PeerListener peerListener) { diff --git a/pitiupi/src/pitiupi/control/GuiManager.java b/pitiupi/src/pitiupi/control/GuiManager.java index 210451a..b2a6f63 100644 --- a/pitiupi/src/pitiupi/control/GuiManager.java +++ b/pitiupi/src/pitiupi/control/GuiManager.java @@ -1,17 +1,95 @@ package pitiupi.control; import pitiupi.GUI.MainWindow; +import pitiupi.GUI.MenuBar; +import pitiupi.GUI.OnlineUsersPanel; +import pitiupi.models.Menus.*; +import pitiupi.models.Menus.MulticastMenus.MulticastActionMenu; +import pitiupi.models.Menus.MulticastMenus.MulticastMenu; +import pitiupi.models.Menus.MulticastMenus.MulticastSubMenu; +import pitiupi.models.Menus.UnicastMenus.UnicastActionMenu; +import pitiupi.models.Menus.UnicastMenus.UnicastMenu; +import pitiupi.models.Menus.UnicastMenus.UnicastSubMenu; import javax.swing.*; +import java.util.logging.Level; +import java.util.logging.Logger; public class GuiManager { private MainWindow mainWindow; + private MenuBar menuBar; + private OnlineUsersPanel onlineUsersPanel; - public GuiManager(MainWindow mainWindow) { + private Logger logger; + + public GuiManager(MainWindow mainWindow, MenuBar menuBar, OnlineUsersPanel onlineUsersPanel) { this.mainWindow = mainWindow; + this.menuBar = menuBar; + this.onlineUsersPanel = onlineUsersPanel; + this.logger = Logger.getLogger(GuiManager.class.getName()); } - public void addMenu(JMenu menu) { - mainWindow.addMenu(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 { + JMenuItem newMenu = buildMenu(menu); + if (menu instanceof MulticastMenu) { + menuBar.addPluginMenu(category, newMenu); + } + if (menu instanceof UnicastMenu) { + onlineUsersPanel.addUnicastMenu(category, newMenu); + } + } + catch (IllegalArgumentException e) { + logger.log(Level.WARNING, e.getMessage()); + } + } + + private JMenuItem buildMenu(Menu menu) { + if (menu instanceof MulticastSubMenu multicastSubMenu) { + JMenu newMenu = new JMenu(menu.getText()); + + for (Menu child : multicastSubMenu.getMenus()) { + newMenu.add(buildMenu(child)); + } + + return newMenu; + } + + if (menu instanceof UnicastSubMenu unicastSubMenu) { + JMenu newMenu = new JMenu(menu.getText()); + + for (Menu child : unicastSubMenu.getMenus()) { + newMenu.add(buildMenu(child)); + } + + return newMenu; + } + + if (menu instanceof MulticastActionMenu multicastActionMenu) { + JMenuItem newMenu = new JMenuItem(menu.getText()); + newMenu.addActionListener(e -> multicastActionMenu.onClick()); + return newMenu; + } + + if (menu instanceof UnicastActionMenu unicastActionMenu) { + JMenuItem newMenu = new JMenuItem(menu.getText()); + + onlineUsersPanel.initUnicastMenu(newMenu, unicastActionMenu::onClick); + return newMenu; + } + + throw new IllegalArgumentException("Invalid menu type"); } } diff --git a/pitiupi/src/pitiupi/control/HeartbeatManager.java b/pitiupi/src/pitiupi/control/HeartbeatManager.java index 4041ff8..28d58a6 100644 --- a/pitiupi/src/pitiupi/control/HeartbeatManager.java +++ b/pitiupi/src/pitiupi/control/HeartbeatManager.java @@ -10,8 +10,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import pitiupi.model.User; -import pitiupi.model.Messages.HeartbeatMessage; +import pitiupi.models.User; +import pitiupi.models.Messages.HeartbeatMessage; import java.util.UUID; /** * Gerencia o mecanismo de heartbeat da aplicação. diff --git a/pitiupi/src/pitiupi/control/PeerListener.java b/pitiupi/src/pitiupi/control/PeerListener.java index 3b64e93..bf55973 100644 --- a/pitiupi/src/pitiupi/control/PeerListener.java +++ b/pitiupi/src/pitiupi/control/PeerListener.java @@ -1,6 +1,6 @@ package pitiupi.control; -import pitiupi.model.User; +import pitiupi.models.User; import java.util.List; diff --git a/pitiupi/src/pitiupi/control/PluginManager.java b/pitiupi/src/pitiupi/control/PluginManager.java deleted file mode 100644 index 51a60d7..0000000 --- a/pitiupi/src/pitiupi/control/PluginManager.java +++ /dev/null @@ -1,100 +0,0 @@ -package pitiupi.control; - -import pitiupi.GUI.MainWindow; -import pitiupi.Main; -import pitiupi.net.tcp.TcpConnection; -import pitiupi.model.Plugin; - -import java.io.File; -import java.net.URL; -import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.ServiceLoader; - -public class PluginManager { - private final List plugins; - private final HashSet loadedJars; - - public PluginManager() { - this.plugins = new ArrayList<>(); - this.loadedJars = new HashSet<>(); - } - - public void handlePublicMessage(byte[] msg) { - for (Plugin plugin : plugins) { - plugin.receiveMessage(msg); - } - } - - private Plugin getPlugin(String pluginId) { - for (Plugin plugin : plugins) { - if (plugin.getIdentifier().equals(pluginId)) return plugin; - } - return null; - } - - public void handlePrivateMessage(TcpConnection connection, byte[] msg) { - Plugin plugin = getPlugin(connection.getReceiver()); - if (plugin == null) return; - - plugin.receiveBytes(connection, msg); - } - - public boolean handleConnection(TcpConnection connection, String receiverId) { - Plugin plugin = getPlugin(receiverId); - if (plugin == null) return false; - - plugin.receivePrivateConnection(connection); - - return false; - } - - public void handleDisconnection(TcpConnection connection, String receiverId) { - Plugin plugin = getPlugin(receiverId); - if (plugin == null) return; - - plugin.onSocketClosed(connection); - } - - public void loadPlugins(ConnectionManager connectionManager, GuiManager guiManager) { - File pluginDir = new File("plugins"); - File[] jarFiles = pluginDir.listFiles((dir, name) -> name.endsWith(".jar")); - - if (jarFiles == null || jarFiles.length == 0) { - System.out.println("No plugins found in the " + pluginDir.getAbsolutePath() + " directory."); - return; - } - - for (File file : jarFiles) { - - if (loadedJars.contains(file.getName())) { - continue; - } - - System.out.println("Discovered plugin package: " + file.getName()); - - try { - URLClassLoader classLoader = new URLClassLoader( - new URL[]{file.toURI().toURL()}, - Main.class.getClassLoader() - ); - - ServiceLoader serviceLoader = ServiceLoader.load(Plugin.class, classLoader); - - for (Plugin plugin : serviceLoader) { - System.out.println("Loading: " + plugin.getName()); - - plugin.createPlugin(connectionManager, guiManager); - plugins.add(plugin); - loadedJars.add(file.getName()); - } - - } catch (Exception e) { - System.out.println("Failed to load plugin " + file.getName()); - e.printStackTrace(); - } - } - } -} diff --git a/pitiupi/src/pitiupi/control/plugins/LoadedPlugin.java b/pitiupi/src/pitiupi/control/plugins/LoadedPlugin.java new file mode 100644 index 0000000..a9e56b3 --- /dev/null +++ b/pitiupi/src/pitiupi/control/plugins/LoadedPlugin.java @@ -0,0 +1,22 @@ +package pitiupi.control.plugins; + +import pitiupi.models.Plugin; + +class LoadedPlugin { + + private final Plugin plugin; + private final ClassLoader classLoader; + + public LoadedPlugin(Plugin plugin, ClassLoader classLoader) { + this.plugin = plugin; + this.classLoader = classLoader; + } + + public Plugin getPlugin() { + return plugin; + } + + public ClassLoader getClassLoader() { + return classLoader; + } +} diff --git a/pitiupi/src/pitiupi/control/plugins/PluginManager.java b/pitiupi/src/pitiupi/control/plugins/PluginManager.java new file mode 100644 index 0000000..ada270d --- /dev/null +++ b/pitiupi/src/pitiupi/control/plugins/PluginManager.java @@ -0,0 +1,154 @@ +package pitiupi.control.plugins; + +import pitiupi.Main; +import pitiupi.control.ConnectionManager; +import pitiupi.control.GuiManager; +import pitiupi.models.Messages.Message; +import pitiupi.net.tcp.TcpConnection; +import pitiupi.models.Plugin; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.ServiceLoader; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PluginManager { + private final List loadedPlugins; + private final HashSet loadedJars; + + private final Logger logger; + + public PluginManager() { + this.loadedPlugins = new ArrayList<>(); + this.loadedJars = new HashSet<>(); + + logger = Logger.getLogger(getClass().getName()); + } + + public void handleMessage(byte[] msg) { + Message message = null; + + for (LoadedPlugin loadedPlugin : loadedPlugins) { + message = deserialize(msg, loadedPlugin.getClassLoader()); + if (message != null) break; + } + if (message == null) return; + + for (LoadedPlugin loadedPlugin : loadedPlugins) { + Plugin plugin = loadedPlugin.getPlugin(); + + if (plugin.receiveAllTypes() && message.isPublic()) { + plugin.receiveMessage(message); + continue; + } + + for (Class messageType : plugin.getMessages()) { + if (messageType.isInstance(message)) { + plugin.receiveMessage(message); + break; + } + } + } + } + + private Plugin getPlugin(String pluginId) { + for (LoadedPlugin loadedPlugin : loadedPlugins) { + if (loadedPlugin.getPlugin().getIdentifier().equals(pluginId)) + return loadedPlugin.getPlugin(); + } + return null; + } + + public void handleMessageFromConnection(TcpConnection connection, byte[] msg) { + Plugin plugin = getPlugin(connection.getReceiver()); + if (plugin == null) return; + + plugin.receiveBytes(connection, msg); + } + + public boolean handleConnection(TcpConnection connection, String receiverId) { + Plugin plugin = getPlugin(receiverId); + if (plugin == null) return false; + + plugin.receivePrivateConnection(connection); + + return false; + } + + public void handleDisconnection(TcpConnection connection, String receiverId) { + Plugin plugin = getPlugin(receiverId); + if (plugin == null) return; + + plugin.onSocketClosed(connection); + } + + public void loadPlugins(ConnectionManager connectionManager, GuiManager guiManager) { + File pluginDir = new File("plugins"); + File[] jarFiles = pluginDir.listFiles((dir, name) -> name.endsWith(".jar")); + + if (jarFiles == null || jarFiles.length == 0) { + System.out.println("No plugins found in the " + pluginDir.getAbsolutePath() + " directory."); + return; + } + + for (File file : jarFiles) { + + if (loadedJars.contains(file.getName())) { + continue; + } + + System.out.println("Discovered plugin package: " + file.getName()); + + try { + URLClassLoader classLoader = new URLClassLoader( + new URL[]{file.toURI().toURL()}, + Main.class.getClassLoader() + ); + + ServiceLoader serviceLoader = ServiceLoader.load(Plugin.class, classLoader); + + for (Plugin plugin : serviceLoader) { + System.out.println("Loading: " + plugin.getName()); + LoadedPlugin loadedPlugin = new LoadedPlugin(plugin, classLoader); + + plugin.createPlugin(connectionManager, guiManager); + loadedPlugins.add(loadedPlugin); + loadedJars.add(file.getName()); + } + + } catch (Exception e) { + logger.log(Level.WARNING, "Failed to load plugin " + file.getName(), e); + } + } + } + + private Message deserialize(byte[] data, ClassLoader classLoader) { + try { + ByteArrayInputStream input = new ByteArrayInputStream(data); + + PluginObjectInputStream objectInput = new PluginObjectInputStream(input, classLoader); + + Object object = objectInput.readObject(); + + if (!(object instanceof Message)) { + return null; + } + + return (Message) object; + } + catch (ClassNotFoundException e) { + return null; + } + catch (IOException e) { + logger.log(Level.SEVERE, "Failed to load plugin package", e); + return null; + } + } +} diff --git a/pitiupi/src/pitiupi/control/plugins/PluginObjectInputStream.java b/pitiupi/src/pitiupi/control/plugins/PluginObjectInputStream.java new file mode 100644 index 0000000..49c7756 --- /dev/null +++ b/pitiupi/src/pitiupi/control/plugins/PluginObjectInputStream.java @@ -0,0 +1,20 @@ +package pitiupi.control.plugins; + +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; + +public class PluginObjectInputStream extends ObjectInputStream { + private final ClassLoader classLoader; + + public PluginObjectInputStream(InputStream input, ClassLoader classLoader) throws IOException { + super(input); + this.classLoader = classLoader; + } + + @Override + protected Class resolveClass(ObjectStreamClass description) throws ClassNotFoundException { + return Class.forName(description.getName(), false, classLoader); + } +} \ No newline at end of file diff --git a/pitiupi/src/pitiupi/model/Menus/Menu.java b/pitiupi/src/pitiupi/model/Menus/Menu.java deleted file mode 100644 index 5cc8805..0000000 --- a/pitiupi/src/pitiupi/model/Menus/Menu.java +++ /dev/null @@ -1,6 +0,0 @@ -package pitiupi.model.Menus; - -public abstract class Menu { - public abstract String getText(); - public abstract MenuCategory getCategory(); -} diff --git a/pitiupi/src/pitiupi/model/Menus/MenuCategory.java b/pitiupi/src/pitiupi/model/Menus/MenuCategory.java deleted file mode 100644 index 1d4f57e..0000000 --- a/pitiupi/src/pitiupi/model/Menus/MenuCategory.java +++ /dev/null @@ -1,7 +0,0 @@ -package pitiupi.model.Menus; - -public enum MenuCategory { - JOGOS, - SOCIAL, - STREAMING -} diff --git a/pitiupi/src/pitiupi/model/Menus/MulticastMenu.java b/pitiupi/src/pitiupi/model/Menus/MulticastMenu.java deleted file mode 100644 index fa740cc..0000000 --- a/pitiupi/src/pitiupi/model/Menus/MulticastMenu.java +++ /dev/null @@ -1,5 +0,0 @@ -package pitiupi.model.Menus; - -public abstract class MulticastMenu extends Menu { - public abstract void onClick(); -} diff --git a/pitiupi/src/pitiupi/model/Menus/UnicastMenu.java b/pitiupi/src/pitiupi/model/Menus/UnicastMenu.java deleted file mode 100644 index 3ce02c1..0000000 --- a/pitiupi/src/pitiupi/model/Menus/UnicastMenu.java +++ /dev/null @@ -1,7 +0,0 @@ -package pitiupi.model.Menus; - -import pitiupi.model.User; - -public abstract class UnicastMenu extends Menu { - public abstract void onClick(User user); -} diff --git a/pitiupi/src/pitiupi/models/Menus/Menu.java b/pitiupi/src/pitiupi/models/Menus/Menu.java new file mode 100644 index 0000000..971b35f --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/Menu.java @@ -0,0 +1,5 @@ +package pitiupi.models.Menus; + +public abstract class Menu { + public abstract String getText(); +} diff --git a/pitiupi/src/pitiupi/models/Menus/MenuCategory.java b/pitiupi/src/pitiupi/models/Menus/MenuCategory.java new file mode 100644 index 0000000..d3880dd --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/MenuCategory.java @@ -0,0 +1,7 @@ +package pitiupi.models.Menus; + +public enum MenuCategory { + Jogos, + Social, + Streaming +} diff --git a/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastActionMenu.java b/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastActionMenu.java new file mode 100644 index 0000000..e496b81 --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastActionMenu.java @@ -0,0 +1,5 @@ +package pitiupi.models.Menus.MulticastMenus; + +public abstract class MulticastActionMenu extends MulticastMenu{ + public abstract void onClick(); +} diff --git a/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastMenu.java b/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastMenu.java new file mode 100644 index 0000000..be3bb5a --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastMenu.java @@ -0,0 +1,9 @@ +package pitiupi.models.Menus.MulticastMenus; + +import pitiupi.models.Menus.Menu; + +public abstract class MulticastMenu extends Menu { + MulticastMenu() { + super(); + } +} diff --git a/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastSubMenu.java b/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastSubMenu.java new file mode 100644 index 0000000..15b9f0e --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/MulticastMenus/MulticastSubMenu.java @@ -0,0 +1,7 @@ +package pitiupi.models.Menus.MulticastMenus; + +import java.util.List; + +public abstract class MulticastSubMenu extends MulticastMenu{ + public abstract List getMenus(); +} diff --git a/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastActionMenu.java b/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastActionMenu.java new file mode 100644 index 0000000..10b2f8f --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastActionMenu.java @@ -0,0 +1,7 @@ +package pitiupi.models.Menus.UnicastMenus; + +import pitiupi.models.User; + +public abstract class UnicastActionMenu extends UnicastMenu{ + public abstract void onClick(User user); +} diff --git a/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastMenu.java b/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastMenu.java new file mode 100644 index 0000000..d528e2d --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastMenu.java @@ -0,0 +1,8 @@ +package pitiupi.models.Menus.UnicastMenus; + +import pitiupi.models.Menus.Menu; +import pitiupi.models.User; + +public abstract class UnicastMenu extends Menu { + UnicastMenu() {} +} diff --git a/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastSubMenu.java b/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastSubMenu.java new file mode 100644 index 0000000..14485de --- /dev/null +++ b/pitiupi/src/pitiupi/models/Menus/UnicastMenus/UnicastSubMenu.java @@ -0,0 +1,7 @@ +package pitiupi.models.Menus.UnicastMenus; + +import java.util.List; + +public abstract class UnicastSubMenu extends UnicastMenu{ + public abstract List getMenus(); +} diff --git a/pitiupi/src/pitiupi/model/Messages/HeartbeatMessage.java b/pitiupi/src/pitiupi/models/Messages/HeartbeatMessage.java similarity index 91% rename from pitiupi/src/pitiupi/model/Messages/HeartbeatMessage.java rename to pitiupi/src/pitiupi/models/Messages/HeartbeatMessage.java index 4fb198c..dfd4cfb 100644 --- a/pitiupi/src/pitiupi/model/Messages/HeartbeatMessage.java +++ b/pitiupi/src/pitiupi/models/Messages/HeartbeatMessage.java @@ -1,6 +1,4 @@ -package pitiupi.model.Messages; - -import pitiupi.model.Messages.Message; +package pitiupi.models.Messages; /** * Mensagem utilizada para sinalizar a presença de um usuário na rede. diff --git a/pitiupi/src/pitiupi/model/Messages/InfoMessage.java b/pitiupi/src/pitiupi/models/Messages/InfoMessage.java similarity index 97% rename from pitiupi/src/pitiupi/model/Messages/InfoMessage.java rename to pitiupi/src/pitiupi/models/Messages/InfoMessage.java index 8ac292f..b95a758 100644 --- a/pitiupi/src/pitiupi/model/Messages/InfoMessage.java +++ b/pitiupi/src/pitiupi/models/Messages/InfoMessage.java @@ -1,4 +1,4 @@ -package pitiupi.model.Messages; +package pitiupi.models.Messages; import pitiupi.net.tcp.TcpConnection; diff --git a/pitiupi/src/pitiupi/model/Messages/InfoType.java b/pitiupi/src/pitiupi/models/Messages/InfoType.java similarity index 80% rename from pitiupi/src/pitiupi/model/Messages/InfoType.java rename to pitiupi/src/pitiupi/models/Messages/InfoType.java index 12cc8fa..ddcaa04 100644 --- a/pitiupi/src/pitiupi/model/Messages/InfoType.java +++ b/pitiupi/src/pitiupi/models/Messages/InfoType.java @@ -1,4 +1,4 @@ -package pitiupi.model.Messages; +package pitiupi.models.Messages; public enum InfoType { CONNECTION_REJECTED, diff --git a/pitiupi/src/pitiupi/model/Messages/Message.java b/pitiupi/src/pitiupi/models/Messages/Message.java similarity index 83% rename from pitiupi/src/pitiupi/model/Messages/Message.java rename to pitiupi/src/pitiupi/models/Messages/Message.java index 5d579ba..758d380 100644 --- a/pitiupi/src/pitiupi/model/Messages/Message.java +++ b/pitiupi/src/pitiupi/models/Messages/Message.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package pitiupi.model.Messages; +package pitiupi.models.Messages; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -24,6 +24,19 @@ import java.io.Serializable; * @author flavio */ public abstract class Message implements Serializable{ + private boolean isPublic; + + protected Message(){ + isPublic = true; + } + + protected Message(boolean isPublic){ + this.isPublic = isPublic; + } + + public boolean isPublic(){ + return isPublic; + } /** * Serializa a mensagem para um vetor de bytes. diff --git a/pitiupi/src/pitiupi/model/Plugin.java b/pitiupi/src/pitiupi/models/Plugin.java similarity index 87% rename from pitiupi/src/pitiupi/model/Plugin.java rename to pitiupi/src/pitiupi/models/Plugin.java index c84be36..ffd898c 100644 --- a/pitiupi/src/pitiupi/model/Plugin.java +++ b/pitiupi/src/pitiupi/models/Plugin.java @@ -2,13 +2,15 @@ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template */ -package pitiupi.model; +package pitiupi.models; import pitiupi.control.ConnectionManager; import pitiupi.control.GuiManager; -import pitiupi.model.Messages.Message; +import pitiupi.models.Messages.Message; import pitiupi.net.tcp.TcpConnection; +import java.util.List; + /** * Interface base para plugins da aplicação. * @@ -18,7 +20,6 @@ import pitiupi.net.tcp.TcpConnection; * @author flavio */ public abstract class Plugin { - public abstract String getName(); public abstract String getAuthor(); public abstract String getVersion(); @@ -39,7 +40,7 @@ public abstract class Plugin { * * @return mensagem criada pelo plugin. */ - public abstract Message getMessage(); + public abstract List> getMessages(); /** * Recebe uma mensagem enviada pela aplicação. @@ -49,8 +50,9 @@ public abstract class Plugin { * * @param message mensagem serializada recebida. */ - public abstract void receiveMessage(byte[] message); + public abstract void receiveMessage(Message message); + public boolean receiveAllTypes() {return false;} public boolean receivePrivateConnection(TcpConnection connection) { return false; } diff --git a/pitiupi/src/pitiupi/model/User.java b/pitiupi/src/pitiupi/models/User.java similarity index 97% rename from pitiupi/src/pitiupi/model/User.java rename to pitiupi/src/pitiupi/models/User.java index 22d4024..e7d7a6f 100644 --- a/pitiupi/src/pitiupi/model/User.java +++ b/pitiupi/src/pitiupi/models/User.java @@ -1,4 +1,4 @@ -package pitiupi.model; +package pitiupi.models; import java.net.InetAddress; /** diff --git a/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java b/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java index 2d07c0b..07f1482 100644 --- a/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java +++ b/pitiupi/src/pitiupi/net/tcp/ConnectionFactory.java @@ -1,8 +1,8 @@ package pitiupi.net.tcp; -import pitiupi.model.Messages.Message; -import pitiupi.model.Messages.InfoMessage; -import pitiupi.model.Messages.InfoType; +import pitiupi.models.Messages.Message; +import pitiupi.models.Messages.InfoMessage; +import pitiupi.models.Messages.InfoType; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java b/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java index 4783cd0..625deb4 100644 --- a/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java +++ b/pitiupi/src/pitiupi/net/tcp/HandshakeMessage.java @@ -1,6 +1,6 @@ package pitiupi.net.tcp; -import pitiupi.model.Messages.Message; +import pitiupi.models.Messages.Message; class HandshakeMessage extends Message { private final boolean isPrivate; diff --git a/pitiupi/src/pitiupi/net/tcp/SocketTCP.java b/pitiupi/src/pitiupi/net/tcp/SocketTCP.java index 11d9ca4..688f638 100644 --- a/pitiupi/src/pitiupi/net/tcp/SocketTCP.java +++ b/pitiupi/src/pitiupi/net/tcp/SocketTCP.java @@ -1,10 +1,10 @@ package pitiupi.net.tcp; import pitiupi.control.ConnectionManager; -import pitiupi.control.PluginManager; -import pitiupi.model.Messages.Message; -import pitiupi.model.Messages.InfoMessage; -import pitiupi.model.Messages.InfoType; +import pitiupi.control.plugins.PluginManager; +import pitiupi.models.Messages.Message; +import pitiupi.models.Messages.InfoMessage; +import pitiupi.models.Messages.InfoType; import java.io.*; import java.net.*; @@ -304,7 +304,7 @@ public class SocketTCP extends Thread { InfoMessage sysMessage = InfoMessage.parseSystemInfo(bytes); if (sysMessage == null) { - pluginManager.handlePublicMessage(bytes); + pluginManager.handleMessage(bytes); continue; } @@ -349,7 +349,7 @@ public class SocketTCP extends Thread { InfoMessage sysMessage = InfoMessage.parseSystemInfo(message); if (sysMessage == null) { - pluginManager.handlePrivateMessage(connection, message); + pluginManager.handleMessageFromConnection(connection, message); continue; } diff --git a/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java b/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java index 527b574..81b29ad 100644 --- a/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java +++ b/pitiupi/src/pitiupi/net/tcp/TcpConnectionManager.java @@ -1,9 +1,9 @@ package pitiupi.net.tcp; -import pitiupi.model.Messages.InfoType; -import pitiupi.model.User; +import pitiupi.models.Messages.InfoType; +import pitiupi.models.User; import pitiupi.control.PeerListener; -import pitiupi.model.Messages.InfoMessage; +import pitiupi.models.Messages.InfoMessage; import java.io.IOException; import java.net.InetAddress; diff --git a/pitiupi/src/pitiupi/net/udp/SocketUDP.java b/pitiupi/src/pitiupi/net/udp/SocketUDP.java index 6bc9cc1..1f39746 100644 --- a/pitiupi/src/pitiupi/net/udp/SocketUDP.java +++ b/pitiupi/src/pitiupi/net/udp/SocketUDP.java @@ -14,9 +14,9 @@ import java.util.logging.Level; import java.util.logging.Logger; import pitiupi.control.ConnectionManager; -import pitiupi.control.PluginManager; -import pitiupi.model.Messages.HeartbeatMessage; -import pitiupi.model.Messages.Message; +import pitiupi.control.plugins.PluginManager; +import pitiupi.models.Messages.HeartbeatMessage; +import pitiupi.models.Messages.Message; /** * Gerencia a comunicação UDP multicast e unicast da aplicação. @@ -157,7 +157,7 @@ public class SocketUDP extends Thread { continue; } - pluginManager.handlePublicMessage(msgPacket.getData()); + pluginManager.handleMessage(msgPacket.getData()); } }