private ConnectionStatusChangesHandler BuildConnectionStatusChangeHandler()

in DeviceBridge/Services/ConnectionManager.cs [928:947]


        private ConnectionStatusChangesHandler BuildConnectionStatusChangeHandler(string deviceId)
        {
            return (ConnectionStatus status, ConnectionStatusChangeReason reason) =>
            {
                _logger.Info("Connection status of device {deviceId} changed: status = {status}, reason = {reason}", deviceId, status, reason);
                _clientStatuses.AddOrUpdate(deviceId, (status, reason), (key, oldValue) => (status, reason));

                // If a custom callback exists, call it asynchronously.
                if (_connectionStatusCallbacks.TryGetValue(deviceId, out var statusCallback))
                {
                    var _ = statusCallback(status, reason).ContinueWith(t => _logger.Error(t.Exception, "Failed to execute custom connection status callback for device {deviceId}", deviceId), TaskContinuationOptions.OnlyOnFaulted);
                }

                // Execute the global status change handler if one was defined.
                if (_globalConnectionStatusChangeHandler != null)
                {
                    var _ = _globalConnectionStatusChangeHandler(deviceId, status, reason).ContinueWith(t => _logger.Error(t.Exception, "Failed to execute global connection status callback for device {deviceId}", deviceId), TaskContinuationOptions.OnlyOnFaulted);
                }
            };
        }