diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index e91ee70..3093c1c 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -14,6 +14,7 @@ import org.toop.app.widget.view.MainView; import org.toop.framework.audio.*; import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.eventbus.EventFlow; +import org.toop.framework.eventbus.GlobalEventBus; import org.toop.framework.networking.NetworkingClientEventListener; import org.toop.framework.networking.NetworkingClientManager; import org.toop.framework.resource.ResourceLoader; @@ -179,11 +180,18 @@ public final class App extends Application { } private void initSystems() { // TODO Move to better place - new Thread(() -> new NetworkingClientEventListener(new NetworkingClientManager())).start(); + new Thread(() -> new NetworkingClientEventListener( + GlobalEventBus.get(), + new NetworkingClientManager(GlobalEventBus.get())) + ).start(); new Thread(() -> { MusicManager musicManager = - new MusicManager<>(ResourceManager.getAllOfTypeAndRemoveWrapper(MusicAsset.class), true); + new MusicManager<>( + GlobalEventBus.get(), + ResourceManager.getAllOfTypeAndRemoveWrapper(MusicAsset.class), + true + ); SoundEffectManager soundEffectManager = new SoundEffectManager<>(ResourceManager.getAllOfType(SoundEffectAsset.class)); @@ -195,6 +203,7 @@ public final class App extends Application { .registerManager(VolumeControl.MUSIC, musicManager); new AudioEventListener<>( + GlobalEventBus.get(), musicManager, soundEffectManager, audioVolumeManager diff --git a/app/src/main/java/org/toop/app/Server.java b/app/src/main/java/org/toop/app/Server.java index ff28928..0c4ad0e 100644 --- a/app/src/main/java/org/toop/app/Server.java +++ b/app/src/main/java/org/toop/app/Server.java @@ -13,6 +13,7 @@ import org.toop.app.widget.popup.ErrorPopup; import org.toop.app.widget.popup.SendChallengePopup; import org.toop.app.widget.view.ServerView; import org.toop.framework.eventbus.EventFlow; +import org.toop.framework.eventbus.GlobalEventBus; import org.toop.framework.gameFramework.model.player.Player; import org.toop.framework.networking.clients.TournamentNetworkingClient; import org.toop.framework.networking.events.NetworkEvents; @@ -92,7 +93,7 @@ public final class Server { var a = new EventFlow() .addPostEvent(NetworkEvents.StartClient.class, - new TournamentNetworkingClient(), + new TournamentNetworkingClient(GlobalEventBus.get()), new NetworkingConnector(ip, parsedPort, reconnectAttempts, 1, TimeUnit.SECONDS) ); diff --git a/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java b/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java index ed39a52..7f238f8 100644 --- a/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java +++ b/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java @@ -6,25 +6,29 @@ import org.toop.framework.audio.interfaces.SoundEffectManager; import org.toop.framework.audio.interfaces.VolumeManager; import org.toop.framework.eventbus.EventFlow; import org.toop.framework.eventbus.GlobalEventBus; +import org.toop.framework.eventbus.bus.EventBus; import org.toop.framework.resource.types.AudioResource; public class AudioEventListener { + private final EventBus eventBus; private final MusicManager musicManager; private final SoundEffectManager soundEffectManager; private final VolumeManager audioVolumeManager; public AudioEventListener( + EventBus eventBus, MusicManager musicManager, SoundEffectManager soundEffectManager, VolumeManager audioVolumeManager ) { + this.eventBus = eventBus; this.musicManager = musicManager; this.soundEffectManager = soundEffectManager; this.audioVolumeManager = audioVolumeManager; } public AudioEventListener initListeners(String buttonSoundToPlay) { - new EventFlow() + new EventFlow(eventBus) .listen(AudioEvents.StopAudioManager.class, this::handleStopMusicManager, false) .listen(AudioEvents.PlayEffect.class, this::handlePlaySound, false) .listen(AudioEvents.SkipMusic.class, this::handleSkipSong, false) diff --git a/framework/src/main/java/org/toop/framework/audio/MusicManager.java b/framework/src/main/java/org/toop/framework/audio/MusicManager.java index fb8f0a0..7476311 100644 --- a/framework/src/main/java/org/toop/framework/audio/MusicManager.java +++ b/framework/src/main/java/org/toop/framework/audio/MusicManager.java @@ -6,7 +6,7 @@ import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.dispatch.interfaces.Dispatcher; import org.toop.framework.dispatch.JavaFXDispatcher; import org.toop.annotations.TestsOnly; -import org.toop.framework.eventbus.GlobalEventBus; +import org.toop.framework.eventbus.bus.EventBus; import org.toop.framework.resource.types.AudioResource; import java.util.*; @@ -17,6 +17,7 @@ import java.util.concurrent.TimeUnit; public class MusicManager implements org.toop.framework.audio.interfaces.MusicManager { private static final Logger logger = LogManager.getLogger(MusicManager.class); + private final EventBus eventBus; private final List backgroundMusic = new ArrayList<>(); private final Dispatcher dispatcher; private final List resources; @@ -26,7 +27,8 @@ public class MusicManager implements org.toop.framework private ScheduledExecutorService scheduler; - public MusicManager(List resources, boolean shuffleMusic) { + public MusicManager(EventBus eventbus, List resources, boolean shuffleMusic) { + this.eventBus = eventbus; this.dispatcher = new JavaFXDispatcher(); this.resources = resources; // Shuffle if wanting to shuffle @@ -39,7 +41,8 @@ public class MusicManager implements org.toop.framework * {@code @TestsOnly} DO NOT USE */ @TestsOnly - public MusicManager(List resources, Dispatcher dispatcher) { + public MusicManager(EventBus eventBus, List resources, Dispatcher dispatcher) { + this.eventBus = eventBus; this.dispatcher = dispatcher; this.resources = new ArrayList<>(resources); backgroundMusic.addAll(resources); @@ -123,7 +126,7 @@ public class MusicManager implements org.toop.framework Runnable currentMusicTask = new Runnable() { @Override public void run() { - GlobalEventBus.get().post(new AudioEvents.PlayingMusic(track.getName(), track.currentPosition(), track.duration())); + eventBus.post(new AudioEvents.PlayingMusic(track.getName(), track.currentPosition(), track.duration())); scheduler.schedule(this, 1, TimeUnit.SECONDS); } }; diff --git a/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java b/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java index e357aee..c34c5a9 100644 --- a/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java +++ b/framework/src/main/java/org/toop/framework/audio/SoundEffectManager.java @@ -2,18 +2,10 @@ package org.toop.framework.audio; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.toop.framework.resource.ResourceManager; import org.toop.framework.resource.ResourceMeta; import org.toop.framework.resource.resources.BaseResource; -import org.toop.framework.resource.resources.MusicAsset; -import org.toop.framework.resource.resources.SoundEffectAsset; import org.toop.framework.resource.types.AudioResource; -import javax.sound.sampled.Clip; -import javax.sound.sampled.LineEvent; -import javax.sound.sampled.LineUnavailableException; -import javax.sound.sampled.UnsupportedAudioFileException; -import java.io.IOException; import java.util.*; import java.util.stream.Collectors; diff --git a/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java b/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java index 101dc06..5a9a08d 100644 --- a/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java +++ b/framework/src/main/java/org/toop/framework/networking/NetworkingClientEventListener.java @@ -4,19 +4,20 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.toop.framework.SnowflakeGenerator; import org.toop.framework.eventbus.EventFlow; +import org.toop.framework.eventbus.bus.EventBus; import org.toop.framework.networking.events.NetworkEvents; import org.toop.framework.networking.exceptions.ClientNotFoundException; import org.toop.framework.networking.interfaces.NetworkingClientManager; public class NetworkingClientEventListener { - private static final Logger logger = LogManager.getLogger(NetworkingClientEventListener.class); + private final NetworkingClientManager clientManager; /** Starts a connection manager, to manage, connections. */ - public NetworkingClientEventListener(NetworkingClientManager clientManager) { + public NetworkingClientEventListener(EventBus eventBus, NetworkingClientManager clientManager) { this.clientManager = clientManager; - new EventFlow() + new EventFlow(eventBus) .listen(NetworkEvents.StartClient.class, this::handleStartClient, false) .listen(NetworkEvents.SendCommand.class, this::handleCommand, false) .listen(NetworkEvents.SendLogin.class, this::handleSendLogin, false) diff --git a/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java b/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java index ad53dab..4f1d2ac 100644 --- a/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java +++ b/framework/src/main/java/org/toop/framework/networking/NetworkingClientManager.java @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.toop.framework.eventbus.EventFlow; -import org.toop.framework.eventbus.GlobalEventBus; +import org.toop.framework.eventbus.bus.EventBus; import org.toop.framework.networking.events.NetworkEvents; import org.toop.framework.networking.exceptions.ClientNotFoundException; import org.toop.framework.networking.exceptions.CouldNotConnectException; @@ -18,9 +18,13 @@ import org.toop.framework.networking.types.NetworkingConnector; public class NetworkingClientManager implements org.toop.framework.networking.interfaces.NetworkingClientManager { private static final Logger logger = LogManager.getLogger(NetworkingClientManager.class); + + private final EventBus eventBus; private final Map networkClients = new ConcurrentHashMap<>(); - public NetworkingClientManager() {} + public NetworkingClientManager(EventBus eventBus) { + this.eventBus = eventBus; + } private void connectHelper( long id, @@ -55,7 +59,7 @@ public class NetworkingClientManager implements org.toop.framework.networking.in nClient.connect(id, nConnector.host(), nConnector.port()); networkClients.put(id, nClient); logger.info("New client started successfully for {}:{}", nConnector.host(), nConnector.port()); - GlobalEventBus.get().post(new NetworkEvents.ConnectTry(id, attempts, nConnector.reconnectAttempts(), true)); + eventBus.post(new NetworkEvents.ConnectTry(id, attempts, nConnector.reconnectAttempts(), true)); onSuccess.run(); scheduler.shutdown(); } catch (CouldNotConnectException e) { @@ -63,17 +67,17 @@ public class NetworkingClientManager implements org.toop.framework.networking.in if (attempts < nConnector.reconnectAttempts()) { logger.warn("Could not connect to {}:{}. Retrying in {} {}", nConnector.host(), nConnector.port(), nConnector.timeout(), nConnector.timeUnit()); - GlobalEventBus.get().post(new NetworkEvents.ConnectTry(id, attempts, nConnector.reconnectAttempts(), false)); + eventBus.post(new NetworkEvents.ConnectTry(id, attempts, nConnector.reconnectAttempts(), false)); scheduler.schedule(this, nConnector.timeout(), nConnector.timeUnit()); } else { logger.error("Failed to start client for {}:{} after {} attempts", nConnector.host(), nConnector.port(), attempts); - GlobalEventBus.get().post(new NetworkEvents.ConnectTry(id, -1, nConnector.reconnectAttempts(), false)); + eventBus.post(new NetworkEvents.ConnectTry(id, -1, nConnector.reconnectAttempts(), false)); onFailure.run(); scheduler.shutdown(); } } catch (Exception e) { logger.error("Unexpected exception during startClient", e); - GlobalEventBus.get().post(new NetworkEvents.ConnectTry(id, -1, nConnector.reconnectAttempts(), false)); + eventBus.post(new NetworkEvents.ConnectTry(id, -1, nConnector.reconnectAttempts(), false)); onFailure.run(); scheduler.shutdown(); } diff --git a/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java b/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java index 74871e4..47adef9 100644 --- a/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java +++ b/framework/src/main/java/org/toop/framework/networking/clients/TournamentNetworkingClient.java @@ -11,6 +11,7 @@ import io.netty.handler.codec.string.StringEncoder; import io.netty.util.CharsetUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.toop.framework.eventbus.bus.EventBus; import org.toop.framework.networking.exceptions.CouldNotConnectException; import org.toop.framework.networking.handlers.NetworkingGameClientHandler; import org.toop.framework.networking.interfaces.NetworkingClient; @@ -19,9 +20,13 @@ import java.net.InetSocketAddress; public class TournamentNetworkingClient implements NetworkingClient { private static final Logger logger = LogManager.getLogger(TournamentNetworkingClient.class); + + private final EventBus eventBus; private Channel channel; - public TournamentNetworkingClient() {} + public TournamentNetworkingClient(EventBus eventBus) { + this.eventBus = eventBus; + } @Override public InetSocketAddress getAddress() { @@ -40,7 +45,7 @@ public class TournamentNetworkingClient implements NetworkingClient { new ChannelInitializer() { @Override public void initChannel(SocketChannel ch) { - NetworkingGameClientHandler handler = new NetworkingGameClientHandler(clientId); + NetworkingGameClientHandler handler = new NetworkingGameClientHandler(eventBus, clientId); ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new LineBasedFrameDecoder(1024)); // split at \n diff --git a/framework/src/main/java/org/toop/framework/networking/handlers/NetworkingGameClientHandler.java b/framework/src/main/java/org/toop/framework/networking/handlers/NetworkingGameClientHandler.java index 11acf04..7b4bf69 100644 --- a/framework/src/main/java/org/toop/framework/networking/handlers/NetworkingGameClientHandler.java +++ b/framework/src/main/java/org/toop/framework/networking/handlers/NetworkingGameClientHandler.java @@ -8,15 +8,17 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.toop.framework.eventbus.EventFlow; +import org.toop.framework.eventbus.bus.EventBus; import org.toop.framework.networking.events.NetworkEvents; public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { private static final Logger logger = LogManager.getLogger(NetworkingGameClientHandler.class); + private final EventBus eventBus; private final long connectionId; - public NetworkingGameClientHandler(long connectionId) { + public NetworkingGameClientHandler(EventBus eventBus, long connectionId) { + this.eventBus = eventBus; this.connectionId = connectionId; } @@ -40,9 +42,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { "Received SVR message from server-{}, data: {}", ctx.channel().remoteAddress(), msg); - new EventFlow() - .addPostEvent(new NetworkEvents.ServerResponse(this.connectionId)) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.ServerResponse(this.connectionId)); parseServerReturn(rec); return; } @@ -113,11 +113,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .map(m -> m.group(1).trim()) .toArray(String[]::new); - new EventFlow() - .addPostEvent( - new NetworkEvents.GameMoveResponse( - this.connectionId, msg[0], msg[1], msg[2])) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.GameMoveResponse(this.connectionId, msg[0], msg[1], msg[2])); } private void gameWinConditionHandler(String rec) { @@ -128,9 +124,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .findFirst() .orElse(""); - new EventFlow() - .addPostEvent(new NetworkEvents.GameResultResponse(this.connectionId, condition)) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.GameResultResponse(this.connectionId, condition)); } private void gameChallengeHandler(String rec) { @@ -145,17 +139,9 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .toArray(String[]::new); if (isCancelled) - new EventFlow() - .addPostEvent( - new NetworkEvents.ChallengeCancelledResponse( - this.connectionId, msg[0])) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.GameResultResponse(this.connectionId, msg[0])); else - new EventFlow() - .addPostEvent( - new NetworkEvents.ChallengeResponse( - this.connectionId, msg[0], msg[1], msg[2])) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.ChallengeResponse(this.connectionId, msg[0], msg[1], msg[2])); } catch (ArrayIndexOutOfBoundsException e) { logger.error("Array out of bounds for: {}", rec, e); } @@ -171,11 +157,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .toArray(String[]::new); // [0] playerToMove, [1] gameType, [2] opponent - new EventFlow() - .addPostEvent( - new NetworkEvents.GameMatchResponse( - this.connectionId, msg[0], msg[1], msg[2])) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.GameMatchResponse(this.connectionId, msg[0], msg[1], msg[2])); } catch (ArrayIndexOutOfBoundsException e) { logger.error("Array out of bounds for: {}", rec, e); } @@ -190,9 +172,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .toString() .trim(); - new EventFlow() - .addPostEvent(new NetworkEvents.YourTurnResponse(this.connectionId, msg)) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.YourTurnResponse(this.connectionId, msg)); } private void playerlistHandler(String rec) { @@ -203,9 +183,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .map(m -> m.group(1).trim()) .toArray(String[]::new); - new EventFlow() - .addPostEvent(new NetworkEvents.PlayerlistResponse(this.connectionId, players)) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.PlayerlistResponse(this.connectionId, players)); } private void gamelistHandler(String rec) { @@ -216,9 +194,7 @@ public class NetworkingGameClientHandler extends ChannelInboundHandlerAdapter { .map(m -> m.group(1).trim()) .toArray(String[]::new); - new EventFlow() - .addPostEvent(new NetworkEvents.GamelistResponse(this.connectionId, gameTypes)) - .asyncPostEvent(); + eventBus.post(new NetworkEvents.GamelistResponse(this.connectionId, gameTypes)); } private void helpHandler(String rec) {