在游戏服务器上,不同模块之间会有关联,比如任务模块,等级的变化会触发不同任务的达成。此时,就要通过事件来关联两个模块。当角色升级的时候,抛出一个升级的事件,监听升级事件的模块就会被触发。
先定义事件名
public class EventNames {
/** 玩家升级事件 */
final static public String EVENT_ROLE_LEVEL_UP = "role_level_up";
}
定义事件接口,所有的事件集成统一一个接口。
public interface IEvent<T extends IEventArg> {
//事件要执行的方法
void onEvent(T arg) throws Exception;
}
定义事件的注解,在开启服务的时候,扫描包下的所有事件注解,然后将注解中的事件名当做key值,对应的事件名下的所有事件集合,因为多个类监听了同一个事件,放入一个map中。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Event {
String name() default "";
int priority() default 0;
String desc() default "";
}
对应的事件集合
//可以根据事件名,获取所有监听改事件的类,然后进行业务操作
private static Map<String, List<IEvent>> eventMap = new HashMap<