Replace old event framework with dev.kske:event-bus:0.0.3
This commit is contained in:
		| @@ -3,8 +3,8 @@ package dev.kske.chess.board; | ||||
| import java.util.*; | ||||
|  | ||||
| import dev.kske.chess.board.Piece.Color; | ||||
| import dev.kske.chess.event.EventBus; | ||||
| import dev.kske.chess.event.MoveEvent; | ||||
| import dev.kske.eventbus.EventBus; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>Chess</strong><br> | ||||
|   | ||||
| @@ -1,18 +0,0 @@ | ||||
| package dev.kske.chess.event; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>Chess</strong><br> | ||||
|  * File: <strong>Event.java</strong><br> | ||||
|  * Created: <strong>7 Aug 2019</strong><br> | ||||
|  * | ||||
|  * @since Chess v0.4-alpha | ||||
|  * @author Kai S. K. Engelbart | ||||
|  * @param <T> the type of the event's value | ||||
|  */ | ||||
| public interface Event<T> { | ||||
|  | ||||
| 	/** | ||||
| 	 * @return The data associated with the event | ||||
| 	 */ | ||||
| 	T getData(); | ||||
| } | ||||
| @@ -1,59 +0,0 @@ | ||||
| package dev.kske.chess.event; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Dispatches {@link Event}s to various {@link Subscriber}s.<br> | ||||
|  * <br> | ||||
|  * Project: <strong>Chess</strong><br> | ||||
|  * File: <strong>EventBus.java</strong><br> | ||||
|  * Created: <strong>7 Aug 2019</strong><br> | ||||
|  * | ||||
|  * @since Chess v0.4-alpha | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public class EventBus { | ||||
|  | ||||
| 	private List<Subscriber> subscribers; | ||||
|  | ||||
| 	private static EventBus instance; | ||||
|  | ||||
| 	/** | ||||
| 	 * @return a singleton instance of {@link EventBus} | ||||
| 	 */ | ||||
| 	public static EventBus getInstance() { | ||||
| 		if (instance == null) | ||||
| 			instance = new EventBus(); | ||||
| 		return instance; | ||||
| 	} | ||||
|  | ||||
| 	private EventBus() { | ||||
| 		subscribers = new ArrayList<>(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Registers a subscriber to which future events will be dispatched. | ||||
| 	 * | ||||
| 	 * @param subscribable the subscriber to register | ||||
| 	 */ | ||||
| 	public void register(Subscriber subscribable) { | ||||
| 		subscribers.add(subscribable); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * Dispatches an event to all {@Subscriber}s registered at this event bus. | ||||
| 	 * | ||||
| 	 * @param event the event to dispatch | ||||
| 	 */ | ||||
| 	public void dispatch(Event<?> event) { | ||||
| 		subscribers.stream() | ||||
| 			.filter(e -> e.supports().contains(event.getClass())) | ||||
| 			.forEach(e -> e.handle(event)); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return a list of all registered subscribers | ||||
| 	 */ | ||||
| 	public List<Subscriber> getSubscribers() { return subscribers; } | ||||
| } | ||||
| @@ -1,6 +1,7 @@ | ||||
| package dev.kske.chess.event; | ||||
|  | ||||
| import dev.kske.chess.game.Game; | ||||
| import dev.kske.eventbus.IEvent; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>Chess</strong><br> | ||||
| @@ -10,7 +11,7 @@ import dev.kske.chess.game.Game; | ||||
|  * @since Chess v0.5-alpha | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public class GameStartEvent implements Event<Game> { | ||||
| public class GameStartEvent implements IEvent { | ||||
|  | ||||
| 	private final Game game; | ||||
|  | ||||
| @@ -23,6 +24,8 @@ public class GameStartEvent implements Event<Game> { | ||||
| 		game = source; | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public Game getData() { return game; } | ||||
| 	/** | ||||
| 	 * @return the started game | ||||
| 	 */ | ||||
| 	public Game getGame() { return game; } | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| package dev.kske.chess.event; | ||||
|  | ||||
| import dev.kske.chess.board.BoardState; | ||||
| import dev.kske.chess.board.Move; | ||||
| import dev.kske.chess.board.*; | ||||
| import dev.kske.eventbus.IEvent; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>Chess</strong><br> | ||||
| @@ -11,7 +11,7 @@ import dev.kske.chess.board.Move; | ||||
|  * @since Chess v0.4-alpha | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public class MoveEvent implements Event<Move> { | ||||
| public class MoveEvent implements IEvent { | ||||
|  | ||||
| 	private final Move move; | ||||
| 	private final BoardState boardState; | ||||
| @@ -27,8 +27,10 @@ public class MoveEvent implements Event<Move> { | ||||
| 		this.boardState = boardState; | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public Move getData() { return move; } | ||||
| 	/** | ||||
| 	 * @return the move | ||||
| 	 */ | ||||
| 	public Move getMove() { return move; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the state of the board after the move | ||||
|   | ||||
| @@ -1,31 +0,0 @@ | ||||
| package dev.kske.chess.event; | ||||
|  | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * Implementations of this interface can register themselves at the | ||||
|  * {@link EventBus} and will be triggered every time an {@link Event} of a | ||||
|  * supported type.<br> | ||||
|  * <br> | ||||
|  * Project: <strong>Chess</strong><br> | ||||
|  * File: <strong>Subscribable.java</strong><br> | ||||
|  * Created: <strong>7 Aug 2019</strong><br> | ||||
|  * | ||||
|  * @since Chess v0.4-alpha | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public interface Subscriber { | ||||
|  | ||||
| 	/** | ||||
| 	 * Consumes an event dispatched by an event bus. | ||||
| 	 * | ||||
| 	 * @param event The event dispatched by the event bus, only of supported | ||||
| 	 *              type | ||||
| 	 */ | ||||
| 	void handle(Event<?> event); | ||||
|  | ||||
| 	/** | ||||
| 	 * @return A set of classes this class is supposed to handle in events | ||||
| 	 */ | ||||
| 	Set<Class<?>> supports(); | ||||
| } | ||||
| @@ -1,23 +1,17 @@ | ||||
| package dev.kske.chess.game; | ||||
|  | ||||
| import java.util.EnumMap; | ||||
| import java.util.Map; | ||||
| import java.util.*; | ||||
|  | ||||
| import javax.swing.JOptionPane; | ||||
|  | ||||
| import dev.kske.chess.board.Board; | ||||
| import dev.kske.chess.board.BoardState; | ||||
| import dev.kske.chess.board.Move; | ||||
| import dev.kske.chess.board.*; | ||||
| import dev.kske.chess.board.Piece.Color; | ||||
| import dev.kske.chess.event.EventBus; | ||||
| import dev.kske.chess.event.GameStartEvent; | ||||
| import dev.kske.chess.event.MoveEvent; | ||||
| import dev.kske.chess.event.*; | ||||
| import dev.kske.chess.game.ai.AIPlayer; | ||||
| import dev.kske.chess.io.EngineUtil; | ||||
| import dev.kske.chess.io.EngineUtil.EngineInfo; | ||||
| import dev.kske.chess.ui.BoardComponent; | ||||
| import dev.kske.chess.ui.BoardPane; | ||||
| import dev.kske.chess.ui.OverlayComponent; | ||||
| import dev.kske.chess.ui.*; | ||||
| import dev.kske.eventbus.EventBus; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>Chess</strong><br> | ||||
|   | ||||
| @@ -1,20 +1,15 @@ | ||||
| package dev.kske.chess.ui; | ||||
|  | ||||
| import java.awt.GridBagConstraints; | ||||
| import java.awt.GridBagLayout; | ||||
| import java.awt.GridLayout; | ||||
| import java.util.Arrays; | ||||
| import java.util.HashSet; | ||||
| import java.util.Set; | ||||
| import java.awt.*; | ||||
|  | ||||
| import javax.swing.*; | ||||
|  | ||||
| import dev.kske.chess.board.BoardState; | ||||
| import dev.kske.chess.board.MoveNode; | ||||
| import dev.kske.chess.board.*; | ||||
| import dev.kske.chess.board.Piece.Color; | ||||
| import dev.kske.chess.event.*; | ||||
| import dev.kske.chess.game.Game; | ||||
| import dev.kske.chess.game.NaturalPlayer; | ||||
| import dev.kske.chess.game.*; | ||||
| import dev.kske.eventbus.*; | ||||
| import dev.kske.eventbus.Event; | ||||
|  | ||||
| /** | ||||
|  * The part of this application's {@link MainWindow} that displays {@link Game}s | ||||
| @@ -27,7 +22,7 @@ import dev.kske.chess.game.NaturalPlayer; | ||||
|  * @since Chess v0.4-alpha | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public class GamePane extends JComponent { | ||||
| public class GamePane extends JComponent implements EventListener { | ||||
|  | ||||
| 	private static final long serialVersionUID = 4349772338239617477L; | ||||
|  | ||||
| @@ -37,6 +32,7 @@ public class GamePane extends JComponent { | ||||
| 	private Color activeColor; | ||||
| 	private JPanel moveSelectionPanel; | ||||
| 	private JButton btnFirst, btnPrevious, btnNext, btnLast; | ||||
| 	private JList<MoveNode> pgnList; | ||||
|  | ||||
| 	/** | ||||
| 	 * Creates an instance of {@link GamePane}. | ||||
| @@ -170,7 +166,7 @@ public class GamePane extends JComponent { | ||||
| 		gbc_scrollPane.gridy = 1; | ||||
| 		add(scrollPane, gbc_scrollPane); | ||||
|  | ||||
| 		JList<MoveNode> pgnList = new JList<>(); | ||||
| 		pgnList = new JList<>(); | ||||
| 		pgnList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); | ||||
| 		pgnList.setLayoutOrientation(JList.HORIZONTAL_WRAP); | ||||
| 		pgnList.setVisibleRowCount(0); | ||||
| @@ -180,38 +176,33 @@ public class GamePane extends JComponent { | ||||
| 		// Listen to moves and game (re-)starts and update the move list or | ||||
| 		// disable the | ||||
| 		// color switching buttons if necessary | ||||
| 		EventBus.getInstance().register(new Subscriber() { | ||||
| 		EventBus.getInstance().registerListener(this); | ||||
| 	} | ||||
|  | ||||
| 			@Override | ||||
| 			public void handle(Event<?> event) { | ||||
| 				if ( | ||||
| 					event instanceof MoveEvent && (((MoveEvent) event) | ||||
| 						.getBoardState() == BoardState.CHECKMATE | ||||
| 						|| ((MoveEvent) event) | ||||
| 							.getBoardState() == BoardState.STALEMATE) | ||||
| 				) | ||||
| 					btnSwapColors.setEnabled(false); | ||||
| 				else | ||||
| 					if (event instanceof GameStartEvent) | ||||
| 						btnSwapColors.setEnabled( | ||||
| 							game.getPlayers().get(Color.WHITE) instanceof NaturalPlayer ^ game.getPlayers().get(Color.BLACK) instanceof NaturalPlayer | ||||
| 						); | ||||
| 	@Event | ||||
| 	public void onMove(MoveEvent evt) { | ||||
| 		btnSwapColors.setEnabled( | ||||
| 			evt.getBoardState() != BoardState.CHECKMATE | ||||
| 				&& evt.getBoardState() != BoardState.STALEMATE | ||||
| 		); | ||||
| 		updateLog(); | ||||
| 	} | ||||
|  | ||||
| 				if (game.getBoard().getLog() == null) | ||||
| 					return; | ||||
| 	@Event | ||||
| 	public void onGameStart(GameStartEvent evt) { | ||||
| 		btnSwapColors.setEnabled( | ||||
| 			game.getPlayers().get(Color.WHITE) instanceof NaturalPlayer ^ game.getPlayers().get(Color.BLACK) instanceof NaturalPlayer | ||||
| 		); | ||||
| 		updateLog(); | ||||
| 	} | ||||
|  | ||||
| 				DefaultListModel<MoveNode> model = new DefaultListModel<>(); | ||||
| 				game.getBoard().getLog().forEach(model::addElement); | ||||
| 				pgnList.setModel(model); | ||||
| 			} | ||||
| 	private void updateLog() { | ||||
| 		if (game.getBoard().getLog() == null) | ||||
| 			return; | ||||
|  | ||||
| 			@Override | ||||
| 			public Set<Class<?>> supports() { | ||||
| 				return new HashSet<>( | ||||
| 					Arrays.asList(MoveEvent.class, GameStartEvent.class) | ||||
| 				); | ||||
| 			} | ||||
| 		}); | ||||
| 		DefaultListModel<MoveNode> model = new DefaultListModel<>(); | ||||
| 		game.getBoard().getLog().forEach(model::addElement); | ||||
| 		pgnList.setModel(model); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user