事件机制
在一个游戏系统中,客户端使用事件机制用的也是比较多的,在这边也将服务端的事件机制实现下
事件:事件先预设了触发条件及处理方法,在实际使用时,通过触发相关条件,调用对应方法。
举个例子,在有界面的开发中,肯定都有button,button都会和某个方法进行绑定,当用户点击button,就会触发这个方法。这个就是事件
一般事件都需要有几个通用方法,监听事件,移除事件,发送事件。
像我们做的这个就没有这么复杂,算是一个简版的事件,不支持动态添加事件。所以只有添加监听事件,和发送事件。
事件的存储使用一个map管理,里面包含 触发事件的key(EventType)和具体执行的方法value(IEventListener的实现类)
然后通过EventUtil.fire(key)进行触发。
EventUtil.java 事件的操作方法,
IEventListener.java 事件的基类
CommonValue.java 事件的key值,EventType
EventRegister.java 注册事件
LoginEventListener.java 具体的事件实现类
UserServiceImpl.java 触发事件,调用EventUtil.fireEvent(CommonValue.EVENT_TYPE_LOGIN);
具体看下
IEventListener是一个接口,里面就一个方法execute
/**
* 事件的具体执行
* 可以传入参数
* @param param param
*/
void execute(Object param);
EventUtil
里面有个map,用于存放触发key和事件数组(可以组合各个事件)
addListener方法注册事件
fireEvent为执行事件
EventRegister
把事件的注册,都写到这个类里面,在服务启动的时候运行
registerPreparedListeners
LoginEventListener
实现IEventListener,重写execute方法。
CommonValue
/***************************************事件消息号**********************************************/
public static final int EVENT_TYPE_LOGIN = 1001;
public static final int EVENT_TYPE_LOGOUT = 1002;
UserServiceImpl
模拟调用过程,只要进行发送就行了
EventUtil.fireEvent(CommonValue.EVENT_TYPE_LOGIN);
详细代码
EventUtil.java 事件的操作方法,
/*
* Copyright (C), 2015-2018
* FileName: EventUtil
* Author: zhao
* Date: 2018/7/20 11:16
* Description: 事件工具类
* History:
*
IEventListener.java 事件的基类
/*
* Copyright (C), 2015-2018
* FileName: IEventListener
* Author: zhao
* Date: 2018/7/20 11:07
* Description: Event的基类
* History:
*
CommonValue.java 事件的key值,EventType
/***************************************事件消息号**********************************************/
public static final int EVENT_TYPE_LOGIN = 1001;
public static final int EVENT_TYPE_LOGOUT = 1002;
EventRegister.java 注册事件
/*
* Copyright (C), 2015-2018
* FileName: EventRegister
* Author: zhao
* Date: 2018/7/20 11:28
* Description: 事件注册
* History:
*
LoginEventListener.java 具体的事件实现类
/*
* Copyright (C), 2015-2018
* FileName: LoginEventListener
* Author: zhao
* Date: 2018/7/20 14:57
* Description: 登录事件
* History:
*
上面的代码在码云上 https://gitee.com/lizhaoandroid/JgServer
可以加qq群一起探讨Java游戏服务器开发的相关知识 676231564