001package org.intellimate.izou.sdk.frameworks.permanentSoundOutput.output;
002
003import org.intellimate.izou.identification.Identifiable;
004import org.intellimate.izou.identification.IdentificationManager;
005import org.intellimate.izou.sdk.frameworks.permanentSoundOutput.events.EndedEvent;
006import org.intellimate.izou.sdk.frameworks.permanentSoundOutput.events.StartEvent;
007import org.intellimate.izou.sdk.util.ContextProvider;
008import org.intellimate.izou.sdk.util.FireEvent;
009
010import java.util.Optional;
011
012/**
013 * interface which provides various methods to
014 * @author LeanderK
015 * @version 1.0
016 */
017public interface PermanentSoundHelper extends Identifiable, FireEvent, ContextProvider {
018
019    /**
020     * fires an StartEvent
021     * @param isUsingJava true if using java, false if not (and for example a C-library)
022     */
023    default void startedSound(boolean isUsingJava) {
024        Optional<StartEvent> startEvent = IdentificationManager.getInstance().getIdentification(this)
025                .flatMap(id -> StartEvent.createStartEvent(id, isUsingJava));
026        if (!startEvent.isPresent()) {
027            getContext().getLogger().error("unable to fire startEvent");
028        } else {
029            getContext().getEvents().distributor().fireEventConcurrently(startEvent.get());
030        }
031    }
032
033    /**
034     * fires an EndedEvent
035     */
036    default void endedSound() {
037        Optional<EndedEvent> ended = IdentificationManager.getInstance().getIdentification(this)
038                .flatMap(EndedEvent::createEndedEvent);
039        if (!ended.isPresent()) {
040            getContext().getLogger().error("unable to fire ended");
041        } else {
042            getContext().getEvents().distributor().fireEventConcurrently(ended.get());
043        }
044    }
045}