diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/libraries/pitiupi.xml b/.idea/libraries/pitiupi.xml new file mode 100644 index 0000000..4207ae9 --- /dev/null +++ b/.idea/libraries/pitiupi.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/pitiupi_chat.xml b/.idea/libraries/pitiupi_chat.xml new file mode 100644 index 0000000..a84f0a3 --- /dev/null +++ b/.idea/libraries/pitiupi_chat.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/pitiupi_screenCast.xml b/.idea/libraries/pitiupi_screenCast.xml new file mode 100644 index 0000000..410fe64 --- /dev/null +++ b/.idea/libraries/pitiupi_screenCast.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/plugins.xml b/.idea/libraries/plugins.xml new file mode 100644 index 0000000..5d318c9 --- /dev/null +++ b/.idea/libraries/plugins.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b1566b1 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..b6bf55e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/pitiupi.iml b/.idea/pitiupi.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/pitiupi.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pitiupi.chat/nbproject/project.properties b/pitiupi.chat/nbproject/project.properties index b87aa66..6f8cc9a 100644 --- a/pitiupi.chat/nbproject/project.properties +++ b/pitiupi.chat/nbproject/project.properties @@ -47,8 +47,8 @@ javac.modulepath= javac.processormodulepath= javac.processorpath=\ ${javac.classpath} -javac.source=25 -javac.target=25 +javac.source=17 +javac.target=17 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/pitiupi.testSocket/.idea/.gitignore b/pitiupi.testSocket/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/pitiupi.testSocket/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/pitiupi.testSocket/.idea/misc.xml b/pitiupi.testSocket/.idea/misc.xml new file mode 100644 index 0000000..07115cd --- /dev/null +++ b/pitiupi.testSocket/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pitiupi.testSocket/.idea/modules.xml b/pitiupi.testSocket/.idea/modules.xml new file mode 100644 index 0000000..83d481a --- /dev/null +++ b/pitiupi.testSocket/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/pitiupi.testSocket/.idea/vcs.xml b/pitiupi.testSocket/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/pitiupi.testSocket/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pitiupi/docs/PluginTutorial.md b/pitiupi/docs/PluginTutorial.md index 0e3026b..9734902 100644 --- a/pitiupi/docs/PluginTutorial.md +++ b/pitiupi/docs/PluginTutorial.md @@ -1,42 +1,92 @@ # Como criar plugins para o Pitiupi -Aqui será discutido os métodos e classes que um desenvolvedor pode ou deve usar para criar um plugin para a plataforma Pitiupi. +Aqui serão discutidos os métodos e classes que um desenvolvedor pode ou deve usar para criar um plugin para a plataforma Pitiupi. Alguns deles estarão marcados com um [REF], isso indica que eles estão sendo alterados para a versão 3.0 e deixarão de existir ou vão mudar consideravelmente. ## GUI -O pitiupi é feito usando a biblioteca Swing do Java, por isso é altamente recomendado que os plugins também a utilizem na hora de criar sua interface gráfica, porém não é obrigatório. +O Pitiupi é feito usando a biblioteca Swing do Java, por isso é altamente recomendado que os plugins também a utilizem na hora de criar sua interface gráfica, porém não é obrigatório. + +## Como tornar o seu plugin visível para o Pitiupi + +A busca por plugins é realizada em três etapas pelo pitiupi: + +1. Encontra todos os jars em `plugins`. +2. Verifica o `META-INF` dos jars para saber onde estão as implementações da classe `Plugin`. +3. Carrega o plugin no sistema. + +Em relação ao `META-INF`, ele deve conter um diretório `resources` e dentro dele um arquivo contendo o nome completamente qualificado da classe `Plugin` do pitiupi: `pitiupi.models.Plugin`, por fim dentro desse arquivo você deve colocar o nome completamente qualificado de todas as classes que implementam `Plugin` do seu projeto, um em cada linha. + +``` +build/ + |---->META-INF/resources/pitiupi.models.Plugin + |---->MeusPlugins/... + |---->MinhasMensagens/... + |---->Restante dos .class +``` + + +``` +src/MeusPlugins/MeuPrimeiroPlugin +src/MeusPlugins/MeuSegundoPlugin +... +``` + +### Dicas + +- Faça um makefile que automaticamente mova o META-INF para o build/ quando você compilar uma nova versão caso ele esteja sendo alterado com frequência. +Ex: +``` +JAR = ../pitiupi/dist/pitiupi.jar +BUILD_DIR = build +META-INF_DIR = src/META-INF +DIST = dist/mpChat.jar + +SOURCES = $(shell find -name "*.java") + +all: + mkdir -p "$(BUILD_DIR)" + mkdir -p "$(dir $(DIST))" + javac -cp "$(JAR)" -d "$(BUILD_DIR)" $(SOURCES) + cp -r "$(META-INF_DIR)" "$(BUILD_DIR)" + jar cf "$(DIST)" -C "$(BUILD_DIR)" . + +clean: + rm -rf "$(BUILD_DIR)"/* +``` + +- Para a versão 3.0 será necessário fazer o mesmo processo para as implementações da classe `Message`, então se quiser deixar preparado para a nova versão adicione `pitiupi.models.Messages.Message` em `resources` e coloque nele todas suas implementações de `Message`, assim como você fez para os de `Plugin`. ## Pitiupi A classe `Pitiupi` é a interface que o seu plugin vai receber quando for criado, ela fornece os métodos necessários para interagir com a interface gráfica e comunicação para outros peers. -### sendUdpMulticast(Message message) +### boolean sendUdpMulticast(Message message) Envia uma mensagem multicast, retorna `boolean` indicando se teve sucesso. -### sendUdpUnicast(Message message, InetAddress address) +### boolean sendUdpUnicast(Message message, InetAddress address) Envia uma mensagem unicast via udp para o endereço fornecido, retorna `boolean` indicando se teve sucesso. -### sendTcp(Message message, InetAddress address) +### boolean sendTcp(Message message, InetAddress address) Envia uma mensagem unicast via tcp para o endereço fornecido, retorna `boolean` indicando se teve sucesso. -### [REF] connectTcp(InetAddress address, String senderId, String receiverId) +### [REF] TcpConnection connectTcp(InetAddress address, String senderId, String receiverId) Pede uma conexão tcp privada para o seu plugin com outro usuário, para utilizar essa funcionalidade é necessário implementar alguns métodos opcionais em Plugin. Maisinformações serão discutidas na seção TcpConnection. -### getUserName() +### String getUserName() Retorna o nome do usuário conectado -### getPort() +### int getPort() Retorna a porta que o usuário está usando o Pitiupi -### createMenu(MenuCategory category, Menu menu) +### void createMenu(MenuCategory category, Menu menu) Adiciona um menu ao pitiupi, category define em qual das categoria de Menus ele será adicionado: Jogos, Social, Streaming.