Public/Start-OpenPixelControlListener.ps1
function Start-OpenPixelControlListener { [CmdletBinding()] Param( [int]$port = 1655 ) $Session = $Global:OpenPixelControlListenerSession | Where-Object {$_.Port -eq $port} if (-not $Session) { New-OpenPixelControlServerSession -Port $port $Session = $Global:OpenPixelControlListenerSession | Where-Object {$_.Port -eq $port} } $Message = Read-TCPBytes -Length ([int]([uint16]::MaxValue)) -Session $Session.Session $Header = @{ Channel = [int]$Message[0] Command = [int]$Message[1] Length = $( $Length = $Message[2, 3] [Array]::Reverse($Length) [bitconverter]::ToUInt16($Length, 0) ) } $ColorStream = $Message[4..(4 + $Header.Length - 1)] $ColorCount = $ColorStream.Count / 3 New-Object -TypeName PSObject -Property ([ordered]@{ Channel = $Header.Channel Command = $Header.Command ColorArray = $( ( 0..($ColorCount - 1) | ForEach-Object { $ThisColor = $ColorStream[(0 + (3 * $_))..((3 + (3 * $_)) - 1)] [System.Drawing.Color]::FromArgb($ThisColor[0], $ThisColor[1], $ThisColor[2]) } ) ) }) $Session.Stream.Flush() $Session.Session.Flush() $Message.Clear() #Write-Verbose "Closing session to $remoteClient" #$Session.Client.Close() } |