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); }
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; }
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; }
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; }
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); }
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; }
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); }
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); }
public FcmHttpClient(IFcmClientSettings settings) : this(settings, new HttpClient(), JsonSerializer.Default) { }
public FcmHttpClient(IFcmClientSettings settings, IHttpClientFactory httpClientFactory, CreateHttpClientArgs httpClientArgs) : this(settings, JsonSerializer.Default, httpClientFactory, httpClientArgs) { }
public FcmHttpClient(IFcmClientSettings settings) : this(settings, JsonSerializer.Default, new HttpClientFactory(), CreateDefaultHttpClientArgs(settings)) { }
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)); }
public FcmClient(IFcmClientSettings settings, IJsonSerializer serializer) : this(settings, serializer, new FcmHttpClient(settings)) { }
public FcmHttpClient(IFcmClientSettings settings, Google.Apis.Http.IHttpClientFactory httpClientFactory) : this(settings, JsonSerializer.Default, httpClientFactory, CreateDefaultHttpClientArgs(settings)) { }
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) { }
public FcmClient(IFcmClientSettings settings) : this(settings, new FcmHttpClient(settings)) { }