Files
pitiupi/docs/documentation/10_tutorial_plugin.md
T
Gabriel Felipe Souza SantosandCursor f02acaf131 Consolida documentação e plugins de referência ao núcleo atual.
Alinha mpChat e screenCast a ConnectionManager/GuiManager, adiciona docs em docs/ e README de plugins; remove artefatos de build do índice.

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

2.1 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. Build e instalação

cd pitiupi.meuPlugin && ant jar
ln -sf ../../pitiupi.meuPlugin/dist/*.jar ../pitiupi/plugins/

Reinicie o Pitiupi após trocar JARs.

6. 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