Pular para conteúdo

PawnPro Core

Núcleo em Rust do PawnPro. Hospeda os subsistemas que a extensão usava como processos separados — a engine (LSP) e o depurador (DAP) — e concentra as operações que dependem do sistema operacional.

Por que existe

A extensão em TypeScript comandava processos que não possuía: descobria quem ocupava uma porta, decidia se um processo era do projeto e o encerrava, tudo por sinais indiretos. Cada operação dessas tinha uma implementação por sistema (lsof, /proc, ps, netstat, taskkill), escrita à mão e difícil de testar.

O core inverte isso: quem possui o processo é quem responde sobre ele.

Estrutura

Crate Responsabilidade
crates/core O binário pawnpro-core: JSON-RPC com a extensão, supervisor, soquete e tudo que depende do sistema operacional
crates/engine Análise de Pawn e LSP, como biblioteca
crates/debugger/adapter Adaptador DAP, como biblioteca
crates/debugger/protocol O protocolo entre o adaptador e o plugin
crates/debugger/plugin O plugin do servidor (pawnpro_debug.so / .dll), de 32 bits

Uma crate por peça arquitetural. Responsabilidades internas — RCON, processos, portas — são módulos da crate a que pertencem (core/src/server/), não crates próprias: multiplicar crates para cada função criaria fronteiras sem separar nada.

Crates separados, um binário só. A separação não é cosmética: o Cargo.toml de cada um impede acoplamento acidental, e é o que permite um subsistema cair sem levar os outros junto.

Por onde começar

Página O que responde
Arquitetura As peças, o soquete único e por que o desenho é assim
O contrato com a extensão Os métodos JSON-RPC e o que é do núcleo
Configuração e projeto Escopos, listas de nomes, includes e o compilador
O servidor do jogo Executável, portas, processos, log e RCON
A engine Unidade de compilação, cache, diagnósticos e formatação
Depuração Adaptador, plugin e o que acontece numa sessão
Supervisão Como um subsistema cai e volta sem levar o resto
Dependências e build O que cada dependência resolve, o perfil de release e as licenças

Estado

O núcleo concentra o RCON, os processos, as portas, o compilador, a configuração e o estado do projeto, e hospeda a engine e o adaptador de depuração num soquete local que ele supervisiona. A depuração é instável: funciona no uso descrito na documentação da extensão, mas ainda pode falhar.

Ver Arquitetura e Supervisão.