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

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<SignalRFunctions> _logger;
private static readonly HttpClient HttpClient = new();
private static string Etag = string.Empty;
private static int StarCount = 0;
public SignalRFunctions(ILogger<SignalRFunctions> 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<SignalRMessageAction> SendMessage([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequestData req)
{
string requestBody = new StreamReader(req.Body).ReadToEnd();
SendMessagePayload pl = JsonConvert.DeserializeObject<SendMessagePayload>(requestBody);
if (pl == null)
return null;
return await SendMessageInternal(pl);
}
public static async Task<SignalRMessageAction> 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<SignalRMessageAction> 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<GitResult>();
// 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'
}
}