Agente Windows multi-instância para SmartPedido, substituindo a implementação em PowerShell.
src/AgentService: Worker Service (.NET 8) executado como Windows Servicesrc/AgentConfigApp: App WinForms para configuração por instânciainstaller/SmartPedidoAgent.iss: instalador Inno Setup
- Multi-instância real:
SmartPedidoAgent-KitchenSmartPedidoAgent-Cashier
- Configuração segregada por instância:
C:\ProgramData\SmartPedido\kitchen\config.jsonC:\ProgramData\SmartPedido\cashier\config.json
- Poll de rotas:
- Kitchen:
GET /api/agent/orders?status=PRINTING - Cashier:
GET /api/agent/print-jobs?status=QUEUED&type=CASHIER_TABLE_SUMMARY
- Kitchen:
- Header obrigatório:
x-agent-token - Modo de impressão:
pdf(SumatraPDF silencioso embutido emsumatrapdf/SumatraPDF.exe)escpos:usbRaw(Win32WritePrinter)tcp9100(socket)
- Idempotência local por instância (SQLite) com retenção de 7 dias
- Só marca impresso após sucesso real de impressão
- Retries HTTP exponenciais (Polly)
- Logs rolling (Serilog) por instância
{
"apiBaseUrl": "https://api.smartpedido.com",
"agentToken": "token-da-instancia",
"agentType": "kitchen",
"printMode": "pdf",
"printerName": "EPSON TM-T20",
"escposTransport": "usbRaw",
"ip": "192.168.1.100",
"port": 9100,
"pollIntervalMs": 5000
}Pré-requisitos:
- Windows 10/11 ou Windows Server
- .NET SDK 8
- Inno Setup 6 (para gerar instalador)
dotnet restore SmartPedidoAgent.sln
dotnet build SmartPedidoAgent.sln -c Releasedotnet publish .\src\AgentService\AgentService.csproj -c Release -r win-x64 -o .\publish\AgentService --self-contained false
dotnet publish .\src\AgentConfigApp\AgentConfigApp.csproj -c Release -r win-x64 -o .\publish\AgentConfigApp --self-contained falseCopie
SumatraPDF.exeparapublish\AgentService\sumatrapdf\SumatraPDF.exe.
- Gere instalador com Inno Setup usando
installer/SmartPedidoAgent.iss. - Execute o setup como administrador.
- Escolha: Kitchen, Cashier ou Ambos.
- O setup cria:
- pastas em
C:\ProgramData\SmartPedido\{kitchen|cashier} - serviços Windows conforme seleção
- atalhos de configuração para cada instância
- pastas em
A GUI abre com elevação administrativa automaticamente e permite:
- selecionar instância (
kitchen/cashier) - editar
API Base URL,Token,Tipo,Modo,Impressora,IP/Porta,Intervalo - listar impressoras instaladas
SalvarTestar conexãoReiniciar serviçoAbrir pasta de logs
- Kitchen:
C:\ProgramData\SmartPedido\kitchen\logs\agent-YYYYMMDD.log - Cashier:
C:\ProgramData\SmartPedido\cashier\logs\agent-YYYYMMDD.log
- 401/403
- validar token da instância
- confirmar header
x-agent-token
- Nada imprime em PDF
- validar existência de
sumatrapdf\SumatraPDF.exe - conferir nome exato da impressora
- validar existência de
- ESC/POS tcp9100 falha
- testar conectividade TCP para IP/porta da impressora
- Duplicidade
- verificar
state.dbda instância e se API não reenvia IDs diferentes para o mesmo pedido
- verificar
- Serviço não sobe
- validar permissões de pasta em
ProgramData - checar Event Viewer e logs do agente
- validar permissões de pasta em
sc query SmartPedidoAgent-Kitchen
sc query SmartPedidoAgent-Cashier
sc stop SmartPedidoAgent-Kitchen
sc start SmartPedidoAgent-Kitchen
sc stop SmartPedidoAgent-Cashier
sc start SmartPedidoAgent-Cashier