in DeviceBridge/Services/SubscriptionCallbackFactory.cs [175:201]
public Func<ConnectionStatus, ConnectionStatusChangeReason, Task> GetConnectionStatusChangeCallback(string deviceId, DeviceSubscription connectionStatusSubscription)
{
return async (status, reason) =>
{
_logger.Info("Got connection status change for device {deviceId}. Callback URL: {callbackUrl}. Status: {status}. Reason: {reason}", deviceId, connectionStatusSubscription.CallbackUrl, status, reason);
try
{
var body = new ConnectionStatusChangeEventBody()
{
DeviceId = deviceId,
DeviceReceivedAt = DateTime.UtcNow,
Status = status.ToString(),
Reason = reason.ToString(),
};
var payload = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
using var httpResponse = await _httpClientFactory.CreateClient("RetryClient").PostAsync(connectionStatusSubscription.CallbackUrl, payload);
httpResponse.EnsureSuccessStatusCode();
_logger.Info("Successfully executed connection status change callback for device {deviceId}. Callback status code {statusCode}", deviceId, httpResponse.StatusCode);
}
catch (Exception e)
{
_logger.Error(e, "Failed to execute connection status change callback for device {deviceId}", deviceId);
}
};
}