Files
live/edge-agent/start-edge.ps1
T

85 lines
2.7 KiB
PowerShell

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
}
}