param( [string]$OriginUrl = "http://127.0.0.1:8080", [string]$NodeId = "", [string]$Region = "default", [int]$HlsPort = 8889, [int]$ApiPort = 9997, [int]$Weight = 100, [string]$DataDir = "", [string]$ExePath = "", [switch]$Build, [switch]$NoWait ) $ErrorActionPreference = "Stop" $Base = Split-Path -Parent $MyInvocation.MyCommand.Path if (-not $NodeId) { $NodeId = $env:COMPUTERNAME } if (-not $NodeId) { $NodeId = "windows-edge" } if (-not $DataDir) { $DataDir = Join-Path $env:ProgramData ("StreamCore\edge\" + $NodeId) } $LogDir = Join-Path $DataDir "logs" New-Item -ItemType Directory -Force -Path $DataDir, $LogDir | Out-Null function Assert-Command($Name, $Hint) { if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) { throw "$Name not found. $Hint" } } if ($Build) { Assert-Command "go" "Install Go 1.19+ and make go.exe available in PATH." Write-Host "[StreamCore Edge] Building Windows edge agent..." & (Join-Path $Base "build.ps1") } $exeCandidates = @() if ($ExePath) { $exeCandidates += $ExePath } $exeCandidates += (Join-Path $Base "dist\streamcore-edge-windows-amd64.exe") $exeCandidates += (Join-Path $Base "streamcore-edge.exe") $ResolvedExe = $null foreach ($candidate in $exeCandidates) { if ($candidate -and (Test-Path $candidate)) { $ResolvedExe = (Resolve-Path $candidate).Path break } } if (-not $ResolvedExe) { throw "Windows edge agent executable not found. Run: powershell -ExecutionPolicy Bypass -File .\edge-agent\start-edge.ps1 -Build" } $env:STREAMCORE_ORIGIN_URL = $OriginUrl $env:STREAMCORE_NODE_ID = $NodeId $env:STREAMCORE_REGION = $Region $env:STREAMCORE_HLS_PORT = "$HlsPort" $env:STREAMCORE_API_PORT = "$ApiPort" $env:STREAMCORE_WEIGHT = "$Weight" $env:STREAMCORE_DATA_DIR = $DataDir Write-Host "[StreamCore Edge] Starting Windows edge node..." Write-Host " Node ID: $NodeId" Write-Host " Region: $Region" Write-Host " Origin: $OriginUrl" Write-Host " HLS: http://127.0.0.1:$HlsPort/" Write-Host " API: http://127.0.0.1:$ApiPort/" Write-Host " Data dir: $DataDir" Write-Host " Logs: $LogDir" $process = Start-Process -FilePath $ResolvedExe -WorkingDirectory $Base -PassThru -RedirectStandardOutput (Join-Path $LogDir "edge-agent.out.log") -RedirectStandardError (Join-Path $LogDir "edge-agent.err.log") Write-Host "[StreamCore Edge] Process started with PID $($process.Id)." if ($NoWait) { return } Write-Host "Press Ctrl+C to stop the edge node." try { while (-not $process.HasExited) { Start-Sleep -Seconds 2 } exit $process.ExitCode } finally { if (-not $process.HasExited) { Write-Host "[StreamCore Edge] Stopping edge node..." Stop-Process -Id $process.Id -Force -ErrorAction SilentlyContinue } }