Collection of useful utilities for Java games and apps. A lot of interesting utilities that could maybe still find some use if you work with Java...
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mightyutils/src/mightypork/utils/eventbus/clients/BusNode.java

151 lines
2.6 KiB

package mightypork.utils.eventbus.clients;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import mightypork.utils.annotations.Stub;
import mightypork.utils.eventbus.BusAccess;
import mightypork.utils.eventbus.EventBus;
/**
* Client that can be attached to the {@link EventBus}, or added as a child
* client to another {@link DelegatingClient}
*
* @author Ondřej Hruška (MightyPork)
*/
public abstract class BusNode implements BusAccess, ClientHub {
private BusAccess busAccess;
private final Set<Object> clients = new LinkedHashSet<>();
private boolean listening = true;
private boolean delegating = true;
/**
* @param busAccess access to bus
*/
public BusNode(BusAccess busAccess) {
setBusAccess(busAccess);
}
/**
* Create without a bus access. Bus access should be set using the
* setBusAccess() method.
*/
public BusNode() {
}
/**
* Handler called when bus access first provides a valid bus instance.<br>
* The node may now eg. subscribe to the bus.
*/
@Stub
public void onBusReady()
{
// do stuff
}
/**
* Assign a bus access. If the buss access provides a buss, the onBusReady()
* method will be called.
*
* @param busAccess the assigned bus access
*/
public final void setBusAccess(BusAccess busAccess)
{
this.busAccess = busAccess;
if (getEventBus() != null) {
onBusReady();
}
}
@Override
public Collection<Object> getChildClients()
{
return clients;
}
@Override
public boolean doesDelegate()
{
return delegating;
}
@Override
public boolean isListening()
{
return listening;
}
/**
* Add a child subscriber to the {@link EventBus}.<br>
*
* @param client
*/
@Override
public void addChildClient(Object client)
{
if (client instanceof RootBusNode) {
throw new IllegalArgumentException("Cannot nest RootBusNode.");
}
clients.add(client);
}
/**
* Remove a child subscriber
*
* @param client subscriber to remove
*/
@Override
public void removeChildClient(Object client)
{
if (client != null) {
clients.remove(client);
}
}
/**
* Set whether events should be received.
*
* @param listening receive events
*/
public void setListening(boolean listening)
{
this.listening = listening;
}
/**
* Set whether events should be passed on to child nodes
*
* @param delegating
*/
public void setDelegating(boolean delegating)
{
this.delegating = delegating;
}
@Override
public EventBus getEventBus()
{
if(busAccess==null) return null;
return busAccess.getEventBus();
}
}