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

110 lines
2.8 KiB
Markdown

# Tutorial — criar um plugin
Este guia complementa [09_sistema_de_plugins.md](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
```java
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
```java
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:
```java
guiManager.createMenu(MenuCategory.Jogos, new MeuMenu(...));
```
## 6. Registrar no catálogo
Adicione uma entrada em [`plugins.registry.json`](../../plugins.registry.json) na raiz do repo:
```json
{
"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
```bash
./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](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](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](appendix_portas_e_multicast.md) |