| Name | Message | Date |
|---|---|---|
| 📄 Connect-WebSocket.ps1 | 20 hours ago | |
| 📄 Disconnect-WebSocket.ps1 | 20 hours ago | |
| 📄 README.md | 20 hours ago | |
| 📄 Receive-WebSocket.ps1 | 20 hours ago | |
| 📄 Send-WebSocket.ps1 | 20 hours ago |
📄
Receive-WebSocket.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[CmdletBinding()]
[OutputType([string])]
param (
[Parameter(Mandatory = $true, Position = 0)]
[System.Net.WebSockets.ClientWebSocket]
$WebSocket
)
begin {
$cts = [System.Threading.CancellationTokenSource]::new();
if ($WebSocket.State -ne [System.Net.WebSockets.WebSocketState]::Open) {
Write-Error "Can only receive from Open WebSockets, was $($WebSocket.State)";
$abort = $true;
}
}
process {
if ($abort) {
return;
}
$endOfMessage = $false;
[string]$message = "";
$memory = [System.Memory[byte]]::new([byte[]]::new(1024));
while (-not $endOfMessage) {
$task = $WebSocket.ReceiveAsync($memory, $cts.Token);
while ($null -eq $result) {
if ($task.IsCompletedSuccessfully) {
$result = $task.Result
}
elseif ($task.IsFaulted) {
Write-Error "Receiving faulted";
return;
}
elseif ($task.IsCanceled) {
return;
}
}
$part = [System.Text.Encoding]::UTF8.GetString($memory.Slice(0, $result.Count).ToArray());
$message += $part;
$endOfMessage = $result.EndOfMessage;
$result = $null;
}
return $message;
}
clean {
$cts.Cancel();
}