playground/CloudFormationProvisioning/Frontend/Components/Pages/MessagePublisher.razor (52 lines of code) (raw):
@page "/message-publisher"
@using Frontend.Models
@using AWS.Messaging
<!-- IMessagePublisher comes from the AWS.Messaging package which uses the AWS service clients to publish messages to SQS, SNS and EventBridge. -->
@inject IMessagePublisher publisher
<h3>Message Publisher Example</h3>
<p>
The page publishes a message to the SNS topic provisioning in the AppHost and assigned to this project. To publish the messages the <a href="https://github.com/awslabs/aws-dotnet-messaging">AWS Messaging</a>
package is used which uses services clients that were configured in the AppHost.
</p>
<p>
<label>
Recipient:
<input @bind="Recipient" />
</label>
</p>
<p>
<label>
Message:
<input @bind="Message" />
</label>
</p>
<p>
<button @onclick="SendMessageAsync">Publish Message</button>
</p>
<ul>
@foreach(var message in PublishStatuses)
{
<li>@message</li>
}
</ul>
@code {
public string? Message { get; set; }
public string? Recipient { get; set; }
public List<string> PublishStatuses { get; } = new List<string>();
public async Task SendMessageAsync()
{
if (string.IsNullOrEmpty(this.Message))
{
return;
}
var chatMessage = new ChatMessage { Message = this.Message, Recipient = this.Recipient };
try
{
await publisher.PublishAsync(chatMessage);
PublishStatuses.Add($"{DateTime.Now}: Message publish successfully");
}
catch(Exception e)
{
PublishStatuses.Add($"{DateTime.Now}: Message failed to publish: {e.Message}");
}
}
}