All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.chanjar.weixin.common.util.http.okhttp.OkHttpDnsClientBuilder Maven / Gradle / Ivy

The newest version!
package me.chanjar.weixin.common.util.http.okhttp;

import okhttp3.*;

import java.net.Proxy;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * OkHttpClient 连接管理器 多一个DNS解析.
 * 

大部分代码拷贝自:DefaultOkHttpClientBuilder

* * @author wulang **/ public class OkHttpDnsClientBuilder implements OkHttpClientBuilder { /** * 代理 */ private Proxy proxy; /** * 授权 */ private Authenticator authenticator; /** * 拦截器 */ private final List interceptorList = new ArrayList<>(); /** * 请求调度管理 */ private Dispatcher dispatcher; /** * 连接池 */ private ConnectionPool connectionPool; /** * 监听网络请求过程 */ private EventListener.Factory eventListenerFactory; /** * 是否支持失败重连 */ private Boolean retryOnConnectionFailure; /** * 是否允许重定向操作 */ private Boolean followRedirects; /** * 连接建立的超时时长 */ private Long connectTimeout; /** * 连接建立的超时时间单位 */ private TimeUnit connectTimeUnit; /** * 完整的请求过程超时时长 */ private Long callTimeout; /** * 完整的请求过程超时时间单位 */ private TimeUnit callTimeUnit; /** * 连接的IO读操作超时时长 */ private Long readTimeout; /** * 连接的IO读操作超时时间单位 */ private TimeUnit readTimeUnit; /** * 连接的IO写操作超时时长 */ private Long writeTimeout; /** * 连接的IO写操作超时时间单位 */ private TimeUnit writeTimeUnit; /** * ping的时间间隔 */ private Integer pingInterval; private Dns dns; private OkHttpClient okHttpClient; private OkHttpDnsClientBuilder() { } public static OkHttpDnsClientBuilder get() { return new OkHttpDnsClientBuilder(); } public Dns getDns() { return dns; } public void setDns(Dns dns) { this.dns = dns; } @Override public OkHttpClient build() { prepare(); return this.okHttpClient; } @Override public OkHttpClientBuilder proxy(Proxy proxy) { this.proxy = proxy; return this; } @Override public OkHttpClientBuilder authenticator(Authenticator authenticator) { this.authenticator = authenticator; return this; } @Override public OkHttpClientBuilder addInterceptor(Interceptor interceptor) { this.interceptorList.add(interceptor); return this; } @Override public OkHttpClientBuilder setDispatcher(Dispatcher dispatcher) { this.dispatcher = dispatcher; return this; } @Override public OkHttpClientBuilder setConnectionPool(ConnectionPool connectionPool) { this.connectionPool = connectionPool; return this; } @Override public OkHttpClientBuilder setEventListenerFactory(EventListener.Factory eventListenerFactory) { this.eventListenerFactory = eventListenerFactory; return this; } @Override public OkHttpClientBuilder setRetryOnConnectionFailure(Boolean retryOnConnectionFailure) { this.retryOnConnectionFailure = retryOnConnectionFailure; return this; } @Override public OkHttpClientBuilder setFollowRedirects(Boolean followRedirects) { this.followRedirects = followRedirects; return this; } @Override public OkHttpClientBuilder connectTimeout(Long timeout, TimeUnit unit) { this.connectTimeout = timeout; this.connectTimeUnit = unit; return this; } @Override public OkHttpClientBuilder callTimeout(Long timeout, TimeUnit unit) { this.callTimeout = timeout; this.callTimeUnit = unit; return this; } @Override public OkHttpClientBuilder readTimeout(Long timeout, TimeUnit unit) { this.readTimeout = timeout; this.readTimeUnit = unit; return this; } @Override public OkHttpClientBuilder writeTimeout(Long timeout, TimeUnit unit) { this.writeTimeout = timeout; this.writeTimeUnit = unit; return this; } @Override public OkHttpClientBuilder setPingInterval(Integer pingInterval) { this.pingInterval = pingInterval; return this; } private synchronized void prepare() { OkHttpClient.Builder builder = new OkHttpClient.Builder(); if (this.authenticator != null) { builder.authenticator(this.authenticator); } if (this.proxy != null) { builder.proxy(this.proxy); } for (Interceptor interceptor : this.interceptorList) { builder.addInterceptor(interceptor); } if (this.dispatcher != null) { builder.dispatcher(dispatcher); } if (this.connectionPool != null) { builder.connectionPool(connectionPool); } if (this.eventListenerFactory != null) { builder.eventListenerFactory(this.eventListenerFactory); } if (this.retryOnConnectionFailure != null) { builder.setRetryOnConnectionFailure$okhttp(this.retryOnConnectionFailure); } if (this.followRedirects != null) { builder.followRedirects(this.followRedirects); } if (this.dns != null) { builder.dns(this.dns); } if (this.connectTimeout != null && this.connectTimeUnit != null) { builder.connectTimeout(this.connectTimeout, this.connectTimeUnit); } if (this.callTimeout != null && this.callTimeUnit != null) { builder.callTimeout(this.callTimeout, this.callTimeUnit); } if (this.readTimeout != null && this.readTimeUnit != null) { builder.readTimeout(this.readTimeout, this.readTimeUnit); } if (this.writeTimeout != null && this.writeTimeUnit != null) { builder.writeTimeout(this.writeTimeout, this.writeTimeUnit); } if (this.pingInterval != null) { builder.setPingInterval$okhttp(this.pingInterval); } this.okHttpClient = builder.build(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy