public async Task <IActionResult> GetRegisteredDevices([FromQuery] int pageSize, string continuationToken)
        {
            try
            {
                CollectionQueryResult <RegistrationDescription> devices = string.IsNullOrEmpty(continuationToken) ?
                                                                          await _hubClient.GetAllRegistrationsAsync(pageSize) :
                                                                          await _hubClient.GetAllRegistrationsAsync(continuationToken, pageSize);

                return(Ok(devices));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status502BadGateway, e.Message));
            }
        }
示例#2
0
        async Task DeleteAllRegistrationsAndInstallations()
        {
            string continuationToken;

            do
            {
                var registrations = await _hubClient.GetAllRegistrationsAsync(100);

                continuationToken = registrations.ContinuationToken;

                foreach (var registrationDescription in registrations)
                {
                    await _hubClient.DeleteRegistrationAsync(registrationDescription.RegistrationId);
                }
            } while (continuationToken != null);
        }
        private static async Task CreateAndDeleteRegistrationAsync(NotificationHubClient nhClient)
        {
            var registrationId = await nhClient.CreateRegistrationIdAsync();

            var registrationDescr = await nhClient.CreateGcmNativeRegistrationAsync(registrationId);

            Console.WriteLine($"Created GCM registration {registrationDescr.GcmRegistrationId}");

            var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000);

            foreach (var regFromServer in allRegistrations)
            {
                if (regFromServer.RegistrationId == registrationDescr.RegistrationId)
                {
                    Console.WriteLine($"Found GCM registration {registrationDescr.GcmRegistrationId}");
                    break;
                }
            }

            //registrationDescr = await nhClient.GetRegistrationAsync<GcmRegistrationDescription>(registrationId);
            //Console.WriteLine($"Retrieved GCM registration {registrationDescr.GcmRegistrationId}");

            await nhClient.DeleteRegistrationAsync(registrationDescr);

            Console.WriteLine($"Deleted GCM registration {registrationDescr.GcmRegistrationId}");
        }
        /// <summary>
        /// CSV 形式で登録されている情報の一覧を出力します
        /// </summary>
        public async Task <HttpResponseMessage> Get(string platform = "", string expression = null)
        {
            // 登録情報を取得
            var result = string.IsNullOrEmpty(expression) ? await _client.GetAllRegistrationsAsync(0) : await _client.GetRegistrationsByTagExpressionAsync(expression);

            // プラットフォームでフィルタリング
            var platforms = platform.Split(',');

            var records = result.Select(p => new RegistrationModel(p)).Where(p => platforms.Contains(p.Platform));

            // CSV として出力する
            var writer = new StringWriter();

            var csvWriter = new CsvWriter(writer);

            csvWriter.Configuration.RegisterClassMap <RegistrationModelMap>();

            csvWriter.WriteRecords(records);

            // ダウンロード可能な形でレスポンスを作成
            var response = new HttpResponseMessage
            {
                Content = new StringContent(writer.ToString())
            };

            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "export.csv"
            };
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

            return(response);
        }
示例#5
0
        private static async Task CreateRegistrationAsync(NotificationHubClient nhClient)
        {
            var registrationId = await nhClient.CreateRegistrationIdAsync();

            //var registrationDescr = await nhClient.CreateFcmNativeRegistrationAsync(registrationId);
            var registrationDescr = await nhClient.CreateAppleNativeRegistrationAsync(registrationId);

            //Console.WriteLine($"Created APNS registration {registrationDescr.FcmRegistrationId}");
            //registrationDescr.RegistrationId = "96d6bb5d412881d30046f5bf5616beaddf6aa4abe57987bccc4b5c23209dbb0c";
            registrationDescr.RegistrationId = "djPUqVGjd9I:APA91bE7UyqaMr0IAICU7Wz5eV5qUEaZ2nEA7YkFcz6UqCHv-nIkUNDBAE4cZdjjG5bw8WnT2Psu7-eV4GMURVXtMGzI_yju2VRAzaTShW-9xwW2qy9D_SPIRsD8xVLalVklQgy_xara";
            Console.WriteLine($"Create APNS registration {registrationDescr.RegistrationId}");

            var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000);

            foreach (var regFromServer in allRegistrations)
            {
                if (regFromServer.RegistrationId == registrationDescr.RegistrationId)
                {
                    //Console.WriteLine($"Found FCM registration {registrationDescr.FcmRegistrationId}");
                    Console.WriteLine($"Found APNS registration {registrationDescr.RegistrationId}");
                    break;
                }
            }

            //commented out by code creator (next 2 lines)
            //registrationDescr = await nhClient.GetRegistrationAsync<FcmRegistrationDescription>(registrationId);
            //Console.WriteLine($"Retrieved FCM registration {registrationDescr.FcmRegistrationId}");
        }
