这里介绍最原始的一种实现Interaction,只需要实现Interaction接口或者基础InteractionEntity抽象类。

下面是Interaction接口具体内容:

public interface Interaction {

    /**
     * 初始化,只有在调用初始化后才会
     * 
     * @param isAsynchronous 是否为异步模式。
     * @throws InitializationException 如果初始化失败则该异常将会被抛出。
     */
    public void init(boolean isAsynchronous) throws InitializationException;

    /**
     * 交互逻辑的实现接口。
     * 
     * @param ctx 上下文。
     * @param evt 事件。
     */
    public void interactive(Context ctx, Event evt);

    /**
     * 销毁。
     */
    public void deInit();

}

下面是InteractionEntity具体内容:

public abstract class InteractionEntity implements Interaction {

    public void init(boolean isAsynchronous) throws InitializationException {
        //do nothing.
    }

    public void deInit() {
        //do nothing.
    }

}

可以看到InteractionEntity也是Interaction的子类,只是屏蔽了初始化和销毁的方法。那么这里只需要你关注interactive方法。下面给一个interactive方法实现的模板:

 public void interactive(Context ctx, Event evt) {
       InteractiveBaseRequest request = evt.getMessage();//or InteractiveBaseRequest sub class
        //.... do business
        InteractiveBaseResponse response = ....// or InteractiveBaseResponse sub class
        ctx.curPromise().setResult(response);
    }

这里需要从evt里面获取request的参数,并且需要把处理完的结果设置到当前的promise里面(这个很重要,否则前端将无法得到处理的结果

这里列举一下这个问题的注意点
1、evt.getMessage()需要强制转换成当前交互的具体InteractiveBaseRequest的子类
2、ctx.curPromise().setResult(response)需要手动设置返回结果,因为方法interactive方法是不需要返回的,所以比较容易遗漏设置返回的结果。

为了更加便捷的实现各个交互,于是边出现了下面几个模式。