mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-16 01:03:01 +08:00
Co-authored-by: chkr1011 <6939810+chkr1011@users.noreply.github.com>
69 lines
2.0 KiB
C#
69 lines
2.0 KiB
C#
using System.Collections;
|
|
using System.Management.Automation;
|
|
using System.Text;
|
|
using MQTTnet.Protocol;
|
|
using MQTTnet.Packets;
|
|
|
|
namespace MQTTnet.PowerShell.Cmdlets;
|
|
|
|
[Cmdlet(VerbsData.Publish, "MqttMessage")]
|
|
public class PublishMqttMessageCmdlet : PSCmdlet
|
|
{
|
|
[Parameter(Mandatory = true)]
|
|
public string? Payload { get; set; }
|
|
|
|
[Parameter]
|
|
public int QoS { get; set; } = 0;
|
|
|
|
[Parameter]
|
|
public SwitchParameter Retain { get; set; }
|
|
|
|
[Parameter(Mandatory = true, ValueFromPipeline = true)]
|
|
public required PsMqttSession Session { get; set; }
|
|
|
|
[Parameter(Mandatory = true)]
|
|
public required string Topic { get; set; }
|
|
|
|
[Parameter]
|
|
public string? ContentType { get; set; }
|
|
|
|
[Parameter]
|
|
public string? ResponseTopic { get; set; }
|
|
|
|
[Parameter]
|
|
public ushort TopicAlias { get; set; }
|
|
|
|
[Parameter]
|
|
public uint MessageExpiryInterval { get; set; }
|
|
|
|
[Parameter]
|
|
public Hashtable? UserProperties { get; set; }
|
|
|
|
protected override void ProcessRecord()
|
|
{
|
|
var msgBuilder = new MqttApplicationMessageBuilder()
|
|
.WithTopic(Topic)
|
|
.WithPayload(Encoding.UTF8.GetBytes(Payload ?? string.Empty))
|
|
.WithQualityOfServiceLevel((MqttQualityOfServiceLevel)QoS)
|
|
.WithRetainFlag(Retain)
|
|
.WithContentType(ContentType)
|
|
.WithResponseTopic(ResponseTopic)
|
|
.WithTopicAlias(TopicAlias)
|
|
.WithMessageExpiryInterval(MessageExpiryInterval);
|
|
|
|
// Add user properties if provided
|
|
if (UserProperties != null && UserProperties.Count > 0)
|
|
{
|
|
foreach (var key in UserProperties.Keys)
|
|
{
|
|
var value = UserProperties[key]?.ToString() ?? string.Empty;
|
|
msgBuilder.WithUserProperty(key.ToString()!, value);
|
|
}
|
|
}
|
|
|
|
var msg = msgBuilder.Build();
|
|
var response = Session.GetClient().PublishAsync(msg).GetAwaiter().GetResult();
|
|
|
|
WriteObject(response);
|
|
}
|
|
} |