using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System.Net; namespace CDP.CDPCore { /*public class SignalRFunctions { private readonly ILogger _logger; private static readonly HttpClient HttpClient = new(); private static string Etag = string.Empty; private static int StarCount = 0; public SignalRFunctions(ILogger log) { _logger = log; } [Function("index")] public static HttpResponseData GetHomePage([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req) { var response = req.CreateResponse(HttpStatusCode.OK); response.WriteString(File.ReadAllText("content/index.html")); response.Headers.Add("Content-Type", "text/html"); return response; } [Function("negotiate")] public static HttpResponseData Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req, [SignalRConnectionInfoInput(HubName = "cdp")] string connectionInfo) { var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "application/json"); response.WriteString(connectionInfo); return response; } [Function(nameof(SendMessage))] [SignalROutput(HubName = "cdp")] public static async Task SendMessage([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req) { string requestBody = new StreamReader(req.Body).ReadToEnd(); SendMessagePayload pl = JsonConvert.DeserializeObject(requestBody); if (pl == null) return null; return await SendMessageInternal(pl); } public static async Task SendMessageInternal(SendMessagePayload pl) { if (pl == null) return null; if (string.IsNullOrEmpty(pl.ConnectionId) && string.IsNullOrEmpty(pl.UserId)) return null; try { Console.WriteLine($"Sending message to {pl.ConnectionId}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } return new SignalRMessageAction(pl.Target) { Arguments = new[] { pl.Message }, ConnectionId = pl.ConnectionId.Trim() }; } //[Function("broadcast")] //[SignalROutput(HubName = "cdp")] //public static async Task Broadcast([TimerTrigger("5 * * * * *] TimerInfo timerInfo) //{ // var request = new HttpRequestMessage(HttpMethod.Get, "https://api.github.com/repos/azure/azure-signalr"); // request.Headers.UserAgent.ParseAdd("Serverless"); // request.Headers.Add("If-None-Match", Etag); // var response = await HttpClient.SendAsync(request); // if (response.Headers.Contains("Etag")) // { // Etag = response.Headers.GetValues("Etag").First(); // } // if (response.StatusCode == HttpStatusCode.OK) // { // var result = await response.Content.ReadFromJsonAsync(); // if (result != null) // { // StarCount = result.StarCount; // } // } // return new SignalRMessageAction("newMessage", new object[] { $"Current star count of https://github.com/Azure/azure-signalr is: {StarCount}" }); //} }*/ public class SendMessagePayload { public string ConnectionId { get; set; } public string UserId { get; set; } public string Message { get; set; } public string Target { get; set; } // this will default to 'newMessage' } }