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>
2.1 KiB
2.1 KiB
Sistema de plugins
O sistema de plugins permite extensão modular sem alterar o núcleo. O contrato
está em pitiupi.models.Plugin (classe abstrata).
Interface Plugin
Métodos obrigatórios:
| Método | Função |
|---|---|
getName(), getAuthor(), getVersion(), getIdentifier() |
Identificação (o identifier distingue plugins em conexões TCP dedicadas) |
createPlugin(ConnectionManager, GuiManager) |
Inicialização: menus, janelas, uso da rede |
getMessages() |
Lista de classes Message que o plugin desserializa |
receiveMessage(Message) |
Processamento após o PluginManager identificar o tipo |
Métodos opcionais (TCP avançado):
| Método | Função |
|---|---|
receiveAllTypes() |
Receber todas as mensagens públicas |
receivePrivateConnection(TcpConnection) |
Aceitar conexão TCP direcionada ao plugin |
receiveBytes(TcpConnection, byte[]) |
Ler payload bruto na conexão privada |
onSocketClosed(TcpConnection) |
Limpar estado ao fechar socket |
Descoberta de plugins
Para serem reconhecidos, os plugins devem possuir os arquivos de configuração do Java Service Provider Interface (SPI):
MeusPlugins
|
+---META-INF
|
+---services
|
+---pitiupi.models.Plugin
O arquivo pitiupi.models.Plugin deve conter o nome completo das classes que
implementam a interface Plugin:
MeusPlugins.plugins.NomeDaClasse
Para serem carregados, os plugins devem estar empacotados como arquivos JAR e colocados no diretório plugins da aplicação.
Carregamento de plugins
O PluginManager.loadPlugins() (chamado pela MainWindow):
- Lista arquivos
.jarempitiupi/plugins/(diretório de trabalho = pasta do núcleo). - Para cada JAR, cria um
URLClassLoadere usaServiceLoader.load(Plugin.class, classLoader). - Chama
createPlugin(connectionManager, guiManager)em cada instância. - Na recepção UDP/TCP, tenta desserializar com
PluginObjectInputStreame despacha para plugins que declararam o tipo emgetMessages().
Implementação: pitiupi/src/pitiupi/control/plugins/PluginManager.java.