Temporary repo to track my changes on LTS functions app porting
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
4.0 KiB

  1. using Microsoft.AspNetCore.Http;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.Azure.Functions.Worker;
  4. using Microsoft.Azure.Functions.Worker.Http;
  5. using Microsoft.Extensions.Logging;
  6. using Newtonsoft.Json;
  7. using System.Net;
  8. namespace CDP.CDPCore
  9. {
  10. /*public class SignalRFunctions
  11. {
  12. private readonly ILogger<SignalRFunctions> _logger;
  13. private static readonly HttpClient HttpClient = new();
  14. private static string Etag = string.Empty;
  15. private static int StarCount = 0;
  16. public SignalRFunctions(ILogger<SignalRFunctions> log)
  17. {
  18. _logger = log;
  19. }
  20. [Function("index")]
  21. public static HttpResponseData GetHomePage([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req)
  22. {
  23. var response = req.CreateResponse(HttpStatusCode.OK);
  24. response.WriteString(File.ReadAllText("content/index.html"));
  25. response.Headers.Add("Content-Type", "text/html");
  26. return response;
  27. }
  28. [Function("negotiate")]
  29. public static HttpResponseData Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpRequestData req,
  30. [SignalRConnectionInfoInput(HubName = "cdp")] string connectionInfo)
  31. {
  32. var response = req.CreateResponse(HttpStatusCode.OK);
  33. response.Headers.Add("Content-Type", "application/json");
  34. response.WriteString(connectionInfo);
  35. return response;
  36. }
  37. [Function(nameof(SendMessage))]
  38. [SignalROutput(HubName = "cdp")]
  39. public static async Task<SignalRMessageAction> SendMessage([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
  40. {
  41. string requestBody = new StreamReader(req.Body).ReadToEnd();
  42. SendMessagePayload pl = JsonConvert.DeserializeObject<SendMessagePayload>(requestBody);
  43. if (pl == null)
  44. return null;
  45. return await SendMessageInternal(pl);
  46. }
  47. public static async Task<SignalRMessageAction> SendMessageInternal(SendMessagePayload pl)
  48. {
  49. if (pl == null)
  50. return null;
  51. if (string.IsNullOrEmpty(pl.ConnectionId) && string.IsNullOrEmpty(pl.UserId))
  52. return null;
  53. try
  54. {
  55. Console.WriteLine($"Sending message to {pl.ConnectionId}");
  56. }
  57. catch (Exception ex)
  58. {
  59. Console.WriteLine(ex.Message);
  60. }
  61. return new SignalRMessageAction(pl.Target)
  62. {
  63. Arguments = new[] { pl.Message },
  64. ConnectionId = pl.ConnectionId.Trim()
  65. };
  66. }
  67. //[Function("broadcast")]
  68. //[SignalROutput(HubName = "cdp")]
  69. //public static async Task<SignalRMessageAction> Broadcast([TimerTrigger("5 * * * * *] TimerInfo timerInfo)
  70. //{
  71. // var request = new HttpRequestMessage(HttpMethod.Get, "https://api.github.com/repos/azure/azure-signalr");
  72. // request.Headers.UserAgent.ParseAdd("Serverless");
  73. // request.Headers.Add("If-None-Match", Etag);
  74. // var response = await HttpClient.SendAsync(request);
  75. // if (response.Headers.Contains("Etag"))
  76. // {
  77. // Etag = response.Headers.GetValues("Etag").First();
  78. // }
  79. // if (response.StatusCode == HttpStatusCode.OK)
  80. // {
  81. // var result = await response.Content.ReadFromJsonAsync<GitResult>();
  82. // if (result != null)
  83. // {
  84. // StarCount = result.StarCount;
  85. // }
  86. // }
  87. // return new SignalRMessageAction("newMessage", new object[] { $"Current star count of https://github.com/Azure/azure-signalr is: {StarCount}" });
  88. //}
  89. }*/
  90. public class SendMessagePayload
  91. {
  92. public string ConnectionId { get; set; }
  93. public string UserId { get; set; }
  94. public string Message { get; set; }
  95. public string Target { get; set; } // this will default to 'newMessage'
  96. }
  97. }