Files
pitiupi/docs/documentation/10_tutorial_plugin.md
T
Gabriel Felipe Souza SantosandCursor b10c196fc9 Adiciona catálogo de plugins e script único de build/run.
plugins.registry.json e scripts/pitiupi.sh substituem lista fixa de módulos; screen cast em MenuCategory.Streaming; README e docs atualizados.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-13 21:29:55 -03:00

2.8 KiB

Tutorial — criar um plugin

Este guia complementa 09_sistema_de_plugins.md. Use pitiupi.chat como modelo.

1. Novo projeto

  • Copie a pasta pitiupi.chat para pitiupi.meuPlugin (nome à escolha).
  • Ajuste project.properties / build.xml com o nome do JAR de saída.
  • Mantenha javac.classpath apontando para ../pitiupi/dist/pitiupi.jar.

2. Classe principal

public class MeuPlugin extends Plugin {
    @Override
    public void createPlugin(ConnectionManager cm, GuiManager gui) {
        // registrar menus, abrir janelas
    }

    @Override
    public List<Class<? extends Message>> getMessages() {
        return List.of(MinhaMessage.class);
    }

    @Override
    public void receiveMessage(Message message) {
        if (message instanceof MinhaMessage m) { /* ... */ }
    }

    // getName, getAuthor, getVersion, getIdentifier
}

3. Mensagem

public class MinhaMessage extends Message implements Serializable {
    // campos + serialVersionUID recomendado
}

Envio típico via ConnectionManager (multicast ou unicast UDP, ou TCP conforme o caso).

4. Service Provider Interface

Arquivo src/META-INF/services/pitiupi.models.Plugin:

pacote.MeuPlugin

5. Categoria no menu

Escolha onde o plugin aparece na barra Plugin:

MenuCategory Uso
Social Chat, presença
Jogos Jogos entre peers
Streaming Screen cast, mídia

Exemplo:

guiManager.createMenu(MenuCategory.Jogos, new MeuMenu(...));

Adicione uma entrada em plugins.registry.json na raiz do repo:

{
  "id": "xadrez",
  "dir": "pitiupi.xadrez",
  "build": "ant",
  "jar": "dist/pitiupi.xadrez.jar",
  "menuCategory": "Jogos"
}

O id é o que você passa para ./scripts/pitiupi.sh run --plugins xadrez.

7. Build e instalação

./scripts/pitiupi.sh build --plugins xadrez
# ou, manualmente:
cd pitiupi.xadrez && ant jar
ln -sf ../../pitiupi.xadrez/dist/pitiupi.xadrez.jar ../pitiupi/plugins/xadrez.jar

Reinicie o Pitiupi após trocar JARs.

8. Teste

Duas instâncias, mesma rede, portas distintas se no mesmo host. Ver 00_quickstart.md.

TCP dedicado (avançado)

Se o plugin precisa de canal TCP com handshake por getIdentifier(), estude pitiupi.mpChat e os métodos opcionais em Plugin (receivePrivateConnection, receiveBytes). Ver 11_plugins_referencia.md.

Erros frequentes

Problema Causa provável
Plugin não aparece SPI ausente ou JAR fora de plugins/
ClassNotFoundException na recepção Classe da mensagem não no JAR do remetente/destino
Peers não se veem Multicast bloqueado — appendix_portas_e_multicast.md