// Path: PluginApi/src/main/java/com/reginald/pluginm/pluginapi/IInvokeCallback.java
// public interface IInvokeCallback {
//     /**
//      * 函数回调
//      * @param params 回调参数
//      * @return 回调结果 {@link com.reginald.pluginm.pluginapi.IInvokeResult}
//      */
//     IInvokeResult onCallback(String params);
// }
// 
// Path: PluginApi/src/main/java/com/reginald/pluginm/pluginapi/IInvokeResult.java
// public interface IInvokeResult {
//     /**
//      * 函数调用结果成功
//      */
//     int RESULT_OK = 1;
//     /**
//      * 函数调用结果失败，未找到目标IInvoker
//      */
//     int RESULT_NOT_FOUND = -1;
//     /**
//      * 函数调用结果失败，远端服务进程死亡
//      */
//     int RESULT_REMOTE_ERROR = -2;
//     /**
//      * 函数调用结果失败，非法或不支持的参数
//      */
//     int RESULT_INVOKE_INVALID = -10;
//     /**
//      * 函数调用结果失败，内部错误
//      */
//     int RESULT_INVOKE_ERROR = -11;
// 
//     /**
//      * 获取调用返回码
//      * @return 返回码
//      */
//     int getResultCode();
// 
//     /**
//      * 获取调用结果，当{@link IInvokeResult#getResultCode()} 为 {@link IInvokeResult#RESULT_OK} 时才有意义。
//      * @return 调用结果
//      */
//     String getResult();
// 
//     IInvokeResult INVOKERESULT_VOID_OK = new IInvokeResult() {
//         @Override
//         public int getResultCode() {
//             return RESULT_OK;
//         }
// 
//         @Override
//         public String getResult() {
//             return null;
//         }
//     };
// }
// 
// Path: PluginManager/src/main/java/com/reginald/pluginm/utils/Logger.java
// public class Logger {
//     public static final String TAG = "PluginM";
//     public static boolean LOG_ENABLED = BuildConfig.DEBUG_LOG;
//     public static boolean ALWAYS_SHOW_ERROR = true;
// 
//     public static void d(String tag, String msg) {
//         if (LOG_ENABLED) {
//             Log.d(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void d(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             d(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void i(String tag, String msg) {
//         if (LOG_ENABLED) {
//             Log.i(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void i(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             i(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void w(String tag, String msg) {
//         if (LOG_ENABLED) {
//             Log.w(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void w(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             w(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void w(String tag, String msg, Throwable e) {
//         if (LOG_ENABLED) {
//             Log.w(TAG, getLogMsg(tag, msg + " Exception: " + getExceptionMsg(e)));
//         }
//     }
// 
//     public static void w(String tag, Throwable e, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             w(tag, String.format(formatMsg, args), e);
//         }
//     }
// 
//     public static void e(String tag, String msg) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             Log.e(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void e(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             e(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void e(String tag, String msg, Throwable e) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             Log.e(TAG, getLogMsg(tag, msg + " Exception: " + getExceptionMsg(e)));
//         }
//     }
// 
//     public static void e(String tag, Throwable e, String formatMsg, Object... args) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             e(tag, String.format(formatMsg, args), e);
//         }
//     }
// 
//     private static String getLogMsg(String subTag, String msg) {
//         return "[" + subTag + "] " + msg;
//     }
// 
//     private static String getExceptionMsg(Throwable e) {
//         StringWriter sw = new StringWriter(1024);
//         PrintWriter pw = new PrintWriter(sw);
//         e.printStackTrace(pw);
//         pw.close();
//         return sw.toString();
//     }
// }


import android.os.RemoteException;
import com.reginald.pluginm.pluginapi.IInvokeCallback;
import com.reginald.pluginm.pluginapi.IInvokeResult;
import com.reginald.pluginm.utils.Logger;
package com.reginald.pluginm.comm.invoker;



/**
 * Created by lxy on 17-9-21.
 */

