Переход на свой EventBus
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package mc.core;
|
package mc.core;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import mc.core.eventbus.EventBus;
|
||||||
|
import mc.core.eventbus.Subscriber;
|
||||||
import mc.core.eventbus.events.CS_PlayerMoveEvent;
|
import mc.core.eventbus.events.CS_PlayerMoveEvent;
|
||||||
import mc.core.eventbus.events.SC_ChunkLoadEvent;
|
import mc.core.eventbus.events.SC_ChunkLoadEvent;
|
||||||
import mc.core.eventbus.events.SC_ChunkUnloadEvent;
|
import mc.core.eventbus.events.SC_ChunkUnloadEvent;
|
||||||
@@ -14,12 +16,11 @@ import java.util.Iterator;
|
|||||||
public class CoreEventListener {
|
public class CoreEventListener {
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void registerEventHandlers() {
|
public void registerEventHandlers() {
|
||||||
// EventBusGetter.getInstance().register(this);
|
EventBus.getInstance().registerSubscribes(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscriber
|
||||||
public void handlerPlayerMoveEvent(CS_PlayerMoveEvent event) {
|
public void handlerPlayerMoveEvent(CS_PlayerMoveEvent event) {
|
||||||
log.trace("(GameLoop) playerMoveEventHandler()");
|
|
||||||
|
|
||||||
Chunk chunk;
|
Chunk chunk;
|
||||||
chunk = event.getPlayer().getWorld().getChunk(event.getOldLocation().toBlockLocation()); // Old chunk
|
chunk = event.getPlayer().getWorld().getChunk(event.getOldLocation().toBlockLocation()); // Old chunk
|
||||||
int ccX = chunk.getX();
|
int ccX = chunk.getX();
|
||||||
@@ -47,7 +48,7 @@ public class CoreEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!eventChunkUnload.getNeedUnloadChunks().isEmpty()) {
|
if (!eventChunkUnload.getNeedUnloadChunks().isEmpty()) {
|
||||||
// EventBusGetter.getInstance().post(eventChunkUnload);
|
EventBus.getInstance().post(eventChunkUnload);
|
||||||
}
|
}
|
||||||
|
|
||||||
SC_ChunkLoadEvent eventChunkLoad = new SC_ChunkLoadEvent(event.getPlayer());
|
SC_ChunkLoadEvent eventChunkLoad = new SC_ChunkLoadEvent(event.getPlayer());
|
||||||
@@ -64,7 +65,7 @@ public class CoreEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!eventChunkLoad.getNeedLoadChunks().isEmpty()) {
|
if (!eventChunkLoad.getNeedLoadChunks().isEmpty()) {
|
||||||
// EventBusGetter.getInstance().post(eventChunkLoad);
|
EventBus.getInstance().post(eventChunkLoad);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ package mc.core;
|
|||||||
|
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import mc.core.eventbus.EventBus;
|
||||||
import mc.core.player.PlayerManager;
|
import mc.core.player.PlayerManager;
|
||||||
import mc.core.time.TimeProcessor;
|
import mc.core.time.TimeProcessor;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -47,6 +48,8 @@ public class GameLoop extends Thread {
|
|||||||
|
|
||||||
/* --- --- --- */
|
/* --- --- --- */
|
||||||
|
|
||||||
|
EventBus.getInstance().process();
|
||||||
|
|
||||||
/* TODO нужно перенести этот функционал на Network */
|
/* TODO нужно перенести этот функционал на Network */
|
||||||
playerManager.getBroadcastChannel().sendTimeUpdate(
|
playerManager.getBroadcastChannel().sendTimeUpdate(
|
||||||
gameTimer.getGameTime(),
|
gameTimer.getGameTime(),
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import java.util.stream.Stream;
|
|||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class EventBus {
|
public class EventBus {
|
||||||
@Getter
|
@Getter
|
||||||
private static final EventBus insnance = new EventBus();
|
private static final EventBus instance = new EventBus();
|
||||||
|
|
||||||
private Queue<Event> eventQueue = new ConcurrentLinkedQueue<>();
|
private Queue<Event> eventQueue = new ConcurrentLinkedQueue<>();
|
||||||
private Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = new HashMap<>();
|
private Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = new HashMap<>();
|
||||||
|
|||||||
@@ -26,21 +26,21 @@ class TestEventBus {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private Map<Class<? extends Event>, List<Pair<Object, Method>>> getEventBusFieldSubscribes() {
|
private Map<Class<? extends Event>, List<Pair<Object, Method>>> getEventBusFieldSubscribes() {
|
||||||
return (Map<Class<? extends Event>, List<Pair<Object, Method>>>)
|
return (Map<Class<? extends Event>, List<Pair<Object, Method>>>)
|
||||||
Whitebox.getInternalState(EventBus.getInsnance(), "subscribes");
|
Whitebox.getInternalState(EventBus.getInstance(), "subscribes");
|
||||||
}
|
}
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
void before() {
|
void before() {
|
||||||
getEventBusFieldSubscribes().clear();
|
getEventBusFieldSubscribes().clear();
|
||||||
((Queue<Event>) Whitebox.getInternalState(EventBus.getInsnance(), "eventQueue")).clear();
|
((Queue<Event>) Whitebox.getInternalState(EventBus.getInstance(), "eventQueue")).clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testRegisterSubscribes() {
|
void testRegisterSubscribes() {
|
||||||
DumbEventHandler handler = new DumbEventHandler();
|
DumbEventHandler handler = new DumbEventHandler();
|
||||||
EventBus.getInsnance().registerSubscribes(handler);
|
EventBus.getInstance().registerSubscribes(handler);
|
||||||
|
|
||||||
Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = getEventBusFieldSubscribes();
|
Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = getEventBusFieldSubscribes();
|
||||||
assertEquals(1, subscribes.size());
|
assertEquals(1, subscribes.size());
|
||||||
@@ -56,9 +56,9 @@ class TestEventBus {
|
|||||||
@Test
|
@Test
|
||||||
void testUnregisterSubscribes() {
|
void testUnregisterSubscribes() {
|
||||||
DumbEventHandler handler = new DumbEventHandler();
|
DumbEventHandler handler = new DumbEventHandler();
|
||||||
EventBus.getInsnance().registerSubscribes(handler);
|
EventBus.getInstance().registerSubscribes(handler);
|
||||||
|
|
||||||
EventBus.getInsnance().unregisterSubscribes(handler);
|
EventBus.getInstance().unregisterSubscribes(handler);
|
||||||
|
|
||||||
Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = getEventBusFieldSubscribes();
|
Map<Class<? extends Event>, List<Pair<Object, Method>>> subscribes = getEventBusFieldSubscribes();
|
||||||
assertEquals(0, subscribes.size());
|
assertEquals(0, subscribes.size());
|
||||||
@@ -67,21 +67,21 @@ class TestEventBus {
|
|||||||
@Test
|
@Test
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
void testPost() {
|
void testPost() {
|
||||||
EventBus.getInsnance().post(new DumbEvent());
|
EventBus.getInstance().post(new DumbEvent());
|
||||||
|
|
||||||
Queue<Event> eventQueue = (Queue<Event>) Whitebox.getInternalState(EventBus.getInsnance(), "eventQueue");
|
Queue<Event> eventQueue = (Queue<Event>) Whitebox.getInternalState(EventBus.getInstance(), "eventQueue");
|
||||||
assertEquals(1, eventQueue.size());
|
assertEquals(1, eventQueue.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testProcess() {
|
void testProcess() {
|
||||||
Stream.of(new DumbEventHandler("D1 "), new DumbEventHandler("D2 "))
|
Stream.of(new DumbEventHandler("D1 "), new DumbEventHandler("D2 "))
|
||||||
.forEach(handler -> EventBus.getInsnance().registerSubscribes(handler));
|
.forEach(handler -> EventBus.getInstance().registerSubscribes(handler));
|
||||||
|
|
||||||
Stream.of(new DumbEvent("message 1"), new DumbEvent("message 2"))
|
Stream.of(new DumbEvent("message 1"), new DumbEvent("message 2"))
|
||||||
.forEach(event -> EventBus.getInsnance().post(event));
|
.forEach(event -> EventBus.getInstance().post(event));
|
||||||
|
|
||||||
EventBus.getInsnance().process();
|
EventBus.getInstance().process();
|
||||||
|
|
||||||
assertEquals(4, resultList.size());
|
assertEquals(4, resultList.size());
|
||||||
assertEquals("D1 message 1", resultList.get(0));
|
assertEquals("D1 message 1", resultList.get(0));
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import io.netty.channel.socket.nio.NioServerSocketChannel;
|
|||||||
import io.netty.util.AttributeKey;
|
import io.netty.util.AttributeKey;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import mc.core.eventbus.EventBus;
|
||||||
import mc.core.network.Server;
|
import mc.core.network.Server;
|
||||||
import mc.core.network.StartServerException;
|
import mc.core.network.StartServerException;
|
||||||
import mc.core.network.proto_1_12_2.State;
|
import mc.core.network.proto_1_12_2.State;
|
||||||
@@ -64,7 +65,7 @@ public class NettyServer implements Server {
|
|||||||
public void start() throws StartServerException {
|
public void start() throws StartServerException {
|
||||||
log.info("Use protocol {}", StatusResponsePacket.NAME);
|
log.info("Use protocol {}", StatusResponsePacket.NAME);
|
||||||
|
|
||||||
// EventBusGetter.getInstance().register(new PlayerEventListener());
|
EventBus.getInstance().registerSubscribes(new PlayerEventListener());
|
||||||
|
|
||||||
bossGroup = new NioEventLoopGroup(1);
|
bossGroup = new NioEventLoopGroup(1);
|
||||||
workerGroup = new NioEventLoopGroup(workerGroupCount);
|
workerGroup = new NioEventLoopGroup(workerGroupCount);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mc.core.network.proto_1_12_2.netty;
|
package mc.core.network.proto_1_12_2.netty;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import mc.core.eventbus.Subscriber;
|
||||||
import mc.core.eventbus.events.SC_ChunkLoadEvent;
|
import mc.core.eventbus.events.SC_ChunkLoadEvent;
|
||||||
import mc.core.eventbus.events.SC_ChunkUnloadEvent;
|
import mc.core.eventbus.events.SC_ChunkUnloadEvent;
|
||||||
import mc.core.eventbus.events.SC_PlayerMoveEvent;
|
import mc.core.eventbus.events.SC_PlayerMoveEvent;
|
||||||
@@ -12,7 +13,8 @@ import mc.core.utils.CompactedCoords;
|
|||||||
import mc.core.world.chunk.Chunk;
|
import mc.core.world.chunk.Chunk;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
class PlayerEventListener {
|
public class PlayerEventListener {
|
||||||
|
@Subscriber
|
||||||
public void playerMoveEventHandler(SC_PlayerMoveEvent event) {
|
public void playerMoveEventHandler(SC_PlayerMoveEvent event) {
|
||||||
log.debug("(SC) playerMoveEventHandler()");
|
log.debug("(SC) playerMoveEventHandler()");
|
||||||
PlayerPositionAndLookPacket packet = new PlayerPositionAndLookPacket();
|
PlayerPositionAndLookPacket packet = new PlayerPositionAndLookPacket();
|
||||||
@@ -23,6 +25,7 @@ class PlayerEventListener {
|
|||||||
event.getPlayer().getChannel().writeAndFlush(packet);
|
event.getPlayer().getChannel().writeAndFlush(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscriber
|
||||||
public void playerChunkLoadHandler(SC_ChunkLoadEvent event) {
|
public void playerChunkLoadHandler(SC_ChunkLoadEvent event) {
|
||||||
for(Integer compressXZ : event.getNeedLoadChunks()) {
|
for(Integer compressXZ : event.getNeedLoadChunks()) {
|
||||||
int[] xz = CompactedCoords.uncompressXZ(compressXZ);
|
int[] xz = CompactedCoords.uncompressXZ(compressXZ);
|
||||||
@@ -38,6 +41,7 @@ class PlayerEventListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Subscriber
|
||||||
public void playerChunkUnloadHandler(SC_ChunkUnloadEvent event) {
|
public void playerChunkUnloadHandler(SC_ChunkUnloadEvent event) {
|
||||||
for(Integer compressXZ : event.getNeedUnloadChunks()) {
|
for(Integer compressXZ : event.getNeedUnloadChunks()) {
|
||||||
int[] xz = CompactedCoords.uncompressXZ(compressXZ);
|
int[] xz = CompactedCoords.uncompressXZ(compressXZ);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package mc.core.network.proto_1_12_2.netty.handlers;
|
|||||||
|
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import io.netty.channel.ChannelFutureListener;
|
import io.netty.channel.ChannelFutureListener;
|
||||||
|
import mc.core.eventbus.EventBus;
|
||||||
import mc.core.eventbus.events.CS_PlayerMoveEvent;
|
import mc.core.eventbus.events.CS_PlayerMoveEvent;
|
||||||
import mc.core.network.proto_1_12_2.State;
|
import mc.core.network.proto_1_12_2.State;
|
||||||
import mc.core.network.proto_1_12_2.TeleportManager;
|
import mc.core.network.proto_1_12_2.TeleportManager;
|
||||||
@@ -120,7 +121,7 @@ public class LoginHandler extends AbstractStateHandler implements LoginStateHand
|
|||||||
CS_PlayerMoveEvent event = new CS_PlayerMoveEvent(player, player.getLocation());
|
CS_PlayerMoveEvent event = new CS_PlayerMoveEvent(player, player.getLocation());
|
||||||
event.setNewLocation(player.getLocation());
|
event.setNewLocation(player.getLocation());
|
||||||
event.setRecalcChunk(true);
|
event.setRecalcChunk(true);
|
||||||
// EventBusGetter.getInstance().post(event);
|
EventBus.getInstance().post(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
/*
|
|
||||||
* DmitriyMX <dimon550@gmail.com>
|
|
||||||
* 2018-06-23
|
|
||||||
*/
|
|
||||||
package mc.core.network.proto_1_12_2.netty.handlers;
|
package mc.core.network.proto_1_12_2.netty.handlers;
|
||||||
|
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import mc.core.EntityLocation;
|
import mc.core.EntityLocation;
|
||||||
import mc.core.chat.ChatProcessor;
|
import mc.core.chat.ChatProcessor;
|
||||||
|
import mc.core.eventbus.EventBus;
|
||||||
import mc.core.eventbus.events.CS_PlayerMoveEvent;
|
import mc.core.eventbus.events.CS_PlayerMoveEvent;
|
||||||
import mc.core.network.proto_1_12_2.TeleportManager;
|
import mc.core.network.proto_1_12_2.TeleportManager;
|
||||||
import mc.core.network.proto_1_12_2.packets.*;
|
import mc.core.network.proto_1_12_2.packets.*;
|
||||||
@@ -82,7 +79,7 @@ public class PlayHandler extends AbstractStateHandler implements PlayStateHandle
|
|||||||
player.getLocation().getYaw(),
|
player.getLocation().getYaw(),
|
||||||
player.getLocation().getPitch()
|
player.getLocation().getPitch()
|
||||||
));
|
));
|
||||||
// EventBusGetter.getInstance().post(event);
|
EventBus.getInstance().post(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Handler
|
@Handler
|
||||||
|
|||||||
Reference in New Issue
Block a user