示例#6
0
        private static async Task CreateAndDeleteRegistrationAsync(NotificationHubClient nhClient)
        {
            var registrationId = await nhClient.CreateRegistrationIdAsync();

            //var registrationDescr = await nhClient.CreateFcmNativeRegistrationAsync(registrationId);
            var registrationDescr = await nhClient.CreateAppleNativeRegistrationAsync(registrationId);

            //Console.WriteLine($"Created APNS registration {registrationDescr.FcmRegistrationId}");
            Console.WriteLine($"Create APNS registration {registrationDescr.RegistrationId}");

            var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000);

            foreach (var regFromServer in allRegistrations)
            {
                if (regFromServer.RegistrationId == registrationDescr.RegistrationId)
                {
                    //Console.WriteLine($"Found FCM registration {registrationDescr.FcmRegistrationId}");
                    Console.WriteLine($"Found APNS registration {registrationDescr.RegistrationId}");
                    break;
                }
            }

            //commented out by code creator (next 2 lines)
            //registrationDescr = await nhClient.GetRegistrationAsync<FcmRegistrationDescription>(registrationId);
            //Console.WriteLine($"Retrieved FCM registration {registrationDescr.FcmRegistrationId}");

            await nhClient.DeleteRegistrationAsync(registrationDescr);

            //Console.WriteLine($"Deleted FCM registration {registrationDescr.FcmRegistrationId}");
            Console.WriteLine($"Deleted APNS registration {registrationDescr.RegistrationId}");
        }
        public async Task <List <RegistrationDescription> > GetRegistrationsAsync()
        {
            var cs = _connectionstring;
            NotificationHubClient client = NotificationHubClient.CreateClientFromConnectionString(_connectionstring, _hubName);
            var items = await client.GetAllRegistrationsAsync(400);

            return(items.ToList());
        }
示例#8
0
        /// <summary>
        /// 通知ハブに登録されている全ての登録情報を返します
        /// </summary>
        public async Task <IEnumerable <RegistrationModel> > Get()
        {
            // 登録されている情報を全て取得
            var result = await _client.GetAllRegistrationsAsync(0);

            // モデルへマッピングして返す
            return(result.Select(p => new RegistrationModel(p)));
        }
        public async Task DeleteAllRegistrationsAsync()
        {
            NotificationHubClient client = NotificationHubClient.CreateClientFromConnectionString(_connectionstring, _hubName);
            var items = await client.GetAllRegistrationsAsync(400);

            foreach (var item in items)
            {
                await client.DeleteRegistrationAsync(item.RegistrationId);
            }
        }
示例#10
0
        public async Task <IList <RegistrationDescription> > Get()
        {
            var registrationDescriptions = await _hub.GetAllRegistrationsAsync(10);

            IList <RegistrationDescription> retval = new List <RegistrationDescription>();

            foreach (var regdesc in registrationDescriptions)
            {
                retval.Add(regdesc);
            }
            return(retval);
        }
示例#11
0
        public async Task <int> DeleteRegistration()
        {
            var allRegister = await _notificationHubClient.GetAllRegistrationsAsync(100);

            int i = 0;

            foreach (var registrationDescription in allRegister)
            {
                await _notificationHubClient.DeleteRegistrationAsync(registrationDescription.RegistrationId);

                ++i;
            }
            return(i);
        }
示例#12
0
        private async Task RefreshDevices()
        {
            NotificationHubClient client = NotificationHubClient.CreateClientFromConnectionString(ConnectionString, "uwpsample");
            CollectionQueryResult <RegistrationDescription> results = await client.GetAllRegistrationsAsync(0);

            var devicesList = results.Select(x => new DeviceRegistration
            {
                RegistrationId = x.RegistrationId,
                ExpirationTime = x.ExpirationTime.Value,
                Tags           = RetrieveTags(x.Tags)
            });

            devices             = new ObservableCollection <DeviceRegistration>(devicesList);
            Devices.ItemsSource = devices;
        }
