Esempio n. 1
0
 private Source(int id, string address, Enums.Environment environment, bool deleted)
 {
     Id          = id;
     Address     = address;
     Environment = environment;
     Deleted     = deleted;
 }
Esempio n. 2
0
        public static Source Create(int id, string address, Enums.Environment environment)
        {
            if (String.IsNullOrEmpty(address))
            {
                throw new ArgumentNullException();
            }

            var deleted = false;

            return(new Source(id, address, environment, deleted));
        }
Esempio n. 3
0
        /// <summary>
        /// MpesaClient that creates a client using httpclientfactory
        /// </summary>
        /// <param name="client">HttpClient Instance from httpClientFactory</param>
        public MpesaClient(Enums.Environment environment)
        {
            var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError()
                              .WaitAndRetryAsync(1, retryAttempt =>
            {
                return(TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 100)));
            });

            var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy <HttpResponseMessage>();

            var services = new ServiceCollection();

            services.AddHttpClient("MpesaApiClient", client =>
            {
                switch (environment)
                {
                case Enums.Environment.Sandbox:
                    client.BaseAddress = MpesaRequestEndpoint.SandboxBaseAddress;
                    client.Timeout     = TimeSpan.FromMinutes(10);
                    break;

                case Enums.Environment.Live:
                    client.BaseAddress = MpesaRequestEndpoint.LiveBaseAddress;
                    client.Timeout     = TimeSpan.FromMinutes(10);
                    break;

                default:
                    break;
                }
            }).ConfigurePrimaryHttpMessageHandler(messageHandler =>
            {
                var handler = new HttpClientHandler();

                if (handler.SupportsAutomaticDecompression)
                {
                    handler.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                }

                return(handler);
            }).AddPolicyHandler(request => request.Method.Equals(HttpMethod.Get) ? retryPolicy : noOpPolicy);

            var serviceProvider = services.BuildServiceProvider();

            var httpClientFactory = serviceProvider.GetService <IHttpClientFactory>();

            _client = httpClientFactory.CreateClient("MpesaApiClient");
        }
Esempio n. 4
0
        /// <summary>
        /// Creating a mpesa service collection to be used in projects that support dependency injection.
        /// </summary>
        /// <param name="services"></param>
        public static void AddMpesaService(this IServiceCollection services, Enums.Environment environment)
        {
            Random jitterer = new Random();

            var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError()
                              .WaitAndRetryAsync(1, retryAttempt =>
            {
                return(TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 100)));
            });

            var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy <HttpResponseMessage>();

            services.AddHttpClient <IMpesaClient, MpesaClient>(options =>
            {
                switch (environment)
                {
                case Enums.Environment.Sandbox:
                    options.BaseAddress = MpesaRequestEndpoint.SandboxBaseAddress;
                    options.Timeout     = TimeSpan.FromMinutes(10);
                    break;

                case Enums.Environment.Live:
                    options.BaseAddress = MpesaRequestEndpoint.LiveBaseAddress;
                    options.Timeout     = TimeSpan.FromMinutes(10);
                    break;

                default:
                    break;
                }
            }).ConfigurePrimaryHttpMessageHandler(messageHandler =>
            {
                var handler = new HttpClientHandler();

                if (handler.SupportsAutomaticDecompression)
                {
                    handler.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                }

                return(handler);
            }).AddPolicyHandler(request => request.Method.Equals(HttpMethod.Get) ? retryPolicy : noOpPolicy);
        }
Esempio n. 5
0
        /// <summary>
        /// Creating a mpesa service collection with http handler to be used in projects that support dependency injection.
        /// </summary>
        /// Type parameter THandler to pass native implementations of HttpmessageHandler
        /// <param name="services"></param>
        public static void AddMpesaService <THandler>(this IServiceCollection services, Enums.Environment environment) where THandler : HttpMessageHandler
        {
            Random jitterer = new Random();

            var retryPolicy = HttpPolicyExtensions.HandleTransientHttpError()
                              .WaitAndRetryAsync(1, retryAttempt =>
            {
                return(TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)) + TimeSpan.FromMilliseconds(jitterer.Next(0, 100)));
            });

            var noOpPolicy = Policy.NoOpAsync().AsAsyncPolicy <HttpResponseMessage>();

            services.AddHttpClient <IMpesaClient, MpesaClient>(options =>
            {
                switch (environment)
                {
                case Enums.Environment.Sandbox:
                    options.BaseAddress = MpesaRequestEndpoint.SandboxBaseAddress;
                    options.Timeout     = TimeSpan.FromMinutes(10);
                    break;

                case Enums.Environment.Live:
                    options.BaseAddress = MpesaRequestEndpoint.LiveBaseAddress;
                    options.Timeout     = TimeSpan.FromMinutes(10);
                    break;

                default:
                    break;
                }
            })
            .SetHandlerLifetime(Timeout.InfiniteTimeSpan)
            .ConfigurePrimaryHttpMessageHandler <THandler>()
            .AddPolicyHandler(request => request.Method.Equals(HttpMethod.Get) ? retryPolicy : noOpPolicy);
        }
Esempio n. 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ServiceFactory"/> class.
 /// </summary>
 /// <param name="environment">The environment.</param>
 /// <param name="configureAwait">The value used for <see cref="Task.ConfigureAwait"/> method.</param>
 public ServiceFactory(Environment environment, bool configureAwait = false)
 {
     _environment    = environment;
     _configureAwait = configureAwait;
 }