Team Ai
Datasetpublic

MegaBites-AI/Windows-powershell

sourceHugging Facemitupdated 6mo agoView on Hugging Face
0likes372downloads
UnixSocket.psm1126 linesDownload Raw Back to UnixSocket
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3 4Class UnixSocket5{6    [System.Management.Automation.Job]$Job7 8    UnixSocket () { }9 10    [String] GetStatus()11    {12        return $this.Job.JobStateInfo.State13    }14}15 16[UnixSocket]$UnixSocket17 18function Get-UnixSocket19{20    [CmdletBinding(ConfirmImpact = 'Low')]21    [OutputType([UnixSocket])]22    param()23 24    process25    {26        return [UnixSocket]$Script:UnixSocket27    }28}29 30function Start-UnixSocket31{32    [CmdletBinding(ConfirmImpact = 'Low')]33    [OutputType([UnixSocket])]34    param([string] $socketPath)35 36    process37    {38        $runningListener = Get-UnixSocket39        if ($null -ne $runningListener -and $runningListener.GetStatus() -eq 'Running')40        {41            return $runningListener42        }43 44        $initTimeoutSeconds  = 2545        $appExe              = (Get-Command UnixSocket).Path46        $initCompleteMessage = 'Now listening on'47        $sleepMilliseconds   = 10048 49        $Job = Start-Job {50            $path = Split-Path -Parent (Get-Command UnixSocket).Path -Verbose51            Push-Location $path -Verbose52            'appEXE: {0}' -f $using:appExe53            $env:ASPNETCORE_ENVIRONMENT = 'Development'54            & $using:appExe $using:socketPath55        }56 57        $Script:UnixSocket = [UnixSocket]@{58            Job   = $Job59        }60 61        # Count iterations of $sleepMilliseconds instead of using system time to work around possible CI VM sleep/delays62        $sleepCountRemaining = $initTimeoutSeconds * 1000 / $sleepMilliseconds63        do64        {65            Start-Sleep -Milliseconds $sleepMilliseconds66            $initStatus = $Job.ChildJobs[0].Output | Out-String67            $isRunning = $initStatus -match $initCompleteMessage68            $sleepCountRemaining--69        }70        while (-not $isRunning -and $sleepCountRemaining -gt 0)71 72        if (-not $isRunning)73        {74            $jobErrors = $Job.ChildJobs[0].Error | Out-String75            $jobOutput =  $Job.ChildJobs[0].Output | Out-String76            $jobVerbose =  $Job.ChildJobs[0].Verbose | Out-String77            $Job | Stop-Job78            $Job | Remove-Job -Force79            $message = 'UnixSocket did not start before the timeout was reached.{0}Errors:{0}{1}{0}Output:{0}{2}{0}Verbose:{0}{3}' -f ([System.Environment]::NewLine), $jobErrors, $jobOutput, $jobVerbose80            throw $message81        }82        return $Script:UnixSocket83    }84}85 86function Stop-UnixSocket87{88    [CmdletBinding(ConfirmImpact = 'Low')]89    [OutputType([Void])]90    param()91 92    process93    {94        $Script:UnixSocket.Job | Stop-Job -PassThru | Remove-Job95        $Script:UnixSocket = $null96    }97}98 99function Get-UnixSocketName {100    [CmdletBinding()]101    [OutputType([string])]102    param ()103 104    process {105        return [System.IO.Path]::Join([System.IO.Path]::GetTempPath(), [System.IO.Path]::ChangeExtension([System.IO.Path]::GetRandomFileName(), "sock"))106    }107}108 109function Get-UnixSocketUri {110    [CmdletBinding()]111    [OutputType([Uri])]112    param ()113 114    process {115        $runningListener = Get-UnixSocket116        if ($null -eq $runningListener -or $runningListener.GetStatus() -ne 'Running')117        {118            return $null119        }120        $Uri = [System.UriBuilder]::new()121        $Uri.Host = '127.0.0.0'122 123        return [Uri]$Uri.ToString()124    }125}126