package com.baoshi.swms.net.callback;

import androidx.annotation.NonNull;

import com.baoshi.swms.net.inter.APICallback;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import io.reactivex.observers.DisposableObserver;
import okhttp3.ResponseBody;

/**
 * 处理各种业务逻辑及错误
 *
 * @author Zhendong Zhou
 * @date   2021/12/3 15:49
 */
public abstract class NetCallback<T> extends DisposableObserver<ResponseBody> implements APICallback<T> {
    @Override
    public void onNext(@NonNull ResponseBody body) {
    }

    @Override
    public void onComplete() {//发射成功
    }
    /**
     * 请求出错，包含网络错误
     * @param e
     */
    @Override
    public void onError(Throwable e)
    {
        onFinally();
    }
    /**
     * 自定义的一些处理方法
     * */
    @Override
    public void onFault(int code, String errorMsg){
        onFinally();
    }
    @Override
    public void onSuccess(T result){
        onFinally();
    }
    @Override
    public void onFinally() {
        //无论何种结果都执行此方法 确保重写上述方法(onComplete,onError,onFault,onSuccess)时执行super
    }

    protected Type getType() {
        //获取第一个泛型类型
        ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass();
        assert parameterizedType != null;
        return parameterizedType.getActualTypeArguments()[0];
    }
}
