Added event system
+ Event interface for defining event objects + EventHandler interface for defining event handlers + EventBus singleton class for managing event handlers and dispatching events
This commit is contained in:
		
							
								
								
									
										16
									
								
								src/main/java/envoy/client/event/Event.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/main/java/envoy/client/event/Event.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| package envoy.client.event; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-clientChess</strong><br> | ||||
|  * File: <strong>Event.javaEvent.java</strong><br> | ||||
|  * Created: <strong>04.12.2019</strong><br> | ||||
|  *  | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public interface Event<T> { | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the data associated with this event | ||||
| 	 */ | ||||
| 	T get(); | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/main/java/envoy/client/event/EventBus.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/main/java/envoy/client/event/EventBus.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package envoy.client.event; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-clientChess</strong><br> | ||||
|  * File: <strong>EventBus.javaEvent.java</strong><br> | ||||
|  * Created: <strong>04.12.2019</strong><br> | ||||
|  *  | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public class EventBus { | ||||
|  | ||||
| 	private static EventBus eventBus; | ||||
|  | ||||
| 	private List<EventHandler> handlers = new ArrayList<>(); | ||||
|  | ||||
| 	private EventBus() {} | ||||
|  | ||||
| 	public EventBus getInstance() { | ||||
| 		if (eventBus == null) eventBus = new EventBus(); | ||||
| 		return eventBus; | ||||
| 	} | ||||
|  | ||||
| 	public void register(EventHandler... handlers) { this.handlers.addAll(Arrays.asList(handlers)); } | ||||
|  | ||||
| 	public void dispatch(Event<?> event) { handlers.stream().filter(h -> h.supports().contains(event.getClass())).forEach(h -> h.handle(event)); } | ||||
|  | ||||
| 	public List<EventHandler> getHandlers() { return handlers; } | ||||
| } | ||||
							
								
								
									
										25
									
								
								src/main/java/envoy/client/event/EventHandler.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/main/java/envoy/client/event/EventHandler.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| package envoy.client.event; | ||||
|  | ||||
| import java.util.Set; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-clientChess</strong><br> | ||||
|  * File: <strong>EventHandler.javaEvent.java</strong><br> | ||||
|  * Created: <strong>04.12.2019</strong><br> | ||||
|  *  | ||||
|  * @author Kai S. K. Engelbart | ||||
|  */ | ||||
| public interface EventHandler { | ||||
|  | ||||
| 	/** | ||||
| 	 * Consumes an event dispatched by the 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<? extends Event<?>>> supports(); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user