package love.distributedrebirth.no2all.react;

public interface No2AllReact {

	void claim(No2AllReactSlot slot);
	void claimIn(No2AllReactSlot slot, Class<?> eventType);
	void claimOut(No2AllReactSlot slot, Class<?> eventType);
	void requireSlot(No2AllReactSlot slot, No2AllReactSlot dep);
	void requireService(No2AllReactSlot slot, Class<?> serviceType);

	void fire(No2AllReactSlot slot, Object event);
	void fireForEach(No2AllReactSlot slot, Object event);
	<T> void registrate(No2AllReactSlot slot, Class<T> eventType, No2AllReactListener<T> listener);

	<T> T service(Class<T> serviceType);
	void release(No2AllReactSlot slot);
}