package com.doumee.lib_coremodel.http.interceptor; 
 | 
  
 | 
import java.io.IOException; 
 | 
  
 | 
  
 | 
import okhttp3.MediaType; 
 | 
import okhttp3.ResponseBody; 
 | 
import okio.Buffer; 
 | 
import okio.BufferedSource; 
 | 
import okio.ForwardingSource; 
 | 
import okio.Okio; 
 | 
import okio.Source; 
 | 
  
 | 
/** 
 | 
 * Created by goldze on 2017/5/11. 
 | 
 */ 
 | 
  
 | 
public class ProgressResponseBody extends ResponseBody { 
 | 
    private ResponseBody responseBody; 
 | 
  
 | 
    private BufferedSource bufferedSource; 
 | 
    private String tag; 
 | 
  
 | 
    public ProgressResponseBody(ResponseBody responseBody) { 
 | 
        this.responseBody = responseBody; 
 | 
    } 
 | 
  
 | 
    public ProgressResponseBody(ResponseBody responseBody, String tag) { 
 | 
        this.responseBody = responseBody; 
 | 
        this.tag = tag; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public MediaType contentType() { 
 | 
        return responseBody.contentType(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long contentLength() { 
 | 
        return responseBody.contentLength(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public BufferedSource source() { 
 | 
        if (bufferedSource == null) { 
 | 
            bufferedSource = Okio.buffer(source(responseBody.source())); 
 | 
        } 
 | 
        return bufferedSource; 
 | 
    } 
 | 
  
 | 
    private Source source(Source source) { 
 | 
        return new ForwardingSource(source) { 
 | 
            long bytesReaded = 0; 
 | 
  
 | 
            @Override 
 | 
            public long read(Buffer sink, long byteCount) throws IOException { 
 | 
                long bytesRead = super.read(sink, byteCount); 
 | 
                bytesReaded += bytesRead == -1 ? 0 : bytesRead; 
 | 
                //使用RxBus的方式,实时发送当前已读取(上传/下载)的字节数据 
 | 
                //TODO 实时发送当前已读取(上传/下载)的字节数据 
 | 
                //RxBus.getDefault().post(new DownLoadStateBean(contentLength(), bytesReaded, tag)); 
 | 
                return bytesRead; 
 | 
            } 
 | 
        }; 
 | 
    } 
 | 
} 
 |