Module können passiv an Events im System zuhören, und dann aktionen ausführen.
Die Listener basieren auf der EventBus API, und arbeiten mit der Annotation @EventSubscriber
Es gibt einen Stolperstein mit Listener, diesen findet ihr im Artikel: http://wiki.si-solutions.ch/de/Tutorial-für-Entwickler/dev_known_problems
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.bushe.swing.event.annotation.EventSubscriber;
import de.vertico.starface.persistence.connector.events.DoNotDistrubSettingChangedEvent;
public class ExampleListener
{
private Log log =null;
public ExampleListener(Log log)
{
this.log=log;
}
@EventSubscriber //Annotation für EventBus
public void onDoNotDistrubSettingChangedEvent(DoNotDistrubSettingChangedEvent Event) //Event, dem Zugehört werden soll
{
Map<String, Object> EventMap = new HashMap<String, Object>();
EventMap.put("STARFACE_ACCOUNT", Event.getAccountId()+"");
EventMap.put("DND", Event.isDoNotDisturbSetting()+"");
log.debug("New Event:" + Event.toString());
}
}
Damit ein EventListener die Events erhält, muss dieser beim StarfaceEventService registriert werden.
@Function(visibility=Visibility.Private, rookieFunction=false, description="")
public class RegisterListener implements IBaseExecutable
{
private static ExampleListener Example = null;
@Override
public void execute(IRuntimeEnvironment context) throws Exception
{
Log log = context.getLog();
if(Example == null)
{
log.debug("Registering new Listener!");
Example = new ExampleListener(log);
StarfaceEventService SES = context.provider().fetch(StarfaceEventService.class);
SES.subscribe(Example);
}
}
}
@Function(visibility=Visibility.Private, rookieFunction=false, description="")
public class RegisterListener implements IBaseExecutable
{
private static ExampleListener Example = null;
@InputVar(label="RegisterListener", description="If true, registers listener, if false unregisters listener",type=VariableType.BOOLEAN)
public boolean RegisterListener=false;
@Override
public void execute(IRuntimeEnvironment context) throws Exception
{
Log log = context.getLog();
if(Example == null && RegisterListener)
{
log.debug("Registering new Listener!");
Example = new ExampleListener(log);
StarfaceEventService SES = context.provider().fetch(StarfaceEventService.class);
SES.subscribe(Example);
}
else if (Example != null && !RegisterListener)
{
log.debug("Unregistering Listener!");
StarfaceEventService SES = context.provider().fetch(StarfaceEventService.class);
SES.unsubscribe(Example);
Example = null;
}
}
}
Dieses Event teilt, Änderungen am Präsenzstatus, sowie dem dazugehörigen Präsenzstatustextes mit.
Datenpaketinhalt:
Dieses Event teilt die änderung am Telefoniestatus eines Benutzers mit.
Datenpaketinhalt:
Dieses Event teilt mit, wenn einen User seinen DND Status geändert hat.
Datenpaketinhalt:
Dieses Event wird bei jeder Änderung an einem aktiven Ruf ausgelöst. (Z.b. Neuer Anruf, Klingelt bei Teilnehmern, wurde Umgeleitet, wurde gehalten usw...)
Pro Anruf können mehrere Events gleichzeitig ausgelöst werden, da ein Event pro Teilnehmer ausgelöst wird.
Wichtig. der EventService für dieses Event ist:
@EventSubscriber(eventServiceName = "CallProcessingEventService")
Datenpaketinhalt:
Dieses Event feuert jedes mal, wenn eine Instanz eines Moduls de-aktiviert
Datenpaketinhalt:
Dieses Event feuert jedes mal, wenn der Leitungsstatus zwischen On- und Offline wechselt.
Datenpaketinhalt: