private void InitializeExponentialBackOff(ConfigurableHttpClient client, IFcmClientSettings settings)
        {
            // The Maximum Number of Retries is limited to 3 per default for a ConfigurableHttpClient. This is
            // somewhat weird, because the ExponentialBackOff Algorithm is initialized with 10 Retries per default.
            //
            // Somehow the NumTries seems to be the limiting factor here, so it basically overrides anything you
            // are going to write in the Exponential Backoff Handler.
            client.MessageHandler.NumTries = settings.ExponentialBackOffSettings.MaxNumberOfRetries;

            // Create the Default BackOff Algorithm:
            var backoff = new ExponentialBackOff(settings.ExponentialBackOffSettings.DeltaBackOff, settings.ExponentialBackOffSettings.MaxNumberOfRetries);

            // Create the Initializer. Make sure to set the Maximum Timespan between two Requests. It
            // is 16 Seconds per Default:
            var backoffInitializer = new BackOffHandler.Initializer(backoff)
            {
                MaxTimeSpan = settings.ExponentialBackOffSettings.MaxTimeSpan
            };

            // Now create the Handler:
            var initializer = new ExponentialBackOffInitializer(ExponentialBackOffPolicy.UnsuccessfulResponse503, () => new BackOffHandler(backoffInitializer));

            // And finally append the BackOff Handler, which reacts to 503 Requests:
            initializer.Initialize(client);
        }
Exemple #2
0
 private void InitializeExponentialBackOff(ConfigurableHttpClient client, IFcmClientSettings settings)
 {
     // The Maximum Number of Retries is limited to 3 per default for a ConfigurableHttpClient. This is
     // somewhat weird, because the ExponentialBackOff Algorithm is initialized with 10 Retries per default.
     //
     // Somehow the NumTries seems to be the limiting factor here, so it basically overrides anything you
     // are going to write in the Exponential Backoff Handler.
     client.MessageHandler.NumTries = settings.ExponentialBackOffSettings.MaxNumberOfRetries;
 }
Exemple #3
0
        public FcmClient(IFcmClientSettings settings, IFcmHttpClient httpClient)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (httpClient == null)
            {
                throw new ArgumentNullException("httpClient");
            }

            this.settings   = settings;
            this.httpClient = httpClient;
        }
Exemple #4
0
        public FcmClient(IFcmClientSettings settings, IJsonSerializer serializer, IFcmHttpClient httpClient)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            if (httpClient == null)
            {
                throw new ArgumentNullException(nameof(httpClient));
            }

            this.serializer = serializer;
            this.settings   = settings;
            this.httpClient = httpClient;
        }
Exemple #5
0
        public FcmHttpClient(IFcmClientSettings settings, IJsonSerializer serializer, IHttpClientFactory httpClientFactory, CreateHttpClientArgs httpClientArgs)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            this.settings   = settings;
            this.client     = httpClientFactory.CreateHttpClient(httpClientArgs);
            this.serializer = serializer;
            this.credential = CreateServiceAccountCredential(httpClientFactory, settings);

            InitializeExponentialBackOff(client, settings);
        }
Exemple #6
0
        public FcmHttpClient(IFcmClientSettings settings, HttpClient client, IJsonSerializer serializer)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (client == null)
            {
                throw new ArgumentNullException("client");
            }

            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            this.settings   = settings;
            this.client     = client;
            this.serializer = serializer;
        }
Exemple #7
0
        private static CreateHttpClientArgs CreateDefaultHttpClientArgs(IFcmClientSettings settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings", "Settings are needed to create the Default HttpClientArgs");
            }

            var args = new CreateHttpClientArgs();

            // Create the Default BackOff Algorithm:
            var backoff = new ExponentialBackOff(settings.ExponentialBackOffSettings.DeltaBackOff, settings.ExponentialBackOffSettings.MaxNumberOfRetries);

            // Create the Initializer. Make sure to set the Maximum Timespan between two Requests. It is 16 Seconds per Default:
            var backoffInitializer = new BackOffHandler.Initializer(backoff)
            {
                MaxTimeSpan = settings.ExponentialBackOffSettings.MaxTimeSpan
            };

            args.Initializers.Add(new ExponentialBackOffInitializer(ExponentialBackOffPolicy.UnsuccessfulResponse503, () => new BackOffHandler(backoffInitializer)));

            return(args);
        }
