这里介绍最原始的一种实现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
方法是不需要返回的,所以比较容易遗漏设置返回的结果。
为了更加便捷的实现各个交互,于是边出现了下面几个模式。