提交 99b9c163 编写于 作者: 猴子请来的救兵_'s avatar 猴子请来的救兵_

模拟弱网支持设置0K表示不限速;请求限速支持字节数组

上级 03f987aa
......@@ -41,9 +41,25 @@ public class ByteCountBufferedSink implements BufferedSink {
return totalBytesRead;
}
@Override
public BufferedSink write(byte[] source, int offset, int byteCount) throws IOException {
if (!isOpen()) throw new IllegalStateException("closed");
//计算出要写入的次数
long count = (long) Math.ceil((double) source.length / mByteCount);
for (int i = 0; i < count; i++) {
//让每次写入的字节数精确到mByteCount 分多次写入
long newOffset = i * mByteCount;
long writeByteCount = Math.min(mByteCount, source.length - newOffset);
buffer().write(source, (int) newOffset, (int) writeByteCount);
emitCompleteSegments();
}
return this;
}
@Override
public BufferedSink emitCompleteSegments() throws IOException {
mOriginalSink.write(buffer(), mByteCount);
final Buffer buffer = buffer();
mOriginalSink.write(buffer, buffer.size());
return this;
}
......@@ -62,11 +78,6 @@ public class ByteCountBufferedSink implements BufferedSink {
return mDelegate.write(source);
}
@Override
public BufferedSink write(byte[] source, int offset, int byteCount) throws IOException {
return mDelegate.write(source, offset, byteCount);
}
@Override
public BufferedSink write(Source source, long byteCount) throws IOException {
return mDelegate.write(source, byteCount);
......
......@@ -11,6 +11,7 @@ import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
/**
* @author denghaha
......@@ -53,12 +54,8 @@ public class WeakNetworkManager {
if (timeOutMillis > 0) {
mTimeOutMillis = timeOutMillis;
}
if (requestSpeed > 0) {
mRequestSpeed = requestSpeed;
}
if (responseSpeed > 0) {
mResponseSpeed = responseSpeed;
}
mRequestSpeed = requestSpeed;
mResponseSpeed = responseSpeed;
}
public void setType(int type) {
......@@ -106,9 +103,14 @@ public class WeakNetworkManager {
Request request = chain.request();
final RequestBody body = request.body();
if (body != null) {
request = request.newBuilder().method(request.method(), new SpeedLimitRequestBody(mRequestSpeed, body)).build();
//大于0使用限速的body 否则使用原始body
final RequestBody requestBody = mRequestSpeed > 0 ? new SpeedLimitRequestBody(mRequestSpeed, body) : body;
request = request.newBuilder().method(request.method(), requestBody).build();
}
final Response response = chain.proceed(request);
return response.newBuilder().body(new SpeedLimitResponseBody(mResponseSpeed, response.body())).build();
//大于0使用限速的body 否则使用原始body
final ResponseBody responseBody = response.body();
final ResponseBody newResponseBody = mResponseSpeed > 0 ? new SpeedLimitResponseBody(mResponseSpeed, responseBody) : responseBody;
return response.newBuilder().body(newResponseBody).build();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册