示例#13
0
        public async Task <IActionResult> OnGetAsync()
        {
            var registrations = new List <RegistrationDescription>(await _hub.GetAllRegistrationsAsync(0, CancellationToken.None));

            for (int i = 0; i < registrations.Count; i++)
            {
                RegistrationData registrationData = new RegistrationData
                {
                    RegistrationId = registrations[i].RegistrationId,
                    ExpirationTime = registrations[i].ExpirationTime
                };

                HashSet <string> tags = (HashSet <string>)registrations[i].Tags;
                tags.CopyTo(registrationData.Tags);

                Data.Add(registrationData);
            }

            return(Page());
        }
        public async Task <List <DeviceTrend> > GetAllRegistrationInfoAsync()
        {
            List <DeviceTrend> deviceRegistrationTrends = new List <DeviceTrend>();

            int windowsRegistrationCount = 0;
            int fcmRegistrationCount     = 0;
            int apnsRegistrationCount    = 0;

            var allRegistrations = await _hub.GetAllRegistrationsAsync(0);

            foreach (var registration in allRegistrations)
            {
                if (registration is WindowsRegistrationDescription)
                {
                    windowsRegistrationCount++;
                }
                else if (registration is FcmRegistrationDescription)
                {
                    fcmRegistrationCount++;
                }
                else if (registration is AppleRegistrationDescription)
                {
                    apnsRegistrationCount++;
                }
            }

            deviceRegistrationTrends.Add(new DeviceTrend()
            {
                DeviceType = "Windows", RegistrationCount = windowsRegistrationCount
            });
            deviceRegistrationTrends.Add(new DeviceTrend()
            {
                DeviceType = "Android", RegistrationCount = fcmRegistrationCount
            });
            deviceRegistrationTrends.Add(new DeviceTrend()
            {
                DeviceType = "Apple", RegistrationCount = apnsRegistrationCount
            });

            return(deviceRegistrationTrends);
        }
