Public/Authoral/Read-FromRabbitMQ.ps1
class RabbitMessageAction { [string]$name; [string]$action; } class RabbitMessage { [string]$type; [string]$title; [datetime]$schedule; [string]$description; [RabbitMessageAction[]]$actions; } function Read-FromRabbitMQ { param( [parameter(ValueFromPipelineByPropertyName, Mandatory = $false)] [string] $QueueName = 'Powershell', [parameter(ValueFromPipelineByPropertyName, Mandatory = $false)] [string] $Exchange = "Notifications", [parameter(ValueFromPipelineByPropertyName, Mandatory = $false)] [string] $ExchangeType = "Direct", [parameter(ValueFromPipelineByPropertyName, Mandatory = $false)] [string] $RoutingKey = "notification" ) begin { class NotificationHandler { [void] Handler($listener, $message) { if ($message.type -eq 'notification') { Write-Host "[notifications][$([DateTime]::UtcNow.ToString())] " -ForegroundColor Green -NoNewline Write-Host "[$($message.title)] " -NoNewline -ForegroundColor Cyan Write-Host $message.description $message_params = @{ ToastTitle = $message.title; ToastText = $message.description; } if ($message.schedule.Year -ne '0001') { $message_params.Add("Schedule", $message.schedule); } Show-Notification @message_params } } } class ActionsHandler { [void] Handler($listener, $message) { if ($message.type -eq 'action') { $message.actions | ForEach-Object { $action = $_.action Write-Host "[actions][$([DateTime]::UtcNow.ToString())] " -ForegroundColor Green -NoNewline Write-Host "[$($_.name)] " -NoNewline -ForegroundColor Cyan Write-Host $action $scriptBlock = [Scriptblock]::Create($action) $scriptBlock.InvokeReturnAsIs() } } } } $receiver = New-Object MessagesReceiver $notificationHandler = New-Object NotificationHandler $actionsHandler = New-Object ActionsHandler } process { $handleRabbitMessage = { param($listener, $params) Write-Host $params; [RabbitMessage]$message = $params; $notificationHandler.Handler($listener, $message) $actionsHandler.Handler($listener, $message) } $receiver.RegisterObserver($handleRabbitMessage) $receiver.Listen( $QueueName, $Exchange, $ExchangeType, $RoutingKey ) } } Set-Alias rabbit Read-FromChat |