Skip to content

Commit 4c2df27

Browse files
author
Evan Hu
committed
事件系统
转换器 yaml文件读取
1 parent 920bdb4 commit 4c2df27

30 files changed

+238
-484
lines changed

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,11 @@
149149
<version>4.13.1</version>
150150
<scope>test</scope>
151151
</dependency>
152+
<dependency>
153+
<groupId>com.esotericsoftware.yamlbeans</groupId>
154+
<artifactId>yamlbeans</artifactId>
155+
<version>1.15</version>
156+
</dependency>
152157
</dependencies>
153158

154159
<build>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* 创建日期: 2017年08月19日 9:57
3+
* 创建作者: 杨 强 <[email protected]>
4+
*/
5+
package info.xiaomo.gengine.config.converters;
6+
7+
8+
import info.xiaomo.gengine.config.IConverter;
9+
10+
/**
11+
* @author YangQiang
12+
*/
13+
public class IntegerArrayConverter implements IConverter<String, int[]> {
14+
@Override
15+
public int[] convert(String s) {
16+
String[] strs = s.split("#");
17+
int[] ret = new int[strs.length];
18+
for (int i = 0; i < ret.length; i++) {
19+
ret[i] = Integer.parseInt(strs[i]);
20+
}
21+
return ret;
22+
}
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* 创建日期: 2017年08月19日 10:08
3+
* 创建作者: 杨 强 <[email protected]>
4+
*/
5+
package info.xiaomo.gengine.config.converters;
6+
7+
8+
import java.util.HashMap;
9+
import java.util.Map;
10+
import info.xiaomo.gengine.config.IConverter;
11+
12+
/**
13+
* @author YangQiang
14+
*/
15+
public class IntegerMapConverter implements IConverter<int[], Map<Integer, Integer>> {
16+
@Override
17+
public Map<Integer, Integer> convert(int[] ints) {
18+
Map<Integer, Integer> map = new HashMap<>(10);
19+
if (ints != null) {
20+
int step = 2;
21+
for (int i = 1; i < ints.length; i += step) {
22+
map.put(ints[i - 1], ints[i]);
23+
}
24+
}
25+
return map;
26+
}
27+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* 创建日期: 2017年08月19日 10:01
3+
* 创建作者: 杨 强 <[email protected]>
4+
*/
5+
package info.xiaomo.gengine.config.converters;
6+
7+
8+
import java.util.Map;
9+
import info.xiaomo.gengine.config.IConverter;
10+
11+
/**
12+
* @author YangQiang
13+
*/
14+
public class MapConverter implements IConverter<String, Map<Integer, Integer>> {
15+
@Override
16+
public Map<Integer, Integer> convert(String s) {
17+
return new IntegerArrayConverter().andThen(new IntegerMapConverter()).convert(s);
18+
}
19+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/**
2+
* 创建日期: 2017年08月24日 10:56
3+
* 创建作者: 杨 强 <[email protected]>
4+
*/
5+
package info.xiaomo.gengine.config.converters;
6+
7+
import info.xiaomo.gengine.config.IConverter;
8+
import org.apache.commons.beanutils.converters.ArrayConverter;
9+
import org.apache.commons.beanutils.converters.IntegerConverter;
10+
11+
/**
12+
* @author YangQiang
13+
*/
14+
public class Matrix3IntConverter implements IConverter<String, int[][][]> {
15+
@Override
16+
public int[][][] convert(String str) {
17+
if (str == null || str.isEmpty()) {
18+
return new int[0][][];
19+
}
20+
// 格式 1,2;3,4|5,6 => [[[1, 2], [3, 4]], [[5,6]]]
21+
// 基本类型
22+
IntegerConverter integerConverter = new IntegerConverter();
23+
// 一维数组 默认使用逗号分割
24+
ArrayConverter arrayConverter1 = new ArrayConverter(int[].class, integerConverter);
25+
26+
// 二维数组
27+
ArrayConverter arrayConverter2 = new ArrayConverter(int[][].class, arrayConverter1);
28+
// 使用分号分割
29+
arrayConverter2.setDelimiter(';');
30+
arrayConverter2.setAllowedChars(new char[]{','});
31+
32+
// 二维数组
33+
ArrayConverter arrayConverter3 = new ArrayConverter(int[][].class, arrayConverter2);
34+
// 使用竖线分割
35+
arrayConverter3.setDelimiter('|');
36+
arrayConverter3.setAllowedChars(new char[]{';', ','});
37+
38+
return arrayConverter3.convert(int[][][].class, str);
39+
}
40+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package info.xiaomo.gengine.event;
2+
3+
/**
4+
* desc : 事件类型
5+
* Copyright(©) 2017 by xiaomo.
6+
*/
7+
public interface BasicEventType {
8+
/**
9+
* 登录
10+
*/
11+
int LOGIN = 1;
12+
/**
13+
* 登出
14+
*/
15+
int LOGOUT = 2;
16+
/**
17+
* 服务器分钟心跳
18+
*/
19+
int SERVER_MINUTE_HEART = 3;
20+
/**
21+
* 服务器零点事件
22+
*/
23+
int SERVER_MIDNIGHT = 4;
24+
/**
25+
* 服务器秒心跳
26+
*/
27+
int SERVER_SECOND_HEART = 5;
28+
/**
29+
* 关服事件
30+
*/
31+
int SERVER_SHUTDOWN = 6;
32+
33+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package info.xiaomo.gengine.event;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
/**
11+
* 由于事件都是预先注册好的,所以这里不考虑多线程问题,不允许在游戏运行过成中动态添加观察者
12+
*
13+
* @author 张力
14+
* 2014-12-6 上午11:19:00
15+
*/
16+
public class EventUtil {
17+
18+
/**
19+
* 游戏启动就初始化的监听者列表
20+
*/
21+
private final static Map<Integer, List<IEventListener>> PREPARED_LISTENERS = new HashMap<>(10);
22+
23+
/**
24+
* 游戏运行中动态添加的监听者列表
25+
*/
26+
private final static Logger LOGGER = LoggerFactory.getLogger(EventUtil.class);
27+
28+
public static void addListener(IEventListener listener, Integer type) {
29+
List<IEventListener> listenerList = PREPARED_LISTENERS.computeIfAbsent(type, k -> new ArrayList<>());
30+
listenerList.add(listener);
31+
}
32+
33+
public static void fireEvent(Integer type) {
34+
fireEvent(type, null);
35+
}
36+
37+
public static void fireEvent(Integer type, Object obj) {
38+
39+
List<IEventListener> listenerList = PREPARED_LISTENERS.get(type);
40+
if (listenerList != null) {
41+
for (IEventListener listener : listenerList) {
42+
try {
43+
listener.update(type, obj);
44+
} catch (Exception e) {
45+
LOGGER.error("事件执行错误", e);
46+
}
47+
}
48+
}
49+
}
50+
51+
52+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package info.xiaomo.gengine.event;
2+
3+
/**
4+
* Copyright(©) 2017 by xiaomo.
5+
*/
6+
public interface IEventListener {
7+
8+
/**
9+
* 更新
10+
*
11+
* @param type type
12+
* @param param param
13+
*/
14+
void update(Integer type, Object param);
15+
16+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package info.xiaomo.gengine.utils;
2+
3+
import java.io.FileInputStream;
4+
import java.io.FileNotFoundException;
5+
import java.io.InputStream;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.yaml.snakeyaml.Yaml;
8+
9+
@Slf4j
10+
public class YamlUtil {
11+
12+
public static <T> T read(String file, Class<T> clazz) {
13+
InputStream input;
14+
try {
15+
input = new FileInputStream(file);
16+
} catch (FileNotFoundException e) {
17+
log.error("读取yaml文件失败:{}", file, e);
18+
return null;
19+
}
20+
Yaml yaml = new Yaml();
21+
return yaml.loadAs(input, clazz);
22+
}
23+
}

0 commit comments

Comments
 (0)