-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSend.ps1
More file actions
69 lines (59 loc) · 1.86 KB
/
Send.ps1
File metadata and controls
69 lines (59 loc) · 1.86 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<#
.SYNOPSIS
Sends a WebSocket message.
.DESCRIPTION
Sends a message from a WebSocket server.
#>
param(
[PSObject]
$Message,
[string]
$Pattern
)
function sendMessage {
param([Parameter(ValueFromPipeline)]$msg, [PSObject[]]$Sockets)
process {
if ($msg -is [byte[]]) {
$messageSegment = [ArraySegment[byte]]::new($msg)
foreach ($socket in $sockets) {
if ($null -ne $messageSegment -and $socket.SendAsync) {
$null = $socket.SendAsync($messageSegment, 'Binary', 'EndOfMessage',[Threading.Cancellationtoken]::None)
}
}
} else {
$jsonMessage = ConvertTo-Json -InputObject $msg
$messageSegment = [ArraySegment[byte]]::new($OutputEncoding.GetBytes($jsonMessage))
foreach ($socket in $sockets) {
if ($null -ne $messageSegment -and $socket.SendAsync) {
$null = $socket.SendAsync($messageSegment, 'Text', 'EndOfMessage',[Threading.Cancellationtoken]::None)
}
}
}
$msg
}
}
$patternAsRegex = $pattern -as [regex]
$socketList = @(
foreach ($socketConnection in $this.HttpListener.SocketRequests.Values) {
if (
$patternAsRegex -and
$socketConnection.WebSocketContext.RequestUri -match $pattern
) {
$socketConnection.WebSocket
}
elseif (
$pattern -and
$socketConnection.WebSocketContext.RequestUri -like $pattern
) {
$socketConnection.WebSocket
}
else {
$socketConnection.WebSocket
}
}
)
if ($message -is [Collections.IList] -and $message -isnot [byte[]]) {
$Message | sendMessage -Sockets $socketList
} else {
sendMessage -msg $Message -Sockets $socketList
}