// Path: pluginsharelib/src/main/java/com/reginald/pluginm/demo/pluginsharelib/PluginItem.java
// public class PluginItem implements Parcelable{
//     public String pluginName;
//     public int id;
// 
//     public PluginItem(String name, int id) {
//         this.pluginName = name;
//         this.id = id;
//     }
// 
//     protected PluginItem(Parcel in) {
//         pluginName = in.readString();
//         id = in.readInt();
//     }
// 
//     public static final Creator<PluginItem> CREATOR = new Creator<PluginItem>() {
//         @Override
//         public PluginItem createFromParcel(Parcel in) {
//             return new PluginItem(in);
//         }
// 
//         @Override
//         public PluginItem[] newArray(int size) {
//             return new PluginItem[size];
//         }
//     };
// 
//     public String toString() {
//         return String.format("PluginItem[ pluginName = %s, id = %d ]", pluginName, id);
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeString(pluginName);
//         dest.writeInt(id);
//     }
// }
// 
// 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: PluginApi/src/main/java/com/reginald/pluginm/pluginapi/IInvoker.java
// public interface IInvoker {
//     /**
//      * 提供此IInvoker对外提供的Binder服务
//      * @param context
//      * @return Binder服务
//      */
//     IBinder onServiceCreate(Context context);
// 
//     /**
//      * 处理此IInvoker上的函数调用
//      * @param context
//      * @param methodName 函数名称
//      * @param params 函数参数(建议使用json等结构化数据格式)
//      * @param callback 回调 {@link IInvokeCallback}
//      * @return 结果 {@link IInvokeResult} 不要返回null。
//      */
//     IInvokeResult onInvoke(Context context, String methodName, String params, IInvokeCallback callback);
// }


import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import com.reginald.pluginm.demo.pluginsharelib.ITestPluginBinder;
import com.reginald.pluginm.demo.pluginsharelib.PluginItem;
import com.reginald.pluginm.pluginapi.IInvokeCallback;
import com.reginald.pluginm.pluginapi.IInvokeResult;
import com.reginald.pluginm.pluginapi.IInvoker;
package com.example.testplugin;



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

public class MyPluginInvoker implements IInvoker {
    private static final String TAG = "MyPluginInvoker";

    private static final String METHOD_START_MAIN = "start_main";

    private IBinder myBinder = new ITestPluginBinder.Stub() {
        @Override
// Path: pluginsharelib/src/main/java/com/reginald/pluginm/demo/pluginsharelib/PluginItem.java
// public class PluginItem implements Parcelable{
//     public String pluginName;
//     public int id;
// 
//     public PluginItem(String name, int id) {
//         this.pluginName = name;
//         this.id = id;
//     }
// 
//     protected PluginItem(Parcel in) {
//         pluginName = in.readString();
//         id = in.readInt();
//     }
// 
//     public static final Creator<PluginItem> CREATOR = new Creator<PluginItem>() {
//         @Override
//         public PluginItem createFromParcel(Parcel in) {
//             return new PluginItem(in);
//         }
// 
//         @Override
//         public PluginItem[] newArray(int size) {
//             return new PluginItem[size];
//         }
//     };
// 
//     public String toString() {
//         return String.format("PluginItem[ pluginName = %s, id = %d ]", pluginName, id);
//     }
// 
//     @Override
//     public int describeContents() {
//         return 0;
//     }
// 
//     @Override
//     public void writeToParcel(Parcel dest, int flags) {
//         dest.writeString(pluginName);
//         dest.writeInt(id);
//     }
// }
// 
// 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: PluginApi/src/main/java/com/reginald/pluginm/pluginapi/IInvoker.java
// public interface IInvoker {
//     /**
//      * 提供此IInvoker对外提供的Binder服务
//      * @param context
//      * @return Binder服务
//      */
//     IBinder onServiceCreate(Context context);
// 
//     /**
//      * 处理此IInvoker上的函数调用
//      * @param context
//      * @param methodName 函数名称
//      * @param params 函数参数(建议使用json等结构化数据格式)
//      * @param callback 回调 {@link IInvokeCallback}
//      * @return 结果 {@link IInvokeResult} 不要返回null。
//      */
//     IInvokeResult onInvoke(Context context, String methodName, String params, IInvokeCallback callback);
// }


// Path: testplugin/src/main/java/com/example/testplugin/MyPluginInvoker.java
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import com.reginald.pluginm.demo.pluginsharelib.ITestPluginBinder;
import com.reginald.pluginm.demo.pluginsharelib.PluginItem;
import com.reginald.pluginm.pluginapi.IInvokeCallback;
import com.reginald.pluginm.pluginapi.IInvokeResult;
import com.reginald.pluginm.pluginapi.IInvoker;

package com.example.testplugin;



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

public class MyPluginInvoker implements IInvoker {
    private static final String TAG = "MyPluginInvoker";

    private static final String METHOD_START_MAIN = "start_main";

    private IBinder myBinder = new ITestPluginBinder.Stub() {
        @Override
        public String basicTypes(PluginItem pluginItem) throws RemoteException {