diff --git a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/README.md b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/README.md index 0adcb2fb1a9a..f64da2ede16c 100644 --- a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/README.md +++ b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/README.md @@ -2,6 +2,12 @@ This extension provides functionality for receiving Web PubSub webhook calls in Azure Functions, allowing you to easily write functions that respond to any event published to Web PubSub. +[Source code](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/src) | +[Package](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.WebPubSub) | +[API reference documentation](https://azure.github.io/azure-webpubsub/references/functions-bindings) | +[Product documentation](https://aka.ms/awps/doc) | +[Samples](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/) + ## Getting started ### Install the package @@ -56,61 +62,72 @@ In `Connect` and `Message` events, function will respect return values to send b ### Functions that uses Web PubSub input binding -```cs -[FunctionName("WebPubSubInputBindingFunction")] -public static WebPubSubConnection Run( - [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req, - [WebPubSubConnection(Hub = "simplechat", UserId = "{query.userid}")] WebPubSubConnection connection) +```C# Snippet:WebPubSubConnectionBindingFunction +public static class WebPubSubConnectionBindingFunction { - Console.WriteLine("login"); - return connection; + [FunctionName("WebPubSubConnectionBindingFunction")] + public static WebPubSubConnection Run( + [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req, + [WebPubSubConnection(Hub = "hub", UserId = "{query.userid}")] WebPubSubConnection connection) + { + Console.WriteLine("login"); + return connection; + } } ``` ### Functions that uses Web PubSub output binding -```cs -[FunctionName("WebPubSubOutputBindingFunction")] -public static async Task RunAsync( - [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req, - [WebPubSub(Hub = "simplechat")] IAsyncCollector operation) +```C# Snippet:WebPubSubOutputBindingFunction +public static class WebPubSubOutputBindingFunction { - await operation.AddAsync(new SendToAll + [FunctionName("WebPubSubOutputBindingFunction")] + public static async Task RunAsync( + [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req, + [WebPubSub(Hub = "hub")] IAsyncCollector operation) { - Message = BinaryData.FromString("Hello Web PubSub"), - DataType = MessageDataType.Text - }); + await operation.AddAsync(new SendToAll + { + Message = BinaryData.FromString("Hello Web PubSub"), + DataType = MessageDataType.Text + }); + } } ``` ### Functions that uses Web PubSub trigger -```cs -[FunctionName("WebPubSubTriggerFunction")] -public static void Run( - [WebPubSubTrigger("message", WebPubSubEventType.User)] - ConnectionContext context, - string message, - MessageDataType dataType) +```C# Snippet:WebPubSubTriggerFunction +public static class WebPubSubTriggerFunction { - Console.WriteLine($"Request from: {context.userId}"); - Console.WriteLine($"Request message: {message}"); - Console.WriteLine($"Request message DataType: {dataType}"); + [FunctionName("WebPubSubTriggerFunction")] + public static void Run( + ILogger logger, + [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] ConnectionContext context, + string message, + MessageDataType dataType) + { + logger.LogInformation("Request from: {user}, message: {message}, dataType: {dataType}", + context.UserId, message, dataType); + } } ``` ### Functions that uses Web PubSub trigger return value -```cs -[FunctionName("WebPubSubTriggerReturnValueFunction")] -public static MessageResponse RunAsync( - [WebPubSubTrigger("message", WebPubSubEventType.User)] ConnectionContext context) +```C# Snippet:WebPubSubTriggerReturnValueFunction +public static class WebPubSubTriggerReturnValueFunction { - return new MessageResponse + [FunctionName("WebPubSubTriggerReturnValueFunction")] + public static MessageResponse Run( + [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] ConnectionContext context) { - Message = BinaryData.FromString("ack"), - DataType = MessageDataType.Text - }; + return new MessageResponse + { + Message = BinaryData.FromString("ack"), + DataType = MessageDataType.Text + }; + } } ``` diff --git a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubConnectionBindingFunction.cs b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubConnectionBindingFunction.cs new file mode 100644 index 000000000000..b2a0bbfa41a7 --- /dev/null +++ b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubConnectionBindingFunction.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Azure.WebJobs.Extensions.Http; +using Microsoft.Azure.WebJobs.Extensions.WebPubSub; + +namespace Microsoft.Azure.WebJobs.Samples +{ + #region Snippet:WebPubSubConnectionBindingFunction + public static class WebPubSubConnectionBindingFunction + { + [FunctionName("WebPubSubConnectionBindingFunction")] + public static WebPubSubConnection Run( + [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req, + [WebPubSubConnection(Hub = "hub", UserId = "{query.userid}")] WebPubSubConnection connection) + { + Console.WriteLine("login"); + return connection; + } + } + #endregion +} diff --git a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubOutputBindingFunction.cs b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubOutputBindingFunction.cs new file mode 100644 index 000000000000..238aa164cbbe --- /dev/null +++ b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubOutputBindingFunction.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Azure.WebJobs.Extensions.Http; +using Microsoft.Azure.WebJobs.Extensions.WebPubSub; + +namespace Microsoft.Azure.WebJobs.Samples +{ + #region Snippet:WebPubSubOutputBindingFunction + public static class WebPubSubOutputBindingFunction + { + [FunctionName("WebPubSubOutputBindingFunction")] + public static async Task RunAsync( + [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequest req, + [WebPubSub(Hub = "hub")] IAsyncCollector operation) + { + await operation.AddAsync(new SendToAll + { + Message = BinaryData.FromString("Hello Web PubSub"), + DataType = MessageDataType.Text + }); + } + } + #endregion +} diff --git a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubTriggerFunction.cs b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubTriggerFunction.cs new file mode 100644 index 000000000000..3687f9d33716 --- /dev/null +++ b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubTriggerFunction.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using Microsoft.Azure.WebJobs.Extensions.WebPubSub; +using Microsoft.Extensions.Logging; + +namespace Microsoft.Azure.WebJobs.Samples +{ + #region Snippet:WebPubSubTriggerFunction + public static class WebPubSubTriggerFunction + { + [FunctionName("WebPubSubTriggerFunction")] + public static void Run( + ILogger logger, + [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] ConnectionContext context, + string message, + MessageDataType dataType) + { + logger.LogInformation("Request from: {user}, message: {message}, dataType: {dataType}", + context.UserId, message, dataType); + } + } + #endregion +} diff --git a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubTriggerReturnValueFunction.cs b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubTriggerReturnValueFunction.cs new file mode 100644 index 000000000000..739d59fddf45 --- /dev/null +++ b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/samples/WebPubSubTriggerReturnValueFunction.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using Microsoft.Azure.WebJobs.Extensions.WebPubSub; + +namespace Microsoft.Azure.WebJobs.Samples +{ + #region Snippet:WebPubSubTriggerReturnValueFunction + public static class WebPubSubTriggerReturnValueFunction + { + [FunctionName("WebPubSubTriggerReturnValueFunction")] + public static MessageResponse Run( + [WebPubSubTrigger("hub", WebPubSubEventType.User, "message")] ConnectionContext context) + { + return new MessageResponse + { + Message = BinaryData.FromString("ack"), + DataType = MessageDataType.Text + }; + } + } + #endregion +} diff --git a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/tests/Microsoft.Azure.WebJobs.Extensions.WebPubSub.Tests.csproj b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/tests/Microsoft.Azure.WebJobs.Extensions.WebPubSub.Tests.csproj index 502eea7d5a0c..f920786f3a0f 100644 --- a/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/tests/Microsoft.Azure.WebJobs.Extensions.WebPubSub.Tests.csproj +++ b/sdk/webpubsub/Microsoft.Azure.WebJobs.Extensions.WebPubSub/tests/Microsoft.Azure.WebJobs.Extensions.WebPubSub.Tests.csproj @@ -7,10 +7,11 @@ + - +