# Espera o AMo.exe FECHAR e ABRIR de novo, e injeta 1,5s depois de abrir.
#
# Por que precisa fechar: injetar num processo ja rodando so pega SEND. O client posta os
# WSARecv no IOCP quando conecta; se o hook chega depois, as completions dessas operacoes
# nunca passam pelo pending_add e o RECV inteiro se perde. Ja aconteceu duas vezes (23/08).
$ErrorActionPreference = 'Continue'

if (Test-Path 'C:\RoshHook\traffic.log') {
    $carimbo = Get-Date -Format 'HHmm'
    Move-Item 'C:\RoshHook\traffic.log' "C:\RoshHook\traffic_soSEND_$carimbo.log" -Force
}

Write-Host 'FECHE o jogo agora. Estou esperando o AMo.exe sair...'
$limite = (Get-Date).AddMinutes(5)
while ((Get-Date) -lt $limite) {
    if (-not (Get-Process AMo -ErrorAction SilentlyContinue)) { break }
    Start-Sleep -Milliseconds 300
}
if (Get-Process AMo -ErrorAction SilentlyContinue) { Write-Host 'o jogo nao fechou em 5 min.'; exit 1 }
Write-Host 'jogo fechado. Agora ABRA de novo -- injeto sozinho.' -ForegroundColor Cyan

$limite = (Get-Date).AddMinutes(5)
$amo = $null
while ((Get-Date) -lt $limite) {
    $amo = Get-Process AMo -ErrorAction SilentlyContinue
    if ($amo) { break }
    Start-Sleep -Milliseconds 300
}
if (-not $amo) { Write-Host 'o jogo nao abriu em 5 min.'; exit 1 }

Write-Host "AMo.exe apareceu (PID $($amo.Id)). Injetando em 1,5s..."
Start-Sleep -Milliseconds 1500
& 'D:\RoshEmulator\tools\hook\injector.exe' | Out-Null

Write-Host 'conferindo se o RECV esta sendo gravado (ate 120s)...'
$ate = (Get-Date).AddSeconds(120)
while ((Get-Date) -lt $ate) {
    if ((Test-Path 'C:\RoshHook\traffic.log') -and
        (Select-String -Path 'C:\RoshHook\traffic.log' -Pattern '\] RECV sock=' -CaseSensitive -Quiet)) {
        Write-Host 'OK: RECV confirmado. Pode logar, entrar com o tess e abrir a ficha.' -ForegroundColor Green
        exit 0
    }
    Start-Sleep -Seconds 2
}
Write-Host 'ATENCAO: so SEND de novo. Feche e rode outra vez.' -ForegroundColor Yellow
exit 2
