aboutsummaryrefslogtreecommitdiffstats
path: root/run_tcp.ps1
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-05-18 12:41:08 -0300
committerGitHub <noreply@github.com>2026-05-18 12:41:08 -0300
commitf9097a0562ea8b40d40a19059578a9280b945de4 (patch)
tree67907194b90977758c6b024809eb887a44601935 /run_tcp.ps1
parentd39b1433e2ed754640049d04462f6a151bce7d14 (diff)
downloadSakura-f9097a0562ea8b40d40a19059578a9280b945de4.tar.gz
Sakura-f9097a0562ea8b40d40a19059578a9280b945de4.zip
cleanup root
Diffstat (limited to 'run_tcp.ps1')
-rw-r--r--run_tcp.ps1175
1 files changed, 0 insertions, 175 deletions
diff --git a/run_tcp.ps1 b/run_tcp.ps1
deleted file mode 100644
index 175fc26..0000000
--- a/run_tcp.ps1
+++ /dev/null
@@ -1,175 +0,0 @@
-param(
- [string]$ConfigPath = ".\config.sexp",
- [string]$ServerHost = "127.0.0.1",
- [int]$Port = 7777,
- [string[]]$Command,
- [string]$CommandsPath,
- [switch]$UseExistingServer,
- [switch]$UseLocalServer,
- [switch]$SkipBuild,
- [switch]$NoInteractive
-)
-
-$ErrorActionPreference = "Stop"
-
-function Invoke-Build {
- Write-Host "Building Sakura..."
- dune build
- if (-not $?) {
- throw "Build failed."
- }
-}
-
-function Start-SakuraServer {
- param(
- [string]$Config,
- [string]$WorkingDirectory,
- [switch]$UseOpam
- )
-
- Write-Host "Starting Sakura server with config $Config ..."
- $filePath = "dune"
- $serverArgs = @("exec", "sakura-server", "--", $Config)
- if ($UseOpam) {
- $filePath = "opam"
- $serverArgs = @("exec", "--", "sakura-server", $Config)
- }
-
- $proc = Start-Process -FilePath $filePath `
- -ArgumentList $serverArgs `
- -WorkingDirectory $WorkingDirectory `
- -PassThru
-
- return $proc
-}
-
-function Wait-ForTcp {
- param(
- [string]$TargetHost,
- [int]$TargetPort,
- [int]$TimeoutSeconds = 20
- )
-
- $deadline = (Get-Date).AddSeconds($TimeoutSeconds)
- while ((Get-Date) -lt $deadline) {
- $client = $null
- try {
- $client = [System.Net.Sockets.TcpClient]::new()
- $async = $client.BeginConnect($TargetHost, $TargetPort, $null, $null)
- if ($async.AsyncWaitHandle.WaitOne(250)) {
- $client.EndConnect($async)
- $client.Close()
- return
- }
- $client.Close()
- } catch {
- if ($null -ne $client) {
- $client.Close()
- }
- Start-Sleep -Milliseconds 250
- }
- }
-
- throw "Timed out waiting for TCP server at $TargetHost`:$TargetPort"
-}
-
-function Connect-Tcp {
- param(
- [string]$TargetHost,
- [int]$TargetPort
- )
-
- $client = [System.Net.Sockets.TcpClient]::new($TargetHost, $TargetPort)
- $stream = $client.GetStream()
- $writer = [System.IO.StreamWriter]::new($stream)
- $writer.AutoFlush = $true
- $reader = [System.IO.StreamReader]::new($stream)
-
- return @{
- Client = $client
- Writer = $writer
- Reader = $reader
- }
-}
-
-function Send-Command {
- param(
- [System.IO.StreamWriter]$Writer,
- [System.IO.StreamReader]$Reader,
- [string]$Line
- )
-
- $Writer.WriteLine($Line)
- $response = $Reader.ReadLine()
- if ($null -eq $response) {
- throw "Connection closed by server."
- }
-
- Write-Host "< $response"
-}
-
-$repoRoot = $PSScriptRoot
-$serverProcess = $null
-
-try {
- if (-not $SkipBuild) {
- Invoke-Build
- }
-
- if (-not $UseExistingServer) {
- if ($UseLocalServer) {
- Write-Host "Server mode: local dune exec sakura-server"
- } else {
- Write-Host "Server mode: opam-installed sakura-server"
- }
- $serverProcess = Start-SakuraServer -Config $ConfigPath -WorkingDirectory $repoRoot -UseOpam:(-not $UseLocalServer)
- Wait-ForTcp -TargetHost $ServerHost -TargetPort $Port
- Write-Host "Server is ready on $ServerHost`:$Port"
- }
-
- $conn = Connect-Tcp -TargetHost $ServerHost -TargetPort $Port
- $writer = $conn.Writer
- $reader = $conn.Reader
-
- $commandsToSend = @()
- if ($null -ne $Command -and $Command.Count -gt 0) {
- $commandsToSend += $Command
- }
- if (-not [string]::IsNullOrWhiteSpace($CommandsPath)) {
- $fileCommands = Get-Content -Path $CommandsPath |
- Where-Object { -not [string]::IsNullOrWhiteSpace($_) }
- $commandsToSend += $fileCommands
- }
-
- if ($commandsToSend.Count -gt 0) {
- foreach ($cmd in $commandsToSend) {
- Write-Host "> $cmd"
- Send-Command -Writer $writer -Reader $reader -Line $cmd
- }
- }
-
- if (-not $NoInteractive) {
- Write-Host "Interactive mode. Type :quit to exit."
- while ($true) {
- $line = Read-Host ">"
- if ($line -eq ":quit") {
- break
- }
- if ([string]::IsNullOrWhiteSpace($line)) {
- continue
- }
-
- Send-Command -Writer $writer -Reader $reader -Line $line
- }
- }
-
- $writer.Dispose()
- $reader.Dispose()
- $conn.Client.Close()
-}
-finally {
- if ($null -ne $serverProcess -and -not $serverProcess.HasExited) {
- Write-Host "Stopping Sakura server (PID $($serverProcess.Id))"
- Stop-Process -Id $serverProcess.Id -Force
- }
-}