Exemple #8
0
        public FcmHttpClient(IFcmClientSettings settings, ConfigurableHttpClient client, IJsonSerializer serializer)
        {
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            if (client == null)
            {
                throw new ArgumentNullException("client");
            }

            if (serializer == null)
            {
                throw new ArgumentNullException("serializer");
            }

            this.settings   = settings;
            this.client     = client;
            this.serializer = serializer;
            this.credential = CreateServiceAccountCredential(client, settings);
        }
        private ServiceAccountCredential CreateServiceAccountCredential(ConfigurableHttpClient client, IFcmClientSettings settings)
        {
            var serviceAccountCredential = GoogleCredential.FromJson(settings.Credentials)
                                           // We need the Messaging Scope:
                                           .CreateScoped("https://www.googleapis.com/auth/firebase.messaging")
                                           // Cast to the ServiceAccountCredential:
                                           .UnderlyingCredential as ServiceAccountCredential;

            if (serviceAccountCredential == null)
            {
                throw new Exception($"Error creating ServiceAccountCredential from JSON File {settings.Credentials}");
            }

            serviceAccountCredential.Initialize(client);

            return(serviceAccountCredential);
        }
Exemple #10
0
 public FcmHttpClient(IFcmClientSettings settings)
     : this(settings, new HttpClient(), JsonSerializer.Default)
 {
 }
Exemple #11
0
 public FcmHttpClient(IFcmClientSettings settings, IHttpClientFactory httpClientFactory, CreateHttpClientArgs httpClientArgs)
     : this(settings, JsonSerializer.Default, httpClientFactory, httpClientArgs)
 {
 }
Exemple #12
0
 public FcmHttpClient(IFcmClientSettings settings)
     : this(settings, JsonSerializer.Default, new HttpClientFactory(), CreateDefaultHttpClientArgs(settings))
 {
 }
Exemple #13
0
        private ServiceAccountCredential CreateServiceAccountCredential(IHttpClientFactory httpClientFactory, IFcmClientSettings settings)
        {
            var serviceAccountCredential = GoogleCredential.FromJson(settings.Credentials)
                                           // We need the Messaging Scope:
                                           .CreateScoped("https://www.googleapis.com/auth/firebase.messaging")
                                           // Cast to the ServiceAccountCredential:
                                           .UnderlyingCredential as ServiceAccountCredential;

            if (serviceAccountCredential == null)
            {
                throw new Exception($"Error creating ServiceAccountCredential from JSON File {settings.Credentials}");
            }

            var initializer = new ServiceAccountCredential.Initializer(serviceAccountCredential.Id, serviceAccountCredential.TokenServerUrl)
            {
                User              = serviceAccountCredential.User,
                AccessMethod      = serviceAccountCredential.AccessMethod,
                Clock             = serviceAccountCredential.Clock,
                Key               = serviceAccountCredential.Key,
                Scopes            = serviceAccountCredential.Scopes,
                HttpClientFactory = httpClientFactory
            };

            return(new ServiceAccountCredential(initializer));
        }
Exemple #14
0
 public FcmClient(IFcmClientSettings settings, IJsonSerializer serializer)
     : this(settings, serializer, new FcmHttpClient(settings))
 {
 }
Exemple #15
0
 public FcmHttpClient(IFcmClientSettings settings, Google.Apis.Http.IHttpClientFactory httpClientFactory)
     : this(settings, JsonSerializer.Default, httpClientFactory, CreateDefaultHttpClientArgs(settings))
 {
 }
Exemple #16
0
 public FcmClient(IFcmClientSettings settings, IFcmHttpClient fcmHttpClient)
     : this(settings, JsonSerializer.Default, fcmHttpClient)
 {
 }
 public FcmHttpClient(IFcmClientSettings settings)
     : this(settings, new ConfigurableHttpClient(new ConfigurableMessageHandler(new HttpClientHandler())), JsonSerializer.Default)
 {
 }
Exemple #18
0
 public FcmClient(IFcmClientSettings settings)
     : this(settings, new FcmHttpClient(settings))
 {
 }