[]
        
(Showing Draft Content)

上下文参数值传递

在使用命令的过程中,经常会在上下文参数中添加对应的值。

  • 传递基本类型的值,用int类型举例

比如:

public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        dataContext.getParameters().put("number", 1);
        return new ExecuteResult();
    }

    @Override
    public String toString() {
        return "我的服务端命令插件";
    }
}
public class MyPluginServerCommand3 extends Command implements ICommandExecutableInServerSide {

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        var number = (int)dataContext.getParameters().get("number");
        executeResult.getReturnValues().put("number", number);
        return executeResult;
    }

    @Override
    public String toString() {
        return "我的服务端命令插件3";
    }
}
  • 传递对象类型的值

比如:

public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        JavaChildren javaChildren = new JavaChildren();
        javaChildren.setName("Zhang San");
        javaChildren.setAge(30);
        dataContext.getParameters().put("用户", javaChildren);
        return new ExecuteResult();
    }

    @Override
    public String toString() {
        return "我的服务端命令插件";
    }
}
@Data
public class JavaChildren extends ObjectPropertyBase {

    private String name;

    private int age;
}

上面命令中,给上下文参数添加了一个key 为“用户” 的 javaChildren 对象。

当如果你在同一个插件的工程中获取当前上下文的 “用户” 参数的 value。可以直接获取到一个 javaChildren 对象。

public class MyPluginServerCommand3 extends Command implements ICommandExecutableInServerSide {

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        var javaChildren = (JavaChildren)dataContext.getParameters().get("用户");
        var executeResult = new ExecuteResult();
        executeResult.getReturnValues().put("Name", javaChildren.getName());
        return executeResult;
    }

    @Override
    public String toString() {
        return "我的服务端命令插件3";
    }
}

 如果是另一个插件工程中获取当前当前上下文的 “用户” 参数的 value。此工程中不存在 javaChildren 类。或者类结构和 javaChildren 不相同的时候。此时获取到的 value 是一个Map<String,Object>。 其中key即为 javaChildren 各个属性的名称,value即为对应属性的值。

代码如下:

public class MyPluginServerCommand2 extends Command implements ICommandExecutableInServerSide {

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        var map = (Map<String,Object>)dataContext.getParameters().get("用户");
        var executeResult = new ExecuteResult();
        executeResult.getReturnValues().put("Name", map.get("name"));
        return executeResult;
    }

    @Override
    public String toString() {
        return "我的服务端命令插件2";
    }
}
  • 传递 List 或 Array 之类的集合,统一会转成 list 类型。如果其中的元素为自定义对象类型。list 中的元素取值和 上数自定义对象类型一致。