示例#15
0
        public static async Task <IEnumerable <RegistrationDescription> > GetRegistrationsByTagExpressionAsync(this NotificationHubClient client, string tagExpression)
        {
            // タグ式を分解して、元々のオブジェクトに戻す
            var andExpressions = tagExpression.Split(new[] { "&&" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToArray();

            var tags = (from expression in andExpressions
                        let body = expression.Trim('!', '(', ')')
                                   let orExpressions = body.Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToArray()
                                                       let key = orExpressions[0].Split(':')[0]
                                                                 select new TagModel
            {
                Key = key,
                Values = orExpressions.Select(p => p.Substring(key.Length + 1)).ToArray(),
                Exclude = expression.StartsWith("!")
            }).ToArray();

            IEnumerable <RegistrationDescription> results;

            // 否定が入っている場合には全件取得する必要がある
            if (tags.Any(p => p.Exclude))
            {
                results = await client.GetAllRegistrationsAsync(0);
            }
            else
            {
                // フィルタリングに最低限必要なタグのみ取得する
                results = (await Task.WhenAll(tags.SelectMany(p => p.Values.Select(q => client.GetRegistrationsByTagAsync(p.Key + ":" + q, 0))))).SelectMany(p => p).Distinct(new RegistrationDescriptionComparer());
            }

            // フィルタリングした結果を返す
            return(results.Where(p => tags.All(q =>
            {
                if (q.Exclude)
                {
                    return !q.Values.Any(r => p.Tags.Contains(q.Key + ":" + r));
                }

                return q.Values.Any(r => p.Tags.Contains(q.Key + ":" + r));
            })));
        }
        private async Task CleanupInstallations()
        {
            var emptyNotif = new FcmNotification("{\"data\":{\"message\":\"ola\"}}");
            await _hub.SendNotificationAsync(emptyNotif, "default");

            var allRegistrations = await _hub.GetAllRegistrationsAsync(0);

            foreach (var registration in allRegistrations)
            {
                var installationId = string.Empty;

                var tags = registration.Tags;
                foreach (var tag in tags)
                {
                    if (tag.Contains("InstallationId:"))
                    {
                        installationId = tag.Substring(tag.IndexOf('{') + 1, 32);
                    }
                }

                if (installationId == String.Empty)
                {
                    return;
                }
                else
                {
                    Trace.TraceError(installationId);
                }

                var receivedInstallation = await _hub.GetInstallationAsync(installationId);

                if (receivedInstallation.PushChannelExpired == true)
                {
                    await _hub.DeleteInstallationAsync(receivedInstallation.InstallationId);
                }
            }
        }
示例#17
0
        public async Task <IHttpActionResult> ObterRegistrados()
        {
            List <RegistroViewModel> listaDeRetorno = new List <RegistroViewModel>();
            var listaDeRegistrados = await _hubClient.GetAllRegistrationsAsync(100);

            foreach (var registrationDescription in listaDeRegistrados)
            {
                string        registrationId = registrationDescription.RegistrationId;
                List <string> tags           = registrationDescription.Tags.ToList();

                if (!tags.Any(p => p.Contains("$InstallationId")))
                {
                    listaDeRetorno.Add(new RegistroViewModel()
                    {
                        RegistratioId = registrationId,
                        Tags          = tags
                    });
                }
            }

            var result = new { sucess = true, dados = listaDeRetorno };

            return(Ok(result));
        }
示例#18
0
 public async Task GetAllRegisteredDevices()
 {
     var result = await _hubClient.GetAllRegistrationsAsync(0);
 }
示例#19
0
        ///
        /// <summary>
        /// Get all registered devices from hub
        /// </summary>
        public async Task <string> GetRegisteredDevices()
        {
            var registrations = await _hubClient.GetAllRegistrationsAsync(0);

            return(JsonConvert.SerializeObject(registrations));
        }
示例#20
0
    public async Task <IHttpActionResult> TriggerCheck([FromUri] int start = 0)
    {
        var          sw = Stopwatch.StartNew();
        int          registrationCount = 0;
        const string toastTemplate     = "<?xml version=\"1.0\" encoding=\"utf-8\"?><wp:Notification xmlns:wp=\"WPNotification\"><wp:Toast><wp:Text1>{0}</wp:Text1><wp:Text2>{1}</wp:Text2><wp:Param>{2}</wp:Param></wp:Toast></wp:Notification>";


        IList <NotificationOutcome> result        = new List <NotificationOutcome>();
        IList <MpnsNotification>    notifications = new List <MpnsNotification>();

        var registrations = (await _notificationClient.GetAllRegistrationsAsync(Int32.MaxValue)).Where(x => x.Tags != null).Skip(start);
        var preferences   = _mobileClient.GetTable <PlainNumberInfo>();

        if (start == 0)
        {
            alreadyRetrieved.Clear();
        }

        foreach (var user in registrations)
        {
            notifications.Clear();
            foreach (var number in user.Tags)
            {
                try
                {
                    bool dirty = false;
                    var  data  = number.Split('_');
                    if (data.Any(x => string.IsNullOrEmpty(x)))
                    {
                        await _notificationClient.DeleteRegistrationAsync(user); //Tanto non saprei cosa cazzo farci.

                        continue;
                    }

                    CreditInfo content = null;

                    if (!alreadyRetrieved.Any(x => x.Username == data[0] && x.Type == data[data.Length - 1] && x.Password == string.Join("_", data.Skip(1).Take(data.Length - 2))))
                    {
                        content = await _retrievers.First(x => x.Type == data[data.Length - 1]).Get(data[0], string.Join("_", data.Skip(1).Take(data.Length - 2)), data[data.Length - 1], Guid.Empty); //this.GetData(null, new Q_X { q = data[0], x = data[1], t = data[2] });

                        alreadyRetrieved.Add(content);
                    }
                    else
                    {
                        content = alreadyRetrieved.First(x => x.Username == data[0] && x.Type == data[2] && x.Password == data[1]);
                        dirty   = true;
                    }

                    foreach (var accountNumber in content.NumberInfos)
                    {
                        IEnumerable <PlainNumberInfo> userPreference = await preferences.Where(x => x.Number == accountNumber.Number).ToEnumerableAsync();

                        if (userPreference.Count() == 0)
                        {
                            await preferences.InsertAsync(new PlainNumberInfo { Number = accountNumber.Number, FriendlyName = accountNumber.Number, Gigabytes = accountNumber.Gigabytes, Minutes = accountNumber.Minutes, SMS = accountNumber.SMS, Credit = accountNumber.Credit, Brush = "#000000" });
                        }
                        else
                        {
                            var dataPreference = userPreference.First();
                            accountNumber.Brush = dataPreference.Brush;
                            if (string.IsNullOrEmpty(dataPreference.Brush))
                            {
                                accountNumber.Brush = "#000000"; //Nero
                            }
                            accountNumber.FriendlyName = dataPreference.FriendlyName;

                            if (dataPreference.NotifyEnabled)
                            {
                                if (accountNumber.SMS < dataPreference.SMSLimit && dataPreference.smsShowed == false)
                                {
                                    dirty = true;
                                    dataPreference.smsShowed = true;
                                    notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite SMS", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number)))));
                                }
                                else if (accountNumber.SMS >= dataPreference.SMSLimit)
                                {
                                    dataPreference.smsShowed = false;
                                }
                                if (accountNumber.Minutes < dataPreference.MinutesLimit && dataPreference.minShowed == false)
                                {
                                    dirty = true;
                                    dataPreference.minShowed = true;
                                    notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite minuti", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number)))));
                                }
                                else if (accountNumber.Minutes >= dataPreference.MinutesLimit)
                                {
                                    dataPreference.minShowed = false;
                                }

                                if (accountNumber.Gigabytes < dataPreference.GigabytesLimit && dataPreference.gigaShowed == false)
                                {
                                    dirty = true;
                                    dataPreference.gigaShowed = true;
                                    notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite traffico", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number)))));
                                }
                                else if (accountNumber.Gigabytes >= dataPreference.GigabytesLimit)
                                {
                                    dataPreference.gigaShowed = false;
                                }

                                if (accountNumber.Credit < dataPreference.CreditLimit && dataPreference.clShowed == false)
                                {
                                    dirty = true;
                                    dataPreference.clShowed = true;
                                    notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite credito", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number)))));
                                }
                                else if (accountNumber.Credit >= dataPreference.CreditLimit)
                                {
                                    dataPreference.clShowed = false;
                                }



                                accountNumber.CreditLimit    = dataPreference.CreditLimit;
                                accountNumber.SMSLimit       = dataPreference.SMSLimit;
                                accountNumber.GigabytesLimit = dataPreference.GigabytesLimit;
                                accountNumber.MinutesLimit   = dataPreference.MinutesLimit;
                            }

                            if (dataPreference.Credit != accountNumber.Credit ||
                                dataPreference.SMS != accountNumber.SMS ||
                                dataPreference.Gigabytes != accountNumber.Gigabytes ||
                                dataPreference.Minutes != accountNumber.Minutes)
                            {
                                dataPreference.Credit    = accountNumber.Credit;
                                dataPreference.SMS       = accountNumber.SMS;
                                dataPreference.Gigabytes = accountNumber.Gigabytes;
                                dataPreference.Minutes   = accountNumber.Minutes;

                                dirty = true;
                            }

                            if (dirty)
                            {
                                dataPreference.LastUpdate = DateTime.Now;
                                await preferences.UpdateAsync(dataPreference);
                            }
                        }


                        if (dirty)
                        {
                            var thread = new Thread(new ThreadStart(() => { XamlRendering.ConvertToJpg(accountNumber); }));

                            thread.SetApartmentState(ApartmentState.STA);
                            thread.Start();
                            thread.Join();

                            var notificationPayload =
                                string.Format(PushTemplates.NotificationTemplate,
                                              string.Format("/DataPage.xaml?number={0}", accountNumber.Number),
                                              string.Format("http://wauth.apphb.com/Tiles/{0}_159.jpg", accountNumber.Number),
                                              string.Format("http://wauth.apphb.com/Tiles/{0}_336.jpg", accountNumber.Number),
                                              string.Format("http://wauth.apphb.com/Tiles/{0}_691.jpg", accountNumber.Number));

                            var notification = new MpnsNotification(notificationPayload, new Dictionary <string, string> {
                                { "X-WindowsPhone-Target", "token" }, { "X-NotificationClass", "1" }
                            });
                            notifications.Add(notification);
                        }
                    }
                }
                catch (WrongLoginDataException)
                {
                    notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", "Dati di login errati.", string.Empty)));
                    _notificationClient.DeleteRegistrationAsync(user).Wait(); //Addio. Rientra nell'app e inserisci i dati giusti.
                }
                catch (Exception)
                {
                    continue;
                }

                var tasks = notifications.Select(x => _notificationClient.SendNotificationAsync(x, user.Tags));

                foreach (var item in tasks)
                {
                    result.Add(await item);
                }
            }

            registrationCount++;
            if (100 - sw.Elapsed.TotalSeconds <= 5)
            {
                break;
            }
        }

        return(Ok(new NotificationProcessInfo {
            Registrations = registrationCount, Notifications = result.Count
        }));
    }
示例#21
0
        public async Task <HttpResponseMessage> Get()
        {
            var ids = await hub.GetAllRegistrationsAsync(100);

            return(Request.CreateResponse(HttpStatusCode.OK, ids.ToList()));
        }