From 24b0db40ed53331918b77cc45617d6d17b9deb0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=A1vio=20Schiavoni?= Date: Thu, 16 Jul 2026 15:28:00 -0300 Subject: [PATCH] New version of everything --- pitiupi.chat/build.xml | 73 + pitiupi.chat/build/built-jar.properties | 6 + .../META-INF/services/pitiupi.plugin.Plugin | 1 + .../classes/pitiupi/chat/GUI/ChatMenu.class | Bin 0 -> 1552 bytes .../pitiupi/chat/GUI/ChatWindow$1.class | Bin 0 -> 944 bytes .../classes/pitiupi/chat/GUI/ChatWindow.class | Bin 0 -> 5713 bytes .../pitiupi/chat/net/ChatMessage.class | Bin 0 -> 876 bytes .../pitiupi/chat/plugin/ChatPlugin.class | Bin 0 -> 2195 bytes pitiupi.chat/dist/pitiupi.chat.jar | Bin 0 -> 13171 bytes pitiupi.chat/nbproject/build-impl.xml | 1789 +++++++++++++++++ pitiupi.chat/nbproject/genfiles.properties | 8 + .../nbproject/private/config.properties | 0 .../nbproject/private/private.properties | 8 + pitiupi.chat/nbproject/project.properties | 98 + pitiupi.chat/nbproject/project.xml | 25 + .../META-INF/services/pitiupi.plugin.Plugin | 1 + .../src/pitiupi/chat/GUI/ChatMenu.java | 31 + .../src/pitiupi/chat/GUI/ChatWindow.java | 121 ++ .../src/pitiupi/chat/net/ChatMessage.java | 57 + .../src/pitiupi/chat/plugin/ChatPlugin.java | 71 + pitiupi.screenCast/build.xml | 73 + pitiupi.screenCast/build/built-jar.properties | 6 + .../META-INF/services/pitiupi.plugin.Plugin | 1 + .../screenCast/GUI/ScreenCastMenu.class | Bin 0 -> 1644 bytes .../screenCast/GUI/ScreenCastWindow.class | Bin 0 -> 6008 bytes .../screenCast/control/AlarmClock.class | Bin 0 -> 629 bytes .../control/ImageTransformation.class | Bin 0 -> 2970 bytes .../screenCast/control/ScreenShot.class | Bin 0 -> 954 bytes .../screenCast/net/ScreenCastMessage.class | Bin 0 -> 925 bytes .../screenCast/plugin/ScreenCastPlugin.class | Bin 0 -> 2325 bytes pitiupi.screenCast/dist/README.TXT | 32 + pitiupi.screenCast/dist/lib/pitiupi.jar | Bin 0 -> 22983 bytes .../dist/pitiupi.screenCast.jar | Bin 0 -> 18079 bytes pitiupi.screenCast/manifest.mf | 3 + pitiupi.screenCast/nbproject/build-impl.xml | 1789 +++++++++++++++++ .../nbproject/genfiles.properties | 8 + .../nbproject/private/private.properties | 2 + .../nbproject/project.properties | 98 + pitiupi.screenCast/nbproject/project.xml | 25 + .../META-INF/services/pitiupi.plugin.Plugin | 1 + .../screenCast/GUI/ScreenCastMenu.java | 31 + .../screenCast/GUI/ScreenCastWindow.java | 135 ++ .../screenCast/control/AlarmClock.java | 27 + .../control/ImageTransformation.java | 67 + .../screenCast/control/ScreenShot.java | 27 + .../screenCast/net/ScreenCastMessage.java | 55 + .../screenCast/plugin/ScreenCastPlugin.java | 69 + pitiupi/build.xml | 73 + .../build/classes/.netbeans_automatic_build | 0 .../build/classes/.netbeans_update_resources | 0 pitiupi/build/classes/pitiupi/GUI/Login.class | Bin 0 -> 3607 bytes .../classes/pitiupi/GUI/MainWindow.class | Bin 0 -> 3644 bytes .../build/classes/pitiupi/GUI/MenuBar.class | Bin 0 -> 2699 bytes pitiupi/build/classes/pitiupi/Main$1.class | Bin 0 -> 813 bytes pitiupi/build/classes/pitiupi/Main.class | Bin 0 -> 2015 bytes .../pitiupi/control/PluginLoader.class | Bin 0 -> 3974 bytes .../build/classes/pitiupi/net/Message.class | Bin 0 -> 778 bytes .../build/classes/pitiupi/net/Socket.class | Bin 0 -> 3474 bytes .../build/classes/pitiupi/plugin/Plugin.class | Bin 0 -> 383 bytes pitiupi/dist/README.TXT | 32 + pitiupi/dist/pitiupi.jar | Bin 0 -> 22983 bytes pitiupi/manifest.mf | 3 + pitiupi/nbproject/build-impl.xml | 1771 ++++++++++++++++ pitiupi/nbproject/genfiles.properties | 8 + pitiupi/nbproject/private/config.properties | 0 pitiupi/nbproject/private/private.properties | 8 + pitiupi/nbproject/private/private.xml | 10 + pitiupi/nbproject/project.properties | 97 + pitiupi/nbproject/project.xml | 15 + pitiupi/plugins/pitiupi.chat.jar | 1 + pitiupi/plugins/pitiupi.screenCast.jar | 1 + pitiupi/src/pitiupi/GUI/Login.java | 102 + pitiupi/src/pitiupi/GUI/MainWindow.java | 98 + pitiupi/src/pitiupi/GUI/MenuBar.java | 68 + pitiupi/src/pitiupi/Main.java | 56 + pitiupi/src/pitiupi/control/PluginLoader.java | 69 + pitiupi/src/pitiupi/net/Message.java | 27 + pitiupi/src/pitiupi/net/Socket.java | 78 + pitiupi/src/pitiupi/plugin/Plugin.java | 23 + 79 files changed, 7278 insertions(+) create mode 100644 pitiupi.chat/build.xml create mode 100644 pitiupi.chat/build/built-jar.properties create mode 100644 pitiupi.chat/build/classes/META-INF/services/pitiupi.plugin.Plugin create mode 100644 pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatMenu.class create mode 100644 pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow$1.class create mode 100644 pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow.class create mode 100644 pitiupi.chat/build/classes/pitiupi/chat/net/ChatMessage.class create mode 100644 pitiupi.chat/build/classes/pitiupi/chat/plugin/ChatPlugin.class create mode 100644 pitiupi.chat/dist/pitiupi.chat.jar create mode 100644 pitiupi.chat/nbproject/build-impl.xml create mode 100644 pitiupi.chat/nbproject/genfiles.properties create mode 100644 pitiupi.chat/nbproject/private/config.properties create mode 100644 pitiupi.chat/nbproject/private/private.properties create mode 100644 pitiupi.chat/nbproject/project.properties create mode 100644 pitiupi.chat/nbproject/project.xml create mode 100644 pitiupi.chat/src/META-INF/services/pitiupi.plugin.Plugin create mode 100644 pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java create mode 100644 pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java create mode 100644 pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java create mode 100644 pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java create mode 100644 pitiupi.screenCast/build.xml create mode 100644 pitiupi.screenCast/build/built-jar.properties create mode 100644 pitiupi.screenCast/build/classes/META-INF/services/pitiupi.plugin.Plugin create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/GUI/ScreenCastMenu.class create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/GUI/ScreenCastWindow.class create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/control/AlarmClock.class create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/control/ImageTransformation.class create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/control/ScreenShot.class create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/net/ScreenCastMessage.class create mode 100644 pitiupi.screenCast/build/classes/pitiupi/screenCast/plugin/ScreenCastPlugin.class create mode 100644 pitiupi.screenCast/dist/README.TXT create mode 100644 pitiupi.screenCast/dist/lib/pitiupi.jar create mode 100644 pitiupi.screenCast/dist/pitiupi.screenCast.jar create mode 100644 pitiupi.screenCast/manifest.mf create mode 100644 pitiupi.screenCast/nbproject/build-impl.xml create mode 100644 pitiupi.screenCast/nbproject/genfiles.properties create mode 100644 pitiupi.screenCast/nbproject/private/private.properties create mode 100644 pitiupi.screenCast/nbproject/project.properties create mode 100644 pitiupi.screenCast/nbproject/project.xml create mode 100644 pitiupi.screenCast/src/META-INF/services/pitiupi.plugin.Plugin create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastMenu.java create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastWindow.java create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/control/AlarmClock.java create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/control/ImageTransformation.java create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/control/ScreenShot.java create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/net/ScreenCastMessage.java create mode 100644 pitiupi.screenCast/src/pitiupi/screenCast/plugin/ScreenCastPlugin.java create mode 100644 pitiupi/build.xml create mode 100644 pitiupi/build/classes/.netbeans_automatic_build create mode 100644 pitiupi/build/classes/.netbeans_update_resources create mode 100644 pitiupi/build/classes/pitiupi/GUI/Login.class create mode 100644 pitiupi/build/classes/pitiupi/GUI/MainWindow.class create mode 100644 pitiupi/build/classes/pitiupi/GUI/MenuBar.class create mode 100644 pitiupi/build/classes/pitiupi/Main$1.class create mode 100644 pitiupi/build/classes/pitiupi/Main.class create mode 100644 pitiupi/build/classes/pitiupi/control/PluginLoader.class create mode 100644 pitiupi/build/classes/pitiupi/net/Message.class create mode 100644 pitiupi/build/classes/pitiupi/net/Socket.class create mode 100644 pitiupi/build/classes/pitiupi/plugin/Plugin.class create mode 100644 pitiupi/dist/README.TXT create mode 100644 pitiupi/dist/pitiupi.jar create mode 100644 pitiupi/manifest.mf create mode 100644 pitiupi/nbproject/build-impl.xml create mode 100644 pitiupi/nbproject/genfiles.properties create mode 100644 pitiupi/nbproject/private/config.properties create mode 100644 pitiupi/nbproject/private/private.properties create mode 100644 pitiupi/nbproject/private/private.xml create mode 100644 pitiupi/nbproject/project.properties create mode 100644 pitiupi/nbproject/project.xml create mode 120000 pitiupi/plugins/pitiupi.chat.jar create mode 120000 pitiupi/plugins/pitiupi.screenCast.jar create mode 100644 pitiupi/src/pitiupi/GUI/Login.java create mode 100644 pitiupi/src/pitiupi/GUI/MainWindow.java create mode 100644 pitiupi/src/pitiupi/GUI/MenuBar.java create mode 100644 pitiupi/src/pitiupi/Main.java create mode 100644 pitiupi/src/pitiupi/control/PluginLoader.java create mode 100644 pitiupi/src/pitiupi/net/Message.java create mode 100644 pitiupi/src/pitiupi/net/Socket.java create mode 100644 pitiupi/src/pitiupi/plugin/Plugin.java diff --git a/pitiupi.chat/build.xml b/pitiupi.chat/build.xml new file mode 100644 index 0000000..fdd5503 --- /dev/null +++ b/pitiupi.chat/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project pitiupi.chat. + + + diff --git a/pitiupi.chat/build/built-jar.properties b/pitiupi.chat/build/built-jar.properties new file mode 100644 index 0000000..499f65e --- /dev/null +++ b/pitiupi.chat/build/built-jar.properties @@ -0,0 +1,6 @@ +#Thu, 16 Jul 2026 15:21:36 -0300 + + +/home/flavio/NetBeansProjects/pitiupi.chat= + +/home/flavio/NetBeansProjects/pitiupi= diff --git a/pitiupi.chat/build/classes/META-INF/services/pitiupi.plugin.Plugin b/pitiupi.chat/build/classes/META-INF/services/pitiupi.plugin.Plugin new file mode 100644 index 0000000..eea07c1 --- /dev/null +++ b/pitiupi.chat/build/classes/META-INF/services/pitiupi.plugin.Plugin @@ -0,0 +1 @@ +pitiupi.chat.plugin.ChatPlugin diff --git a/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatMenu.class b/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatMenu.class new file mode 100644 index 0000000000000000000000000000000000000000..e78acc994fa3a5f5656aebb47946a22944d40069 GIT binary patch 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; literal 0 HcmV?d00001 diff --git a/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow$1.class b/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow$1.class new file mode 100644 index 0000000000000000000000000000000000000000..254570a23ac208393b71cf8cb134d27e000c826d GIT binary patch literal 944 zcmaJMa9aC_R43Bi6OKSfts|^_;G;^Y?Y8Qi1p|l7VRXUTfsK414)T1arC9pTR1H+o>fiV#$DMVHp;~&QK~j8cL@-;L16A zS9huuoJp_eU**aSNi~pR?tp-eImn8M6w(H43mL33Y(z@KK+o z;q{s#40&HLWb4x+~YjoKW!71;!lv!=~UGBDdAoY2cOz0so?9QXj zl`9N(Q>cO8d&>iUDQFs0w0I#Vr<0-RF>KFX@SnLw_pfM8aWSSrY)qf@KNyCU6UDn1 zO+K9IGEe+b&=rSLD^K4%?7ki|Wolm6^+W0Pr?M>U>rtlk`&9kQq3_Y?wZxVP)oVYb z?pEFNL{N2k7>W>C+NBh2EVFIBO%%oG&)@<1U5cuRN11f7^!_{8*;g3FZ&>*p0kdS2 zU=i#g*|jMYkMNjIKsusi$WgpNu#Yx@pJ0!y=57-_>Q=hO9ozf_v-kzZH8wPRoTP!I z#mOFG2}iI|$4!^a-!2(EMV=@NQ5Cb1K#{^2N_a*-L0k45PL$ci0eO?ai{$D1168Nj AxBvhE literal 0 HcmV?d00001 diff --git a/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow.class b/pitiupi.chat/build/classes/pitiupi/chat/GUI/ChatWindow.class new file mode 100644 index 0000000000000000000000000000000000000000..4d4bde24b1457d32fe3713a0edd3bd467f67fea0 GIT binary patch literal 5713 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 I+JlAv1&K`YtpET3 literal 0 HcmV?d00001 diff --git a/pitiupi.chat/build/classes/pitiupi/chat/net/ChatMessage.class b/pitiupi.chat/build/classes/pitiupi/chat/net/ChatMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..de14b13bc396d0d254efbf2b05ab996a250453af GIT binary patch literal 876 zcmaKpK~LL25QX15#wMvDG!SS@is-3HitqucJy3B$<&<&(Me1=0R#+4qlx(X0tX2Y5 z>Y+cNKMM8DZUU$=m8G3o>&=^QX8+v%`VHU{wkilviV-GQK%}sGZLFDGn>5dC`Z*hq zbw5*xKAPOv1BFtv)h%NYMR?b>a&3>ANKU1t4Bue)1RTeFk^+S&i@GZ z72Y=Io6rAgbrs@%W{(~3TC+7Tp3)(fX`%GMtQh*^!Y^RvxWqSC)b| zTtvXv2>5XuF5_w$BPe+mo-4fVF)GG|_D`rEPWGIqydY3Vhz-=3C0>M8tnnrWb)I7I zg~}3RRSeqiZV|V4Zn5-WRig>;lIJUwv593goaMGJn_AL9p5C>oI^ux&I@|j;DWm7S zLHwPD0fbY=0EaDNe8Hx^_<(AeCvtobXnx8jr)fEdb+5Wdil#`4=tUq)|AM52Ae+S? Wk9Ooi-V@}*6Cm=2vVn#h{qjAQt6hETf9hp_GeCgQm-#Mp&e`Yeea`pSKfnG4U=?Nv9(Wb_!tmpYK+myu zqNxSVJXCkG$9m2dxbny_4SP|*8;xax2q35+6vlf93k;VG+o+ZdHFu=hYN=2?G)y(g z{jReW2o*KMd}f$=>xIC;R^5F4>86@${7ERdDlk<4>BN#2GLY*VLKk{uioLXp{$Ch3 zy}mH6;X0vZoI3RFhEIp+#J?dh*bzUao7E8dF(}b*3XHr(?-VJP3E>uQD;N&reT)e7 z*Q2(UETCxlybMm0=$2&tRIR))$ope?n}}r;j0xOw^e`-S<;>QX%Vq6s(=1i(v|ZM< zVhE$SBlEf|;Ex`xNS{d-QulEcY;l-COgh9VhKs5)c9R8hLzuw5Fs3m>4hfU5H^Q}O z%t^GlJxJXwv#b~CP-5z~BV9_bRJ21~YBv|g1AHJ5DeF1iIMI`oruJK4w2jg>e}{^P z0)6$eHg{G}b9%`(EHj9Y@Ueo0FcNsw(!J@kimeyfv{scpeBDi)weFS;vqoPcgn2B6 z@hO%B0=7j`$-h8ro$f7dSCCZjS(rn!)|5H*lYUUe7g|Lpr06rJ+NuB~o3G}WN{`~30utw6kBSSl}Oe26D0WlkbD(CkL zLe@p7jbVKReMu{?3v_Q8roLS*X7%zDEnDDCWXsBFg^X4<){3Mr$lY?)KC;T36Yev5xx$uo z4-FP>aA@kn$l_~17(A4=s^y%%W=Ji%rP3~yGqOK8*#W-H0(<;=b>4)gQlrc;%Qq;a5KFz)kotgs0qvT_a@hj3Hw+f=}WP`p$9xB}Nu}zu-f8 z_~abRFVWLDZ}R+#;6coilX+)Na+JJ~bj&af@MQ}kh6v)A#1!rB({h@&Gg#t2$yr+E z?Jnk=QZ~r+Bt5>u0gH{W$glAYN3q$3hRwL{+Wx%sY9v`JZzHG+mQ6A xgX>niYoep8(ZO}Q-F2y>>oK0!5}sp@GP}Sf)cp(Ww)?L(`3D+V7o6IP{{bDh>~{bF literal 0 HcmV?d00001 diff --git a/pitiupi.chat/dist/pitiupi.chat.jar b/pitiupi.chat/dist/pitiupi.chat.jar new file mode 100644 index 0000000000000000000000000000000000000000..78438b7b633c374e68616d7b4e9635f71c5c60f2 GIT binary patch literal 13171 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 YZNh8{mT|fYF<&Kp7UAAI_$nNI8yz8v7ytkO literal 0 HcmV?d00001 diff --git a/pitiupi.chat/nbproject/build-impl.xml b/pitiupi.chat/nbproject/build-impl.xml new file mode 100644 index 0000000..9ea09d4 --- /dev/null +++ b/pitiupi.chat/nbproject/build-impl.xml @@ -0,0 +1,1789 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pitiupi.chat/nbproject/genfiles.properties b/pitiupi.chat/nbproject/genfiles.properties new file mode 100644 index 0000000..42ba841 --- /dev/null +++ b/pitiupi.chat/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=3f66efc2 +build.xml.script.CRC32=3953f1a4 +build.xml.stylesheet.CRC32=f85dc8f2@1.119.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=3f66efc2 +nbproject/build-impl.xml.script.CRC32=a4594806 +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.119.0.48 diff --git a/pitiupi.chat/nbproject/private/config.properties b/pitiupi.chat/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/pitiupi.chat/nbproject/private/private.properties b/pitiupi.chat/nbproject/private/private.properties new file mode 100644 index 0000000..2a5dca8 --- /dev/null +++ b/pitiupi.chat/nbproject/private/private.properties @@ -0,0 +1,8 @@ +compile.on.save=true +do.depend=false +do.jar=true +do.jlink=false +javac.debug=true +javadoc.preview=true +jlink.strip=false +user.properties.file=/home/flavio/snap/netbeans/145/build.properties diff --git a/pitiupi.chat/nbproject/project.properties b/pitiupi.chat/nbproject/project.properties new file mode 100644 index 0000000..b87aa66 --- /dev/null +++ b/pitiupi.chat/nbproject/project.properties @@ -0,0 +1,98 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=pitiupi.chat +application.vendor=flavio +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/pitiupi.chat.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/pitiupi.chat +endorsed.classpath= +excludes= +includes=** +jar.compress=false +javac.classpath=\ + ${reference.pitiupi.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=25 +javac.target=25 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=pitiupi.chat +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=true +platform.active=default_platform +project.pitiupi=../pitiupi +reference.pitiupi.jar=${project.pitiupi}/dist/pitiupi.jar +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/pitiupi.chat/nbproject/project.xml b/pitiupi.chat/nbproject/project.xml new file mode 100644 index 0000000..4b42f84 --- /dev/null +++ b/pitiupi.chat/nbproject/project.xml @@ -0,0 +1,25 @@ + + + org.netbeans.modules.java.j2seproject + + + pitiupi.chat + + + + + + + + + + pitiupi + jar + + jar + clean + jar + + + + diff --git a/pitiupi.chat/src/META-INF/services/pitiupi.plugin.Plugin b/pitiupi.chat/src/META-INF/services/pitiupi.plugin.Plugin new file mode 100644 index 0000000..eea07c1 --- /dev/null +++ b/pitiupi.chat/src/META-INF/services/pitiupi.plugin.Plugin @@ -0,0 +1 @@ +pitiupi.chat.plugin.ChatPlugin diff --git a/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java b/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java new file mode 100644 index 0000000..8406b59 --- /dev/null +++ b/pitiupi.chat/src/pitiupi/chat/GUI/ChatMenu.java @@ -0,0 +1,31 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package pitiupi.chat.GUI; + +import java.awt.event.ActionEvent; +import javax.swing.JMenu; + +/** + * + * @author flavio + */ +public class ChatMenu extends JMenu { + + private final ChatWindow chatWindow; + private javax.swing.JMenuItem menuItem; + + 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); + } + + private void chatMenuActionPerformed(ActionEvent ae) { + this.chatWindow.setVisible(true); + } +} diff --git a/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java b/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java new file mode 100644 index 0000000..f894a65 --- /dev/null +++ b/pitiupi.chat/src/pitiupi/chat/GUI/ChatWindow.java @@ -0,0 +1,121 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +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.net.Message; + +/** + * + * @author flavio + */ +public class ChatWindow extends javax.swing.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 final MainWindow mainWindow; + + public ChatWindow(MainWindow mainWindow) { + this.mainWindow = mainWindow; + initComponents(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + private void initComponents() { + + this.setDefaultCloseOperation(javax.swing.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.setDividerLocation(500); + jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); + jEditorPane1.setContentType("text/html"); + jPanel1.setLayout(new java.awt.BorderLayout()); + jTextArea1.setColumns(20); + jTextArea1.setRows(5); + jTextArea1.addKeyListener(new java.awt.event.KeyAdapter() { + @Override + public void keyTyped(java.awt.event.KeyEvent evt) { + if (evt.getKeyChar() == '\n') { + sendMessage(); + } + } + }); + jButton1.setText("Send"); + + jScrollPane1.setViewportView(jEditorPane1); + jScrollPane2.setViewportView(jTextArea1); + jSplitPane1.setTopComponent(jScrollPane1); + + jPanel1.add(jScrollPane2, java.awt.BorderLayout.CENTER); + jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT)); + jButton1.addActionListener((java.awt.event.ActionEvent evt) -> { + sendMessage(); + }); + jPanel2.add(jButton1); + jPanel1.add(jPanel2, java.awt.BorderLayout.PAGE_END); + jSplitPane1.setRightComponent(jPanel1); + getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER); + pack(); + } + + private void sendMessage() { + if (jTextArea1.getText().trim().length() == 0) { + return; + } + ChatMessage message = new ChatMessage(mainWindow.getName(), jTextArea1.getText()); + this.sendChatMessage(message); + jTextArea1.setText(""); + } + + public void sendChatMessage(Message message) { + try { + mainWindow.getSocket().send(message.toByteArray()); + } catch (IOException ex) { + Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex); + } + } + + public void receiveChatMessage(ChatMessage message) { + SimpleDateFormat dt = new SimpleDateFormat("dd/MM/yyyyy hh:mm:ss"); + Date date = new Date(); + this.receiveChatMessage(dt.format(date) + " " + + "" + message.getName() + ": " + + message.getText() + "
"); + } + + public void receiveChatMessage(String message) { + jEditorPane1.setText(message + jEditorPane1.getText()); + } +} diff --git a/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java b/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java new file mode 100644 index 0000000..e194a2b --- /dev/null +++ b/pitiupi.chat/src/pitiupi/chat/net/ChatMessage.java @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.chat.net; + +import pitiupi.net.Message; +import pitiupi.net.Message; + +/** + * + * @author flavio + */ +public class ChatMessage extends Message{ + + private String text; + private String name; + + + public ChatMessage(){ + + } + + public ChatMessage(String name, String text){ + this.name = name; + this.text = text; + } + /** + * @return the name + */ + public String getName() { + return name; + } + + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * @return the text + */ + public String getText() { + return text; + } + + /** + * @param text the text to set + */ + public void setText(String text) { + this.text = text; + } + +} diff --git a/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java b/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java new file mode 100644 index 0000000..44f3911 --- /dev/null +++ b/pitiupi.chat/src/pitiupi/chat/plugin/ChatPlugin.java @@ -0,0 +1,71 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package pitiupi.chat.plugin; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import pitiupi.GUI.MainWindow; +import pitiupi.chat.GUI.ChatMenu; +import pitiupi.chat.GUI.ChatWindow; +import pitiupi.chat.net.ChatMessage; +import pitiupi.net.Message; +import pitiupi.plugin.Plugin; + +/** + * + * @author flavio + */ +public class ChatPlugin implements Plugin { + + private ChatWindow chatWindow; + private MainWindow mainWindow; + + public ChatPlugin() { + } + + @Override + public void createPlugin(MainWindow mainWindow) { + this.mainWindow = mainWindow; + this.chatWindow = new ChatWindow(mainWindow); + this.mainWindow.addMenu(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 ex) { + System.out.println(ex.toString()); + } catch (ClassNotFoundException ex) { + System.out.println(ex.toString()); + } + } + + @Override + public String getName() { + return "Chat"; + } + + @Override + public String getAuthor() { + return "Flávio Schiavoni"; + } + + @Override + public String getVersion() { + return "0"; + } + + @Override + public Message getMessage() { + return new ChatMessage(); + } +} diff --git a/pitiupi.screenCast/build.xml b/pitiupi.screenCast/build.xml new file mode 100644 index 0000000..659019b --- /dev/null +++ b/pitiupi.screenCast/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project pitiupi.screenCast. + + + diff --git a/pitiupi.screenCast/build/built-jar.properties b/pitiupi.screenCast/build/built-jar.properties new file mode 100644 index 0000000..6898243 --- /dev/null +++ b/pitiupi.screenCast/build/built-jar.properties @@ -0,0 +1,6 @@ +#Thu, 16 Jul 2026 15:21:39 -0300 + + +/home/flavio/NetBeansProjects/pitiupi.screenCast= + +/home/flavio/NetBeansProjects/pitiupi= diff --git a/pitiupi.screenCast/build/classes/META-INF/services/pitiupi.plugin.Plugin b/pitiupi.screenCast/build/classes/META-INF/services/pitiupi.plugin.Plugin new file mode 100644 index 0000000..d11a8fc --- /dev/null +++ b/pitiupi.screenCast/build/classes/META-INF/services/pitiupi.plugin.Plugin @@ -0,0 +1 @@ +pitiupi.screenCast.plugin.ScreenCastPlugin diff --git a/pitiupi.screenCast/build/classes/pitiupi/screenCast/GUI/ScreenCastMenu.class b/pitiupi.screenCast/build/classes/pitiupi/screenCast/GUI/ScreenCastMenu.class new file mode 100644 index 0000000000000000000000000000000000000000..4c002f112524930cac724e89e79f82f91994c23b GIT binary patch literal 1644 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 literal 0 HcmV?d00001 diff --git a/pitiupi.screenCast/build/classes/pitiupi/screenCast/control/ImageTransformation.class b/pitiupi.screenCast/build/classes/pitiupi/screenCast/control/ImageTransformation.class new file mode 100644 index 0000000000000000000000000000000000000000..b4c1d4370e808ac8f51fb5b77f932ab38eda18f4 GIT binary patch literal 2970 zcmb7GX;%|x7`-o4j~nahA<)m4fDoR zBeh@@^Qp|tyqWa`BE448^7;fq$&N`CQGpg;$+A-e%bwZqIL30O?3K#igy)z>AqEwp zDC%i2U&_a@6T4LG*3f`G0&!`&l(Gs&-lPLvUiFMXc+s&uQ$SCS_|A<*FHlO|HH$gZ zF>}6ZI*|JK7|kl?t0(kTiy__dK*HFoVISfG^`5;BRX|C0JRFd?4rn-tgg{f?^nCYI z5`^OpEDzgG!SKe60wE=1+2?Hb;|G1?RHkU49V7d&5h$8d~-KwH)A7J@fa7~@2> zey`Mt;W#=pbfSwnxTZH~7fO!lx|UrWwR0pyN$MSwQtPCKQ%JF>o3+Nv#)9Q7OT}TS zxD#hIoW(hT16ekRXZl>%mP??wmgJ!G(g8&qI9OVz`X79EDzi`~RsG{rZkrt`{`o2HJw@89Bod9RGi2f z3moC1>lwu?TPU8?b-g+Qa@2#2r27fU{ylCTUxRcFVN$~s-r^L~(M`uF%~@Gjx~Q>V zJ7z09z(W;pYj_8b7<(Pong)}~ImV(NP~comjROq2zI6fl=b0JTbe@_H7mJF=0;fur zXO&A<%4JKN#X-aMQdzs`IW`x9ti(OXD7v%$8sXq@76$#<**#(v&9QP}#&qr(GYh1m zal|G$lZIo-=jx&2%~{Ox^vM4UlNLBylaVEXq&C$w&DFq`UX`IHgOyY z^j@{`8CH?4E>I`E$8IcT&63BoT@|*#UcU%(+h^7#?4N9PuL!ii2J>(L+LcWtAcon_ zi@~PmCJdl$TC>Cx2^6^7eff4{;!rJI3KnOO;C5R6W~FAxl0O;fd9{beSFJn1hOOaAzhP@O};$F)hX_leF`rCRW` zCR76?Iesbxd2Ea?oz7JEhrrGW&&WO*HA>Zvj!oEQCuf(+TtPAsZm*!b z`vp$-L=s9OQo;FzB3|P1bf*xj=t)rNYBw?WsM79wLY2@%J`-n|KS*B`N3jd-Nbp0U z7039NK8|jj;QKd;E9l_v?!-8{Fv(NN+T8$PH8nzo1DAg%jvaHVC1 z7k$Nk^20?Xt~5VKTk}Q5KZ+|-G$=)VEltl6ZR(Svmbju;FxC@(iJ@seG(=Z%m)w!L z`-yNUBr2GmN<_A@bei$cU@y)wqw_5D1)RhsW^$QNS9o_7{pdpm*Z30Y_gT6X;KV0> z0}wGj#b?Y=-hIxyI{rVx7rYD6?u{`CL= literal 0 HcmV?d00001 diff --git a/pitiupi.screenCast/build/classes/pitiupi/screenCast/control/ScreenShot.class b/pitiupi.screenCast/build/classes/pitiupi/screenCast/control/ScreenShot.class new file mode 100644 index 0000000000000000000000000000000000000000..3cde756ccc5d720429121c5af500b530519eadd2 GIT binary patch literal 954 zcma)4T~8W86g>mT!gdt}KU-_*hZWSi{d%KmV$mi>S`#5OJ`U>$qstCiX4|H}s(q2B zCj9~ZQBCix2t4@E-Q-U0J@=e@=id4A_t$R#`*>v|fux0$gDIpLX3zO&?)p4vyGN~a z;c15S8yQIbmLXXxH!WlsX5u9NMZ3qUrL+ypNZet_j{%~Rh%anRW5z);+%844uHwYXNU@}7=D5`R6xJifVDWuimb#u2C1q#r9!!y48+H%+Y(`ew|t7^ zYs%w(lZVpy!(d8xWS?Q9_Fw81hOFinVz(ZbDo#%7w#FHzLbFy{)_7p?qDjfVzKEFu z!~6t38Vfxb73p3?_}Uo1y^y{C)e}8Uo9bKGVOSXLeD_mhgjsk_n~5Q*+=HVLK<(63 z6nf&lG_%T$C%R*@@eudvb(=2%x)su7ACTwL$>^Ng9Dx0Z;UZZB0|lZ1&UFGF;W2qx zJi$7N7;*=d-xs7vv@I@*ghg>vaGC literal 0 HcmV?d00001 diff --git a/pitiupi.screenCast/build/classes/pitiupi/screenCast/net/ScreenCastMessage.class b/pitiupi.screenCast/build/classes/pitiupi/screenCast/net/ScreenCastMessage.class new file mode 100644 index 0000000000000000000000000000000000000000..dc8a7ea26b95b1e4f03cc4086d68875edca92d3e GIT binary patch literal 925 zcma)(PjAye5XIj*j!lBw(6mh{|Jq)t6QDi-r=lKGfrJ!#35tYz+NP_pC~+#=LE>A1 z)T&Ysd;mTa;_cc^A`&EIX=lfJ^V>Hwzkc8R1n?GnRX8a5a08U#39Mh}OiwO!6ss)y zpwd(hlz{g}$2vO_D22^l1$R*KQ4Mexfk1d$k@gd%;$xX+wzxY@rx-VuBhu=fFY>F5 zhB6*R-7L}Z;LtEv1JrO&prS{7wEZok)H!VnxX0sj-fJBltCPv-OeG)X+0cT1LmGD$wfuudhRat#HxOX}j4I@CPb8v9345=Awv#^j5IB1Y!^Y5$|U$xna{Z z6|ipZZ#m50t9Hkeq_5s-(_dp@h6iSH*yFSuuFv7e9oQR3$LK+rJ@Q;*_L5OBmRr{l zKdh|I)2tj=hl>rKAi#>4Z89@}22TU{L}iJwW&o{cSMXcUudp&h)d>ORF1Ap?eXL^J zB6st$0!e`NX`ZQ>B@@e`Q=dN*G3Gum;eV&df$?eD0Ctvo+{S~V_=sxLk7xbOtmR!k zWjFhl(8yI&OI~3~;2|Crta&3Ve;awR)W~BzS!QHzM!At!H1hf%M$AOa1a@reyMF)| C`IO!O literal 0 HcmV?d00001 diff --git a/pitiupi.screenCast/build/classes/pitiupi/screenCast/plugin/ScreenCastPlugin.class b/pitiupi.screenCast/build/classes/pitiupi/screenCast/plugin/ScreenCastPlugin.class new file mode 100644 index 0000000000000000000000000000000000000000..77a7e7617d4d49ddd13fc6004fba66ed872ac40f GIT binary patch literal 2325 zcmah~TUQfT7~LlqCy4@U*a8>k4b!mi3;1L4d<}UXmzPU_{&-+mW4Xef zp&eMJ5ki#qvoo_{bmNkOo+vJ(S0GU_Y@=Q=)SBx-t(5A!hN-rFZa5nZQ`QXgxnUNq zmjXkpE$E|XD{9s~Nh`P_Fxfiv_?32Trwu<5^kG1jIw&v_dz;I6UZy=9#d{bbC2gOr zWa2KeeWrGb$L!u0xbe>HvbtH1U=$z7+{Ofw?cClKA)b%m8YUE6kKzVy3JkQOoh3>@ z(TYVGh$gXBsq>*)dudSVCvrC(&nt)tj5-})SnA@DtuIuo+R=(xsoOcbs%zy4CXtXi zP6-5K+lvx2Eil}|GK_$N`^#T*l;>IL06&~t9{HH`$OI}+Z}qeIlZKwqoq zmGz~=f?lx=%M9Z_K2`7_iUlm5nWo%P&DP5t3aieU>Ti@qCN`>u*(5g|K^hOEoXTZ^ zkZqB2sv~fgg~l#zA7e$qlPEsJswWwbKPq04-b*F}Ho12uyXiuTweYh2Y)Fmz+cVK%Zbo(m z#(59=Ah5}&PhN-oY53$-&Q;+){~3Jd_@#0cT!V=dh}VwUQ$FP}(2r+)MjHmm<2kID67FqHTOU8fk`;yQGKtH&5`lhI2QFh$mqTTk^rc~kdrQt+!J%T)EqN0~=qxo% z58q>#IqlKg1Ok6!mL3%(|K%Pppl$_*3?USx*A--CQ|;qLgC!;_yA=qXBDHmbjq|!L OdUOrB-BcpNhw^_8%OkJ= literal 0 HcmV?d00001 diff --git a/pitiupi.screenCast/dist/README.TXT b/pitiupi.screenCast/dist/README.TXT new file mode 100644 index 0000000..28b99c7 --- /dev/null +++ b/pitiupi.screenCast/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "pitiupi.screenCast.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/pitiupi.screenCast/dist/lib/pitiupi.jar b/pitiupi.screenCast/dist/lib/pitiupi.jar new file mode 100644 index 0000000000000000000000000000000000000000..85ec1b823a9a5e1d01b01f9f8fec4825a5bc7abc GIT binary patch literal 22983 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 KYF*=9eD^;N5VK1F literal 0 HcmV?d00001 diff --git a/pitiupi.screenCast/manifest.mf b/pitiupi.screenCast/manifest.mf new file mode 100644 index 0000000..328e8e5 --- /dev/null +++ b/pitiupi.screenCast/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/pitiupi.screenCast/nbproject/build-impl.xml b/pitiupi.screenCast/nbproject/build-impl.xml new file mode 100644 index 0000000..6895ddc --- /dev/null +++ b/pitiupi.screenCast/nbproject/build-impl.xml @@ -0,0 +1,1789 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pitiupi.screenCast/nbproject/genfiles.properties b/pitiupi.screenCast/nbproject/genfiles.properties new file mode 100644 index 0000000..78bc088 --- /dev/null +++ b/pitiupi.screenCast/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=96758119 +build.xml.script.CRC32=70726a23 +build.xml.stylesheet.CRC32=f85dc8f2@1.119.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=96758119 +nbproject/build-impl.xml.script.CRC32=0f906282 +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.119.0.48 diff --git a/pitiupi.screenCast/nbproject/private/private.properties b/pitiupi.screenCast/nbproject/private/private.properties new file mode 100644 index 0000000..5e86d43 --- /dev/null +++ b/pitiupi.screenCast/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=/home/flavio/snap/netbeans/145/build.properties diff --git a/pitiupi.screenCast/nbproject/project.properties b/pitiupi.screenCast/nbproject/project.properties new file mode 100644 index 0000000..59c1b5f --- /dev/null +++ b/pitiupi.screenCast/nbproject/project.properties @@ -0,0 +1,98 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/pitiupi.screenCast.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/pitiupi.screenCast +excludes= +includes=** +jar.compress=false +javac.classpath=\ + ${reference.pitiupi.jar} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=25 +javac.target=25 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=pitiupi.screenCast +main.class= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +project.pitiupi=../pitiupi +reference.pitiupi.jar=${project.pitiupi}/dist/pitiupi.jar +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/pitiupi.screenCast/nbproject/project.xml b/pitiupi.screenCast/nbproject/project.xml new file mode 100644 index 0000000..1c77854 --- /dev/null +++ b/pitiupi.screenCast/nbproject/project.xml @@ -0,0 +1,25 @@ + + + org.netbeans.modules.java.j2seproject + + + pitiupi.screenCast + + + + + + + + + + pitiupi + jar + + jar + clean + jar + + + + diff --git a/pitiupi.screenCast/src/META-INF/services/pitiupi.plugin.Plugin b/pitiupi.screenCast/src/META-INF/services/pitiupi.plugin.Plugin new file mode 100644 index 0000000..d11a8fc --- /dev/null +++ b/pitiupi.screenCast/src/META-INF/services/pitiupi.plugin.Plugin @@ -0,0 +1 @@ +pitiupi.screenCast.plugin.ScreenCastPlugin diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastMenu.java b/pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastMenu.java new file mode 100644 index 0000000..93abd86 --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastMenu.java @@ -0,0 +1,31 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package pitiupi.screenCast.GUI; + +import java.awt.event.ActionEvent; +import javax.swing.JMenu; + +/** + * + * @author flavio + */ +public class ScreenCastMenu extends JMenu { + + private final ScreenCastWindow screenCastWindow; + private final javax.swing.JMenuItem menuItem; + + public ScreenCastMenu(ScreenCastWindow screenCastWindow) { + this.screenCastWindow = screenCastWindow; + this.setText("Screen Cast"); + menuItem = new javax.swing.JMenuItem(); + menuItem.setText("ScreenCast Window"); + menuItem.addActionListener(this::chatMenuActionPerformed); + this.add(menuItem); + } + + private void chatMenuActionPerformed(ActionEvent ae) { + this.screenCastWindow.setVisible(true); + } +} diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastWindow.java b/pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastWindow.java new file mode 100644 index 0000000..f3ae1ca --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/GUI/ScreenCastWindow.java @@ -0,0 +1,135 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.screenCast.GUI; + +import pitiupi.screenCast.control.AlarmClock; +import pitiupi.screenCast.control.ImageTransformation; +import pitiupi.screenCast.control.ScreenShot; +import pitiupi.screenCast.net.ScreenCastMessage; +import java.awt.AWTException; +import java.awt.event.ActionEvent; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Timer; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import pitiupi.GUI.MainWindow; +import pitiupi.net.Message; + +/** + * + * @author flavio + */ +public class ScreenCastWindow extends javax.swing.JFrame { + + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTabbedPane tabbedPane; + private javax.swing.JCheckBox onlineButton; + + private AlarmClock alarmClock; + private Timer timer; + public final static int TIME = 1000; + + private float compressRatio; + private final MainWindow mainWindow; + + public ScreenCastWindow(MainWindow mainWindow) { + this.mainWindow = mainWindow; + this.compressRatio = 0.5f; + this.initComponents(); + } + + private void initComponents() { + this.setTitle("screen cast"); + + onlineButton = new javax.swing.JCheckBox("Sharing?"); + onlineButton.setSelected(false); + onlineButton.addActionListener(this::onlineButtonActionPerformed); + this.getContentPane().add(onlineButton, java.awt.BorderLayout.NORTH); + + jScrollPane1 = new javax.swing.JScrollPane(); + tabbedPane = new javax.swing.JTabbedPane(); + jScrollPane1.setViewportView(tabbedPane); + this.getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); + + this.pack(); + + this.timer = new Timer(); + this.setSize(new java.awt.Dimension(1024, 768)); + } + + public void shareMySheet(boolean status) { + if (status) { + this.timer = new Timer(); + this.alarmClock = new AlarmClock(this); + this.timer.scheduleAtFixedRate(this.alarmClock, 0, ScreenCastWindow.TIME); + } else { + this.timer.cancel(); + } + } + + public void closeCurrentTab() { + if (tabbedPane.getSelectedIndex() > 0) { + tabbedPane.remove(tabbedPane.getSelectedIndex()); + } + } + + public void exit() { + this.shareMySheet(false); + } + + public void sendScreenCastMessage() { + byte[] msg = null; + try { + BufferedImage image = ScreenShot.takeAShot(); + BufferedImage rescaled = ImageTransformation.resize(image, 1024, 768); + byte[] byteImage = ImageTransformation.compress(rescaled, compressRatio); + ScreenCastMessage message = new ScreenCastMessage(this.mainWindow.getUserName(), byteImage); + msg = message.toByteArray(); + } catch (AWTException | IOException ex) { + Logger.getLogger(AlarmClock.class.getName()).log(Level.SEVERE, null, ex); + } + if (msg != null) { + try { + this.mainWindow.getSocket().send(msg); + } catch (IOException ex) { + System.out.println(ex.toString()); + this.compressRatio -= 0.1f; + } + } + } + + public void receiveScreenCastMessage(ScreenCastMessage message) { + ByteArrayInputStream bais = new ByteArrayInputStream(message.getImageByte()); + BufferedImage image; + try { + + image = ImageIO.read(bais); + ImageIcon imageIcon = new ImageIcon(image); + + JLabel myShoot = new JLabel(imageIcon); + + for (int i = 0; i < tabbedPane.getTabCount(); i++) { + String title = tabbedPane.getTitleAt(i); + if (title.equals(message.getName())) { + tabbedPane.setComponentAt(i, myShoot); + return; + } + } + tabbedPane.addTab(message.getName(), myShoot); + } catch (IOException ex) { + Logger.getLogger(ScreenCastWindow.class.getName()).log(Level.SEVERE, null, ex); + } + } + + private void onlineButtonActionPerformed(ActionEvent ae) { + this.shareMySheet(this.onlineButton.isSelected()); + } +} diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/control/AlarmClock.java b/pitiupi.screenCast/src/pitiupi/screenCast/control/AlarmClock.java new file mode 100644 index 0000000..c3d1e79 --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/control/AlarmClock.java @@ -0,0 +1,27 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.screenCast.control; + +import java.util.TimerTask; +import pitiupi.screenCast.GUI.ScreenCastWindow; + +/** + * + * @author flavio + */ +public class AlarmClock extends TimerTask { + + private final ScreenCastWindow screenCastWindow; + + public AlarmClock(ScreenCastWindow mainWindow) { + this.screenCastWindow = mainWindow; + } + + @Override + public void run() { + this.screenCastWindow.sendScreenCastMessage(); + } +} diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/control/ImageTransformation.java b/pitiupi.screenCast/src/pitiupi/screenCast/control/ImageTransformation.java new file mode 100644 index 0000000..1dcda37 --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/control/ImageTransformation.java @@ -0,0 +1,67 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.screenCast.control; + +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Iterator; +import javax.imageio.IIOImage; +import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; +import javax.imageio.stream.ImageOutputStream; + +/** + * + * @author flavio + */ +public class ImageTransformation { + + public static byte[] toByteArray(BufferedImage image) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(image, "jpg", baos); + byte[] data = baos.toByteArray(); + return data; + } + + public static byte[] compress(BufferedImage image, float scale) throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Iterator writers = ImageIO.getImageWritersByFormatName("jpg"); + ImageWriter writer = writers.next(); + ImageWriteParam param = writer.getDefaultWriteParam(); + param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + param.setCompressionQuality(scale); + ImageOutputStream ios = ImageIO.createImageOutputStream(baos); + writer.setOutput(ios); + writer.write(null, new IIOImage(image, null, null), param); + byte[] data = baos.toByteArray(); + writer.dispose(); + return data; + } + + public static BufferedImage resize(BufferedImage img, int maxWidth, int maxHeight) throws IOException { + int scaledWidth = maxWidth; + int scaledHeight = (int) (img.getHeight() * ((double) scaledWidth / img.getWidth())); + + if (scaledHeight > maxHeight) { + scaledHeight = maxHeight; + scaledWidth = (int) (img.getWidth() * ((double) scaledHeight / img.getHeight())); + + if (scaledWidth > maxWidth) { + scaledWidth = maxWidth; + scaledHeight = maxHeight; + } + } + + Image resized = img.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH); + BufferedImage buffered = new BufferedImage(scaledWidth, scaledHeight, Image.SCALE_REPLICATE); + buffered.getGraphics().drawImage(resized, 0, 0, null); + + return buffered; + } +} diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/control/ScreenShot.java b/pitiupi.screenCast/src/pitiupi/screenCast/control/ScreenShot.java new file mode 100644 index 0000000..6d256ed --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/control/ScreenShot.java @@ -0,0 +1,27 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.screenCast.control; + +import java.awt.AWTException; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.image.BufferedImage; +import java.io.IOException; + +/** + * + * @author flavio + */ +public class ScreenShot { + + public static BufferedImage takeAShot() throws AWTException, IOException { + Robot robot = new Robot(); + Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); + BufferedImage output = robot.createScreenCapture(screenRect); + return output; + } +} diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/net/ScreenCastMessage.java b/pitiupi.screenCast/src/pitiupi/screenCast/net/ScreenCastMessage.java new file mode 100644 index 0000000..99b4ae1 --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/net/ScreenCastMessage.java @@ -0,0 +1,55 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.screenCast.net; + +import pitiupi.net.Message; + +/** + * + * @author flavio + */ +public class ScreenCastMessage extends Message { + + private String name; + private byte[] imageByte; + + public ScreenCastMessage() { + } + + public ScreenCastMessage(String name, byte[] imageByte) { + this.name = name; + this.imageByte = imageByte; + } + + /** + * @return the name + */ + public String getName() { + return name; + } + + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * @return the imageByte + */ + public byte[] getImageByte() { + return imageByte; + } + + /** + * @param imageByte the image to set + */ + public void setImageByte(byte[] imageByte) { + this.imageByte = imageByte; + } + +} diff --git a/pitiupi.screenCast/src/pitiupi/screenCast/plugin/ScreenCastPlugin.java b/pitiupi.screenCast/src/pitiupi/screenCast/plugin/ScreenCastPlugin.java new file mode 100644 index 0000000..b8d593a --- /dev/null +++ b/pitiupi.screenCast/src/pitiupi/screenCast/plugin/ScreenCastPlugin.java @@ -0,0 +1,69 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package pitiupi.screenCast.plugin; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import pitiupi.GUI.MainWindow; +import pitiupi.net.Message; +import pitiupi.plugin.Plugin; +import pitiupi.screenCast.GUI.ScreenCastMenu; +import pitiupi.screenCast.GUI.ScreenCastWindow; +import pitiupi.screenCast.net.ScreenCastMessage; + +/** + * + * @author flavio + */ +public class ScreenCastPlugin implements Plugin { + + private ScreenCastWindow screenCastWindow; + private MainWindow mainWindow; + + @Override + public String getName() { + return "ScreenCast"; + } + + @Override + public String getAuthor() { + return "Flávio Schiavoni"; + } + + @Override + public String getVersion() { + return "0.0"; + } + + @Override + public void createPlugin(MainWindow mainWindow) { + this.mainWindow = mainWindow; + this.screenCastWindow = new ScreenCastWindow(mainWindow); + this.mainWindow.addMenu(new ScreenCastMenu(screenCastWindow)); + } + + @Override + public void receiveMessage(byte[] message) { + ByteArrayInputStream bis = new ByteArrayInputStream(message); + ObjectInputStream ois; + try { + ois = new ObjectInputStream(bis); + if (ois.readObject() instanceof ScreenCastMessage msg) { + this.screenCastWindow.receiveScreenCastMessage(msg); + } + } catch (IOException ex) { + System.out.println(ex.toString()); + } catch (ClassNotFoundException ex) { + System.out.println(ex.toString()); + } + } + + @Override + public Message getMessage() { + return new ScreenCastMessage(); + } + +} diff --git a/pitiupi/build.xml b/pitiupi/build.xml new file mode 100644 index 0000000..8d808a2 --- /dev/null +++ b/pitiupi/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project pitiupi. + + + diff --git a/pitiupi/build/classes/.netbeans_automatic_build b/pitiupi/build/classes/.netbeans_automatic_build new file mode 100644 index 0000000..e69de29 diff --git a/pitiupi/build/classes/.netbeans_update_resources b/pitiupi/build/classes/.netbeans_update_resources new file mode 100644 index 0000000..e69de29 diff --git a/pitiupi/build/classes/pitiupi/GUI/Login.class b/pitiupi/build/classes/pitiupi/GUI/Login.class new file mode 100644 index 0000000000000000000000000000000000000000..b5380ba81a723f924c6817e970ebcb2e0039ac08 GIT binary patch literal 3607 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 VoBV~dk2w2UI;7$^_zpjy?_U(Ikahq7 literal 0 HcmV?d00001 diff --git a/pitiupi/build/classes/pitiupi/Main$1.class b/pitiupi/build/classes/pitiupi/Main$1.class new file mode 100644 index 0000000000000000000000000000000000000000..ab626d046000ab40c99fa4a28b4981a04902e9cd GIT binary patch literal 813 zcmZuvZEq4m5PlZU9$ZgKu|<4sZEJ;Ax%l#}#%P+VB-hpy#i*YS*wAf`J+ixp>Cf_u zHJbPX{87ePXa%B|+`i1r^UO1|^XvEbp8)m{c*r2@!trqla}33kXcz@?BzwVO`-FE4 z!`xFLg?Yx1t=3vDat!5xFd`j@;MKcEupbHeUdV3pIR}p+pK7k^GU{^=J}$c`_*g)3 zhPipF4ev9|_qchZk^xudlwq?PPLel`60)~b``6^bMainYLPGunY1CRaWZ6d*wig-Iuh zTagm>er|NkvCvd&I7`1n%~Po)0ewoxQ2Fbh?I6XiC#qMM+_ZTlb-kISs>4G*HB zxo^>G-9R0;Y4yheSRoqF`3`wABk&QN5ncHQ+z+MvH_R`tJU_!?xb1w!(uA#mEFmAE zh{ssQlM!oqj67#866YG$iG712ZT7pgJJ_T(gL|lsZZ&M}QA<56zYrCN;lhGuXwDKtAQmr$(SwkJu!@UN83v{LVah(x=)hJs z&kbG^7Q=8&I9bDXxUP$8&NO#djOv;Yy3LS?#h>Lm9-HzhW{n@rbPsyTeL<_2T|0~j zK2Q)<(T@R!>G!h0pim$MUKb1lvAE~9nOxDaDCBe)mocPZSj7lFY|Fl>K<>q!%Vpey zG2ihfHtG0N8P=$ZF&UFezE*W^+tQ%~YFx!tOfdA?!tv#H&Q>dwcuB!EhO7S((6nVb zYo=>dGlvz?a5U3UFwJnep*fn{&{FrevZ*}RjK`W$H4nnLEnh0>^hpB(#={;vX`S-QWv5uPUTsD&ZluUVd!u+9l|G=Q*cwor?|y1)WM0^7dnAj z%#<=48HSNg#-t80lfZ2ipW$;VJc^NFwG~XeXHVJ3Oe;#?&gPC~9`Ld*(h}mkZ4i4k zYB(B~$oe2&XxE}Du5o>(QW3W8)1o_(lsTSV0K;}04byVkYTkF?3#x@v<|J!Vb73qa z5XLILRFF}zhWiZt9&Y@=NoDqh;XHDMOZ9tEGxp70k>ieJX~@sahHDsS31+Df{XQ6i zt7er9^yM@|6x@1QSesItA(}HQTrY7;lk3)I(Am+b+3uOL*sQGjxeVhDje$o$H-k`;|H~c3!C?VWf1UJ-YwrOD4^&8iCQ@ zA!mk5MTb{*^St39r(m0*1b%i@F7IN^ZhM)3qvMO_St=WP!}eQXuXN z!glgPQb%fP)-Z(Sp(SY9=W8vpZDIlssHw}R3rx0k8o#1die^T0cj7hJEAR8yG|JDQ zHkPANZ7Lv-0R@ECo^82kmj zQvB!ySB?<+DZq~Y`RfSlx#-j}W=;_Q4Jnp9#{3Z$I_$+d>;&s+IFea6_t-{`)lV6v#-4!vo57b9eX_+oSdl*zX=cHujGPjirL UErXL3rM(FKZOX*gGOg+P7qgxUt^fc4 literal 0 HcmV?d00001 diff --git a/pitiupi/build/classes/pitiupi/control/PluginLoader.class b/pitiupi/build/classes/pitiupi/control/PluginLoader.class new file mode 100644 index 0000000000000000000000000000000000000000..97ef0bc81a9e1cf6ff13cbdf737b56a92fda7881 GIT binary patch literal 3974 zcmcIn`F9&v75>JS^<-tTDRo*kX;2!c@fx)$3B^iM96N4IWyi#cO%@1aX>3nCo>8Td z8<(X}N(-fIW$VIPmaw#ibdeK>ny|D$DO=fp;CKE34jj&D%=c!oN4CS^7krM#Z@Kr~ zd%yeL`<`F9GCK$0ApROh4Qd4-dc80nmCIYrw{518dK!^+xPUN0($PilrWY*=~wZUxt61K~T4 z^``q4b}|BM6sWFY!%p`YrXIsO1)|`dRf=OZ64Jd53L2WSiw+JtMZ+4)G!G>hN`s1x zxR%~(xtw00+t)WWd$RtSmNu#LY)3C<6Pvw!+>jpmb8XJzVf z1GWgfK}8B%t56%9E;;%n!LrMAqG3U8fWA8PSl1?9``c7BV!ML1W4hBhQnJmmqYr4# zxPof}$K5RWK_;MJhl(aNE4X%2o6x&#E2lZbhBMAl$=|;lIiAE5Br8{Y^ zFy1%eHi0**=s+e&wZG}BWtXXCsg}k*75i~J;nec^CF%G0nQ1;DedttiK*A{qXFoHY zAgy-@93)z9be^?rm#LLX9yaRX-rCRCVU zC5Bp>S4_4?N$=tetbya0TmD8!weuubah{5`z8~;^VnMwRba~ozz`q8 zK7o&tvy0Km9f6N2*s@S~eVRFH7bo@nu_M`oXJvb4qT+ZMpHT5hS+z08_JEGz5yrmr zj8>FM{EUjv;&a^At$azgx+Q$|lhb^HI$d^NXEkLFOYbjFj_Ads+K9=OMApt}=8#r2 zXi=5WWkcR;un)NQ7)Q1&%Y>Kek^oYZm;*`Lj}x!;F($8(kQ>WR9%I>>vJ5)iVze8pp`I=TaPRVrEO%n>RbbgKBN=qG+(e&NaC0W` zG;c;zn;gk&jUntCc{y#XzP7{tCB%^0ybK^Bp8=8;i*47JA>9YQloa+%BKt~<&5ho zB}E_jrm~CEJ7f3}pHJOJDQ8dVMLq9pqzVjL8`C>dN(?_?e~P!ax2F!C)pJD88cT%~ zJO@iD3Q+bX`Y&5Ag{Vufeip~i@e6@hRQwXJD!6emV#AuUC-ijIMU$auqnhg!X-$4F z&Rz}oZePiZ{E%kl`DAL$+V(`buma*Ce5(|Xk`-a`|9#Ul`QLT@7oU4i`X_g3ra8!F zogpN@j^j7@t-$Z(L+UjqY8fOR7reJsPXNlJ|9=>K4xS9bw!&q!G$c0tUdz&pZg?7^JAQC^rZ1Pp5Tmn_ySK=@I{X66i%e6FCoe=kFU9t z$}uk0U&89+iM2CWpKYDRH9!T|^|if>Slis=*zhbiw^nfDEN+q;E$1&GeS8MD^tW|H zl99PRb+vn<4bg_WC()jaG(>lGi1wtYU{?iuD%d+rZ8?3*EV^9v`=iRa`PVL?`*?fp zi|DD~&}C#3{S^$%V5lP^#Um9QPn=3dF5sOVb#kGug8T)H&%$z#kaN2unv7lq8~kI~ zFGte~F5^^(aP3{hdlk&$eV({zc^={-?yZ3wRPezhXCJA-@VWW9b6C?)mG%lgE@LAw z?f5rd=M@@pQ65E-prwf9Rsyq)I5(mV+bPw8-F)u#b9R!m36Af=Ew~4}n7vzhfA7X4 zxQ%(}z%$6OQ|!gxun&LdtNWk0oi@5?r4v_hfIX($&E6^Iv7Z*cjITgYqYYohlN{~F zOZXbT&U`JuOG@GZ;XPt%S_Cb4E)H%fRb8P@zp5z5NaI6;Y_@gIuAR`^-x2NecYoaVc4aP(Uuy8 z)()KIrNUNr(0yQKkVL+`v3t;Ffy>>vXUn z@nQcOt0fGt(PS9>z~(oCm7u9xqz*JurCpuAbCbp{+KE&rrOTwMB=iuENU~0$JVuuo Pdi2(yn?B89!ujMcE_kb@ literal 0 HcmV?d00001 diff --git a/pitiupi/build/classes/pitiupi/net/Socket.class b/pitiupi/build/classes/pitiupi/net/Socket.class new file mode 100644 index 0000000000000000000000000000000000000000..d182b433fead8cece327f740698754dc49c7384e GIT binary patch literal 3474 zcmZ`*`+F0|6+I)%URhqiQEUb0Wf4ef$zVAoBn1V6Ul1jd?OMhZXq&F3vAiJdx~rAJ zv`ybl-|w_Z-*5L#LxaE}rRlrP&+Y%vf1%&kmY&&_WC@(lpEbKPckY~f?!9OBjsLxR z1HcsC2qSZVh1_Jrd6=dr$X2+(7k{Eqa&mIdnAlr z+@T?&<4*Jm^mz!Bzchcw3I#`2Dzq<3cYJNyC`*CFP-YWm&UH+yn2P&Tx9m$Pyipx@ zVW)s*G@M1ZHr8;rzlj2#V8>H|M^4P4y4C4Xp*04v%gLtTo?%Z0%m1RHBj9n~BM_}KZ2kJZZ_U!S^8S4<@ z8WK8&v9}S(?RI-Ia#fZDI;ZC5X66J2Tghy7=o_XqjI;yw2=Bot9@em5$0K-D;I2&~ z{6OlUST!ZPD3ET8WQ$W;LHHSMnPDl~=Z(dZOvM*8JjU8;CMjDjxn|y|xPJA8@m3tv za7afAPY6V}E?#@Q_rs&vEL+QEu01XA;QX?5WX!C@EIU^5`aPDnElcKAbBx4tw&Sdggz*l% zQ^UJ-Jd1a?oZ8}!8CX%yOB9O!w%Vw-GegW_QAb|2S;)2h{?Wkp_iIgsIBB>>(J{)i zhEkp|3Mi^9F0=TD&Wxuw)6^m*DW+G^cUH$aunmG0W=G)O7UtUBvgVX$OL?{_hsv|> z;ypSXWteLu{7i&IZU^OHaxBqT2R(9bdo~ z{nk?qt5%Dj8SlaK__B_#;03Z!Co)UPH;PPkC&^Y^hwwGUb(e;h1Y%yKp0IhMJ8iqi z?5b60mUI~3z&AB~ONs2a8)D&cOD$qXiphq+j%-zWe%WkcPlf$1zNg{)I(~p3HVU!b z(AU$X~A$z z^+bNC^$)Yr@%1F+xI(g~c#bcIbyM|IwkAlteo>`TSV-})RhQRR(%|W=52yfS#rRJ6lnyJLN(lT4ZAMmE#h_T z+q;2e5Q*zJa4PW%v>G12io;iMlrKjklQm2=9-dMU!5W@XBmetrm{~_Odl@Gpr)oIE zac>O%qujj@OBjKLBqjJ^{E8kD^bqCFOZYX+oW*|t^pWDEf z0$9KKkM)}hzn_^0SaiT49(I^HIzq;t#6cWoHpckXGLCr`VuSgET)mFh2(1^B^+*V@ z9%m=!@LMlV#e5$+{)0{pH~x!34FwI){hPT|aff*F03&~q@&B$F@I`u6c^pX8@YQwd zOTApbei`2p!!`WKPje8=9?jJFVm*YY$5fhg8O}b<1D+w!tOq+vry;_j%Pr+5{M2^$mjRgnbP>7d5 zy75?=@%P5>=lAOyz&*wudIFcZvZ~Bgn5Si;bU3fY!=b=vEw?gErB1?^k2S?sz)Q$J z%MA&PgUM{~FRW2InF{nda9i5X%n0~=Uy>vh?rOWCMpP6s;TBiiqT^_?VQX-ap`n=6mj0to@P1dZy-oMn zUu30;=|QDT8Z^yrsz12`0tdV#z~wzSa8d2UYxStrK77s%IOXvF>c|O(wVq& literal 0 HcmV?d00001 diff --git a/pitiupi/dist/README.TXT b/pitiupi/dist/README.TXT new file mode 100644 index 0000000..c336b53 --- /dev/null +++ b/pitiupi/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "pitiupi.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/pitiupi/dist/pitiupi.jar b/pitiupi/dist/pitiupi.jar new file mode 100644 index 0000000000000000000000000000000000000000..85ec1b823a9a5e1d01b01f9f8fec4825a5bc7abc GIT binary patch literal 22983 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pitiupi/nbproject/genfiles.properties b/pitiupi/nbproject/genfiles.properties new file mode 100644 index 0000000..f517d26 --- /dev/null +++ b/pitiupi/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=f8465dc7 +build.xml.script.CRC32=9e28b0e5 +build.xml.stylesheet.CRC32=f85dc8f2@1.119.0.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=f8465dc7 +nbproject/build-impl.xml.script.CRC32=bd3b876a +nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.119.0.48 diff --git a/pitiupi/nbproject/private/config.properties b/pitiupi/nbproject/private/config.properties new file mode 100644 index 0000000..e69de29 diff --git a/pitiupi/nbproject/private/private.properties b/pitiupi/nbproject/private/private.properties new file mode 100644 index 0000000..2a5dca8 --- /dev/null +++ b/pitiupi/nbproject/private/private.properties @@ -0,0 +1,8 @@ +compile.on.save=true +do.depend=false +do.jar=true +do.jlink=false +javac.debug=true +javadoc.preview=true +jlink.strip=false +user.properties.file=/home/flavio/snap/netbeans/145/build.properties diff --git a/pitiupi/nbproject/private/private.xml b/pitiupi/nbproject/private/private.xml new file mode 100644 index 0000000..b64f1b3 --- /dev/null +++ b/pitiupi/nbproject/private/private.xml @@ -0,0 +1,10 @@ + + + + + + file:/home/flavio/NetBeansProjects/pitiupi/src/pitiupi/control/PluginManager.java + file:/home/flavio/NetBeansProjects/pitiupi/src/pitiupi/control/ImageTransformation.java + + + diff --git a/pitiupi/nbproject/project.properties b/pitiupi/nbproject/project.properties new file mode 100644 index 0000000..19c843c --- /dev/null +++ b/pitiupi/nbproject/project.properties @@ -0,0 +1,97 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +application.title=pitiupi +application.vendor=flavio +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.modulepath=\ + ${run.modulepath} +debug.test.classpath=\ + ${run.test.classpath} +debug.test.modulepath=\ + ${run.test.modulepath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/pitiupi.jar +dist.javadoc.dir=${dist.dir}/javadoc +dist.jlink.dir=${dist.dir}/jlink +dist.jlink.output=${dist.jlink.dir}/pitiupi +endorsed.classpath= +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.external.vm=true +javac.modulepath= +javac.processormodulepath= +javac.processorpath=\ + ${javac.classpath} +javac.source=25 +javac.target=25 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.modulepath=\ + ${javac.modulepath} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.html5=false +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +# The jlink additional root modules to resolve +jlink.additionalmodules= +# The jlink additional command line parameters +jlink.additionalparam= +jlink.launcher=true +jlink.launcher.name=pitiupi +main.class=pitiupi.Main +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.modulepath=\ + ${javac.modulepath} +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +run.test.modulepath=\ + ${javac.test.modulepath} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/pitiupi/nbproject/project.xml b/pitiupi/nbproject/project.xml new file mode 100644 index 0000000..f89d919 --- /dev/null +++ b/pitiupi/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + pitiupi + + + + + + + + + diff --git a/pitiupi/plugins/pitiupi.chat.jar b/pitiupi/plugins/pitiupi.chat.jar new file mode 120000 index 0000000..b2c6a32 --- /dev/null +++ b/pitiupi/plugins/pitiupi.chat.jar @@ -0,0 +1 @@ +../../pitiupi.chat/dist/pitiupi.chat.jar \ No newline at end of file diff --git a/pitiupi/plugins/pitiupi.screenCast.jar b/pitiupi/plugins/pitiupi.screenCast.jar new file mode 120000 index 0000000..e6a0dc7 --- /dev/null +++ b/pitiupi/plugins/pitiupi.screenCast.jar @@ -0,0 +1 @@ +../../pitiupi.screenCast/dist/pitiupi.screenCast.jar \ No newline at end of file diff --git a/pitiupi/src/pitiupi/GUI/Login.java b/pitiupi/src/pitiupi/GUI/Login.java new file mode 100644 index 0000000..4c9c61c --- /dev/null +++ b/pitiupi/src/pitiupi/GUI/Login.java @@ -0,0 +1,102 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.GUI; + +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; + +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import javax.swing.JTextField; + +/** + * + * @author flavio + */ +public final class Login extends JDialog { + + JLabel nameLabel = new JLabel("Name: "); + JLabel portLabel = new JLabel("Port: "); + + JTextField nameField = new JTextField(); + JSpinner portField = new JSpinner(); + + JButton okButton = new JButton("OK"); + JButton cancelButton = new JButton("Cancel"); + + public Login() { + initComponents(); + this.setSize(400, 150); + this.setModal(true); + } + + public void initComponents() { + this.setTitle("Login"); + + portField.setModel(new javax.swing.SpinnerNumberModel(8000, 8000, 9000, 1)); + nameField.setText(System.getProperty("user.name")); + + JPanel topPanel = new JPanel(new GridBagLayout()); + JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + + buttonPanel.add(okButton); + buttonPanel.add(cancelButton); + + GridBagConstraints gbc = new GridBagConstraints(); + + gbc.insets = new Insets(4, 4, 4, 4); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 0; + topPanel.add(nameLabel, gbc); + + gbc.gridx = 1; + gbc.gridy = 0; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.weightx = 1; + topPanel.add(nameField, gbc); + + gbc.gridx = 0; + gbc.gridy = 1; + gbc.fill = GridBagConstraints.NONE; + gbc.weightx = 0; + topPanel.add(portLabel, gbc); + + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.gridx = 1; + gbc.gridy = 1; + gbc.weightx = 1; + topPanel.add(portField, gbc); + + this.add(topPanel); + this.add(buttonPanel, BorderLayout.SOUTH); + + okButton.addActionListener((ActionEvent e) -> { + Login.this.setVisible(false); + }); + + cancelButton.addActionListener((ActionEvent e) -> { + System.exit(0); + }); + } + + @Override + public String getName() { + return nameField.getText(); + } + + public int getPort() { + return ((Integer) portField.getValue()); + } +} diff --git a/pitiupi/src/pitiupi/GUI/MainWindow.java b/pitiupi/src/pitiupi/GUI/MainWindow.java new file mode 100644 index 0000000..bcd03fe --- /dev/null +++ b/pitiupi/src/pitiupi/GUI/MainWindow.java @@ -0,0 +1,98 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.GUI; + +import pitiupi.net.Socket; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JMenu; +import pitiupi.control.PluginLoader; +import pitiupi.plugin.Plugin; + +/** + * + * @author flavio + */ +public class MainWindow extends javax.swing.JFrame { + + private final MenuBar menuBar; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JLabel status; + private javax.swing.JPanel statusPanel; + private javax.swing.JTabbedPane tabbedPane; + + private Socket socket; + + private final String userName; + private final int port; + + private PluginLoader pluginManager; + private final List plugins; + + + public MainWindow(String userName, int port) { + this.userName = userName; + this.port = port; + this.menuBar = new MenuBar(this); + this.plugins = new ArrayList<>(); + this.initComponents(); + } + + private void initComponents() { + this.setJMenuBar(menuBar); + this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + this.setTitle("Share My Sheet"); + + jScrollPane1 = new javax.swing.JScrollPane(); + tabbedPane = new javax.swing.JTabbedPane(); + statusPanel = new javax.swing.JPanel(); + status = new javax.swing.JLabel(); + + jScrollPane1.setViewportView(tabbedPane); + statusPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT)); + status.setText("Connected on port " + this.port + " name " + this.userName); + statusPanel.add(status); + + this.getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER); + this.getContentPane().add(statusPanel, java.awt.BorderLayout.PAGE_END); + + this.pack(); + + this.socket = new Socket(this); + this.socket.start(); + + this.setSize(new java.awt.Dimension(1024, 768)); + this.pluginManager = new PluginLoader(this); + this.pluginManager.loadPlugins(); + } + + + public void exit() { + this.setVisible(false); + this.dispose(); + System.exit(0); + } + + public String getUserName(){ + return this.userName; + } + + public void addMenu(JMenu menu) { + this.menuBar.addPlugin(menu); + } + + public int getPort() { + return this.port; + } + + public Socket getSocket() { + return this.socket; + } + + public List getPlugins() { + return plugins; + } +} diff --git a/pitiupi/src/pitiupi/GUI/MenuBar.java b/pitiupi/src/pitiupi/GUI/MenuBar.java new file mode 100644 index 0000000..2a7e1b1 --- /dev/null +++ b/pitiupi/src/pitiupi/GUI/MenuBar.java @@ -0,0 +1,68 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.GUI; + +import javax.swing.JMenu; +import javax.swing.JMenuBar; + +/** + * + * @author flavio + */ +public class MenuBar extends JMenuBar { + + private javax.swing.JMenuItem setupMenu; + private javax.swing.JMenu fileMenu; + private javax.swing.JMenu helpMenu; + private javax.swing.JMenu pluginMenu; + private javax.swing.JMenuItem exitMenu; + private final MainWindow mainWindow; + + public MenuBar(MainWindow mainWindow) { + this.mainWindow = mainWindow; + this.initComponents(); + } + + 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(); + + fileMenu.setText("File"); + exitMenu.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, java.awt.event.InputEvent.ALT_MASK)); + exitMenu.setText("Exit"); + exitMenu.addActionListener(this::exitMenuActionPerformed); + fileMenu.add(exitMenu); + this.add(fileMenu); + + pluginMenu.setText("Plugin"); + this.add(pluginMenu); + + helpMenu.setText("Help"); + setupMenu.setText("Preferences"); + setupMenu.addActionListener(this::setupMenuActionPerformed); + helpMenu.add(setupMenu); + this.add(helpMenu); + } + + + + private void exitMenuActionPerformed(java.awt.event.ActionEvent evt) { + mainWindow.exit(); + } + + private void setupMenuActionPerformed(java.awt.event.ActionEvent evt) { + Login login = new Login(); + login.setVisible(true); + login.dispose(); + } + + public void addPlugin(JMenu menu){ + this.pluginMenu.add(menu); + } +} diff --git a/pitiupi/src/pitiupi/Main.java b/pitiupi/src/pitiupi/Main.java new file mode 100644 index 0000000..297b61a --- /dev/null +++ b/pitiupi/src/pitiupi/Main.java @@ -0,0 +1,56 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi; + +import java.net.UnknownHostException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author flavio + */ +public class Main { + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + /* Set the Nimbus look and feel */ + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(pitiupi.GUI.MainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(pitiupi.GUI.MainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(pitiupi.GUI.MainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(pitiupi.GUI.MainWindow.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + + /* Create and display the form */ + java.awt.EventQueue.invokeLater(new Runnable() { + @Override + public void run() { + pitiupi.GUI.MainWindow main; + main = new pitiupi.GUI.MainWindow(System.getProperty("user.name"), 8000); + main.setVisible(true); + } + }); + } + +} diff --git a/pitiupi/src/pitiupi/control/PluginLoader.java b/pitiupi/src/pitiupi/control/PluginLoader.java new file mode 100644 index 0000000..386724a --- /dev/null +++ b/pitiupi/src/pitiupi/control/PluginLoader.java @@ -0,0 +1,69 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package pitiupi.control; + +import java.awt.List; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.ServiceLoader; +import java.util.Vector; +import pitiupi.GUI.MainWindow; +import pitiupi.Main; +import pitiupi.plugin.Plugin; + +/** + * + * @author flavio + */ +public class PluginLoader { + + private final pitiupi.GUI.MainWindow mainWindow; + + public PluginLoader(MainWindow main) { + this.mainWindow = main; + } + + public void loadPlugins() { + 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; + } + + try { + // 2. Convert jar file paths into URLs + ArrayList urls = new ArrayList(); + for (File file : jarFiles) { + urls.add(file.toURI().toURL()); + System.out.println("Discovered plugin package: " + file.getName()); + } + + // 3. Create a class loader isolated from the application's default loader + URLClassLoader pluginClassLoader = new URLClassLoader( + (URL[])urls.toArray(new URL[0]), + Main.class.getClassLoader() + ); + System.out.println(pluginClassLoader); + + // 4. Locate and instantiate all classes implementing the Plugin interface + ServiceLoader serviceLoader = ServiceLoader.load(Plugin.class, pluginClassLoader); + + System.out.println("\n--- Executing Discovered Plugins ---" + serviceLoader.findFirst()); + for (Plugin plugin : serviceLoader) { + System.out.println("Loading: " + plugin.getName()); + plugin.createPlugin(this.mainWindow); + this.mainWindow.getPlugins().add(plugin); + } + + } catch (MalformedURLException e) { + System.out.println(e.toString()); + } + } +} diff --git a/pitiupi/src/pitiupi/net/Message.java b/pitiupi/src/pitiupi/net/Message.java new file mode 100644 index 0000000..3b5966b --- /dev/null +++ b/pitiupi/src/pitiupi/net/Message.java @@ -0,0 +1,27 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.net; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutput; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +/** + * + * @author flavio + */ +public abstract class Message implements Serializable{ + + public byte[] toByteArray() throws IOException { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutput out = new ObjectOutputStream(baos); + out.writeObject(this); + out.flush(); + return baos.toByteArray(); + } +} diff --git a/pitiupi/src/pitiupi/net/Socket.java b/pitiupi/src/pitiupi/net/Socket.java new file mode 100644 index 0000000..8710697 --- /dev/null +++ b/pitiupi/src/pitiupi/net/Socket.java @@ -0,0 +1,78 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package pitiupi.net; + +import pitiupi.GUI.MainWindow; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectInputStream; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; +import java.net.UnknownHostException; +import java.util.logging.Level; +import java.util.logging.Logger; +import pitiupi.plugin.Plugin; + +/** + * + * @author flavio + */ +public class Socket extends Thread { + + private MulticastSocket multicastSocket; + private InetAddress address; + private MainWindow main; + public final static String INET_ADDR = "224.0.0.3"; + + public Socket(MainWindow main) { + this.main = main; + try { + this.address = InetAddress.getByName(Socket.INET_ADDR); + } catch (UnknownHostException ex) { + System.getLogger(Socket.class.getName()).log(System.Logger.Level.ERROR, (String) null, ex); + } + try { + multicastSocket = new MulticastSocket(this.main.getPort()); + multicastSocket.setSendBufferSize(256000); + multicastSocket.setReceiveBufferSize(256000); + multicastSocket.setReuseAddress(true); + multicastSocket.joinGroup(address); + } catch (IOException ex) { + System.out.println("There is no socket connection. Sorry."); + System.out.println(ex.toString()); + } + } + + public void send(byte[] msg) throws IOException { + DatagramPacket msgPacket; + msgPacket = new DatagramPacket(msg, msg.length, this.address, this.main.getPort()); + multicastSocket.send(msgPacket); + } + + public void receive() throws UnknownHostException, IOException, ClassNotFoundException { + byte[] buf = new byte[256000]; + while (true) { + // Receive the information and print it. + DatagramPacket msgPacket = new DatagramPacket(buf, buf.length); + multicastSocket.receive(msgPacket); + for (Plugin plugin : main.getPlugins()) { + System.out.println(msgPacket.getAddress().toString()); + plugin.receiveMessage(msgPacket.getData()); + } + } + } + + @Override + public void run() { + try { + this.receive(); + } catch (IOException | ClassNotFoundException ex) { + Logger.getLogger(Socket.class.getName()).log(Level.SEVERE, null, ex); + } + } +} diff --git a/pitiupi/src/pitiupi/plugin/Plugin.java b/pitiupi/src/pitiupi/plugin/Plugin.java new file mode 100644 index 0000000..7a6b711 --- /dev/null +++ b/pitiupi/src/pitiupi/plugin/Plugin.java @@ -0,0 +1,23 @@ +/* + * 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.plugin; + +import javax.swing.JMenu; +import pitiupi.GUI.MainWindow; +import pitiupi.net.Message; + +/** + * + * @author flavio + */ +public interface Plugin { + + public String getName(); + public String getAuthor(); + public String getVersion(); + public void createPlugin(MainWindow window); + public Message getMessage(); + public void receiveMessage(byte[] message); +} \ No newline at end of file