li.rudin.arduino.core.ObservableArduino Maven / Gradle / Ivy
package li.rudin.arduino.core;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import li.rudin.arduino.api.Arduino;
import li.rudin.arduino.api.listener.ArduinoListener;
import li.rudin.arduino.api.state.ConnectionState;
public abstract class ObservableArduino implements Arduino
{
private final List listeners = new CopyOnWriteArrayList<>();
@Override
public void addListener(ArduinoListener listener)
{
listeners.add(listener);
}
@Override
public void removeListener(ArduinoListener listener)
{
listeners.remove(listener);
}
/**
* Fires the rx event
* @param key
* @param value
*/
public void fireReceived(String key, String value)
{
for (ArduinoListener l: listeners)
l.onMessageReceived(key, value);
}
/**
* Fires the tx event
* @param key
* @param value
*/
public void fireTransmitted(String key, String value)
{
for (ArduinoListener l: listeners)
l.onMessageTransmitted(key, value);
}
private ConnectionState lastCurrentState = ConnectionState.DISCONNECTED;
private ConnectionState lastTargetState = ConnectionState.CONNECTED;
/**
* Fires a state change event based on the current states
*/
public void fireStateChange()
{
ConnectionState connectionState = getCurrentState();
ConnectionState targetState = getTargetState();
if (connectionState != lastCurrentState || targetState != lastTargetState)
for (ArduinoListener l: listeners)
l.onStateChange(getCurrentState(), getTargetState());
lastCurrentState = connectionState;
lastTargetState = targetState;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy