public Func GetConnectionStatusChangeCallback()

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);
                }
            };
        }