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:
parent
378a83638a
commit
3c7f95f869
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