public abstract class InvokeCallbackWrapper extends InvokeCallback.Stub {
    private static final String TAG = "InvokeCallbackStub";

// Path: PluginApi/src/main/java/com/reginald/pluginm/pluginapi/IInvokeCallback.java
// public interface IInvokeCallback {
//     /**
//      * 函数回调
//      * @param params 回调参数
//      * @return 回调结果 {@link com.reginald.pluginm.pluginapi.IInvokeResult}
//      */
//     IInvokeResult onCallback(String params);
// }
// 
// Path: PluginApi/src/main/java/com/reginald/pluginm/pluginapi/IInvokeResult.java
// public interface IInvokeResult {
//     /**
//      * 函数调用结果成功
//      */
//     int RESULT_OK = 1;
//     /**
//      * 函数调用结果失败，未找到目标IInvoker
//      */
//     int RESULT_NOT_FOUND = -1;
//     /**
//      * 函数调用结果失败，远端服务进程死亡
//      */
//     int RESULT_REMOTE_ERROR = -2;
//     /**
//      * 函数调用结果失败，非法或不支持的参数
//      */
//     int RESULT_INVOKE_INVALID = -10;
//     /**
//      * 函数调用结果失败，内部错误
//      */
//     int RESULT_INVOKE_ERROR = -11;
// 
//     /**
//      * 获取调用返回码
//      * @return 返回码
//      */
//     int getResultCode();
// 
//     /**
//      * 获取调用结果，当{@link IInvokeResult#getResultCode()} 为 {@link IInvokeResult#RESULT_OK} 时才有意义。
//      * @return 调用结果
//      */
//     String getResult();
// 
//     IInvokeResult INVOKERESULT_VOID_OK = new IInvokeResult() {
//         @Override
//         public int getResultCode() {
//             return RESULT_OK;
//         }
// 
//         @Override
//         public String getResult() {
//             return null;
//         }
//     };
// }
// 
// Path: PluginManager/src/main/java/com/reginald/pluginm/utils/Logger.java
// public class Logger {
//     public static final String TAG = "PluginM";
//     public static boolean LOG_ENABLED = BuildConfig.DEBUG_LOG;
//     public static boolean ALWAYS_SHOW_ERROR = true;
// 
//     public static void d(String tag, String msg) {
//         if (LOG_ENABLED) {
//             Log.d(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void d(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             d(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void i(String tag, String msg) {
//         if (LOG_ENABLED) {
//             Log.i(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void i(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             i(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void w(String tag, String msg) {
//         if (LOG_ENABLED) {
//             Log.w(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void w(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             w(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void w(String tag, String msg, Throwable e) {
//         if (LOG_ENABLED) {
//             Log.w(TAG, getLogMsg(tag, msg + " Exception: " + getExceptionMsg(e)));
//         }
//     }
// 
//     public static void w(String tag, Throwable e, String formatMsg, Object... args) {
//         if (LOG_ENABLED) {
//             w(tag, String.format(formatMsg, args), e);
//         }
//     }
// 
//     public static void e(String tag, String msg) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             Log.e(TAG, getLogMsg(tag, msg));
//         }
//     }
// 
//     public static void e(String tag, String formatMsg, Object... args) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             e(tag, String.format(formatMsg, args));
//         }
//     }
// 
//     public static void e(String tag, String msg, Throwable e) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             Log.e(TAG, getLogMsg(tag, msg + " Exception: " + getExceptionMsg(e)));
//         }
//     }
// 
//     public static void e(String tag, Throwable e, String formatMsg, Object... args) {
//         if (LOG_ENABLED || ALWAYS_SHOW_ERROR) {
//             e(tag, String.format(formatMsg, args), e);
//         }
//     }
// 
//     private static String getLogMsg(String subTag, String msg) {
//         return "[" + subTag + "] " + msg;
//     }
// 
//     private static String getExceptionMsg(Throwable e) {
//         StringWriter sw = new StringWriter(1024);
//         PrintWriter pw = new PrintWriter(sw);
//         e.printStackTrace(pw);
//         pw.close();
//         return sw.toString();
//     }
// }


// Path: PluginManager/src/main/java/com/reginald/pluginm/comm/invoker/InvokeCallbackWrapper.java
import android.os.RemoteException;
import com.reginald.pluginm.pluginapi.IInvokeCallback;
import com.reginald.pluginm.pluginapi.IInvokeResult;
import com.reginald.pluginm.utils.Logger;

package com.reginald.pluginm.comm.invoker;



/**
 * Created by lxy on 17-9-21.
 */

public abstract class InvokeCallbackWrapper extends InvokeCallback.Stub {
    private static final String TAG = "InvokeCallbackStub";

    public static InvokeCallbackWrapper build(final IInvokeCallback iInvokeCallback) {