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
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'
|
|
}
|
|
}
|