Bit.Core.Services.PushSharpPushService.PushToAllUserDevicesAsync C# (CSharp) Method

PushToAllUserDevicesAsync() private method

private PushToAllUserDevicesAsync ( System.Guid userId, Newtonsoft.Json.Linq.JObject message, IEnumerable tokensToSkip ) : System.Threading.Tasks.Task
userId System.Guid
message Newtonsoft.Json.Linq.JObject
tokensToSkip IEnumerable
return System.Threading.Tasks.Task
        private async Task PushToAllUserDevicesAsync(Guid userId, JObject message, IEnumerable<string> tokensToSkip)
        {
            var devices = (await _deviceRepository.GetManyByUserIdAsync(userId))
                .Where(d => !string.IsNullOrWhiteSpace(d.PushToken) && (!tokensToSkip?.Contains(d.PushToken) ?? true));
            if(devices.Count() == 0)
            {
                return;
            }

            if(_apnsBroker != null)
            {
                // Send to each iOS device
                foreach(var device in devices.Where(d => d.Type == DeviceType.iOS))
                {
                    _apnsBroker.QueueNotification(new ApnsNotification
                    {
                        DeviceToken = device.PushToken,
                        Payload = message
                    });
                }
            }

            // Android can send to many devices at once
            var androidDevices = devices.Where(d => d.Type == DeviceType.Android);
            if(_gcmBroker != null && androidDevices.Count() > 0)
            {
                _gcmBroker.QueueNotification(new GcmNotification
                {
                    RegistrationIds = androidDevices.Select(d => d.PushToken).ToList(),
                    Data = message
                });
            }
        }