package com.cheng.networkframestudy.okhttp.frame.request;
import com.cheng.networkframestudy.okhttp.frame.OkHttpUtil;
import com.cheng.networkframestudy.okhttp.frame.callback.Callback;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/**
* 李旺成
* 2016年2月20日08:23:31
*/
public class RequestCall {
private OkHttpRequest mOkHttpRequest;
private Request mRequest;
private Call mCall;
private long mReadTimeOut;
private long mWriteTimeOut;
private long mConnTimeOut;
private OkHttpClient mClone;
public RequestCall(OkHttpRequest request) {
this.mOkHttpRequest = request;
}
public RequestCall readTimeOut(long readTimeOut) {
this.mReadTimeOut = readTimeOut;
return this;
}
public RequestCall writeTimeOut(long writeTimeOut) {
this.mWriteTimeOut = writeTimeOut;
return this;
}
public RequestCall connTimeOut(long connTimeOut) {
this.mConnTimeOut = connTimeOut;
return this;
}
public Call generateCall(Callback callback) {
mRequest = generateRequest(callback);
if (mReadTimeOut > 0 || mWriteTimeOut > 0 || mConnTimeOut > 0) {
mReadTimeOut = mReadTimeOut > 0 ? mReadTimeOut : OkHttpUtil.DEFAULT_MILLISECONDS;
mWriteTimeOut = mWriteTimeOut > 0 ? mWriteTimeOut : OkHttpUtil.DEFAULT_MILLISECONDS;
mConnTimeOut = mConnTimeOut > 0 ? mConnTimeOut : OkHttpUtil.DEFAULT_MILLISECONDS;
mClone = OkHttpUtil.getInstance().getOkHttpClient().newBuilder()
.readTimeout(mReadTimeOut, TimeUnit.MILLISECONDS)
.writeTimeout(mWriteTimeOut, TimeUnit.MILLISECONDS)
.connectTimeout(mConnTimeOut, TimeUnit.MILLISECONDS)
.build();
mCall = mClone.newCall(mRequest);
} else {
mCall = OkHttpUtil.getInstance().getOkHttpClient().newCall(mRequest);
}
return mCall;
}
private Request generateRequest(Callback callback) {
return mOkHttpRequest.generateRequest(callback);
}
public void execute(Callback callback) {
generateCall(callback);
if (callback != null) {
callback.onBefore(mRequest);
}
OkHttpUtil.getInstance().execute(this, callback);
}
public Call getCall() {
return mCall;
}
public Request getRequest() {
return mRequest;
}
public OkHttpRequest getOkHttpRequest() {
return mOkHttpRequest;
}
public Response execute() throws IOException {
generateCall(null);
return mCall.execute();
}
public void cancel() {
if (mCall != null) {
mCall.cancel();
}
}
}