package org.societies.android.api.events;
/**
* Interface defines how 3rd party and optionally, platform components, can
* subscribe/publish to Societies platform events. The base eventing system used in Societies
* is based on XMPP Pubsub event nodes. These event nodes form the basis of inter-node
* messaging.
*
* This interface allows local Android components to subscribe/publish XMPP events using a
* an Android Intents/ XMPP Pubsub events translation.
*
* This interface should not be used for Android intra-node eventing - use Intents.
*
*/
public interface IAndroidSocietiesEvents {
/**
* Societies Events intents
* Used to create to create Intents to signal return values of a called method
* If the method is locally bound it is possible to directly return a value but is discouraged
* as called methods usually involve making asynchronous calls.
*/
public static final String INTENT_RETURN_VALUE_KEY = "org.societies.android.platform.events.ReturnValue";
public static final String PUBLISH_EVENT = "org.societies.android.platform.events.PUBLISH_EVENT";
public static final String SUBSCRIBE_TO_ALL_EVENTS = "org.societies.android.platform.events.SUBSCRIBE_TO_ALL_EVENTS";
public static final String SUBSCRIBE_TO_EVENT = "org.societies.android.platform.events.SUBSCRIBE_TO_EVENT";
public static final String SUBSCRIBE_TO_EVENTS = "org.societies.android.platform.events.SUBSCRIBE_TO_EVENTS";
public static final String UNSUBSCRIBE_FROM_ALL_EVENTS = "org.societies.android.platform.events.UNSUBSCRIBE_FROM_ALL_EVENTS";
public static final String UNSUBSCRIBE_FROM_EVENT = "org.societies.android.platform.events.UNSUBSCRIBE_FROM_EVENT";
public static final String UNSUBSCRIBE_FROM_EVENTS = "org.societies.android.platform.events.UNSUBSCRIBE_FROM_EVENTS";
public static final String NUM_EVENT_LISTENERS = "org.societies.android.platform.events.NUM_EVENT_LISTENERS";
/**
* Android intent Societies platform events. The Pubsub event nodes are the final part of the intent
*
*/
//Device Manager events
// String DEVICE_MANAGER_DEVICE_REGISTERED = "org.societies.android.device.manager.DEVICE_CONNECTED";
// String DEVICE_MANAGER_DEVICE_DISCONNECTED = "org.societies.android.device.manager.DEVICE_DISCONNECTED";
// String DEVICE_MANAGER_EVENTING_NODE_NAME = "org.societies.android.device.manager.EVENTING_NODE_NAME";
//CSS Manager events
String CSS_MANAGER_ADD_CSS_NODE = "org.societies.android.css.manager.addCSSNode";
String CSS_MANAGER_DEPART_CSS_NODE = "org.societies.android.css.manager.departCSSNode";
//Context Manager events
String CONTEXT_MANAGER_CREATED = "org.societies.android.context.org/societies/context/change/event/CREATED";
String CONTEXT_MANAGER_UPDATED = "org.societies.android.context.org/societies/context/change/event/UPDATED";
String CONTEXT_MANAGER_MODIFIED = "org.societies.android.context.org/societies/context/change/event/MODIFIED";
String CONTEXT_MANAGER_REMOVED = "org.societies.android.context.org/societies/context/change/event/REMOVED";
//Array of Societies events
String societiesEvents [] = {CONTEXT_MANAGER_CREATED,
CONTEXT_MANAGER_UPDATED,
CSS_MANAGER_ADD_CSS_NODE,
CONTEXT_MANAGER_MODIFIED,
CONTEXT_MANAGER_REMOVED,
CSS_MANAGER_DEPART_CSS_NODE};
//Array of interface method signatures
String methodsArray [] = {"subscribeToEvent(String client, String societiesIntent)",
"subscribeToEvents(String client, String intentFilter)",
"subscribeToAllEvents(String client)",
"unSubscribeFromEvent(String client, String societiesIntent)",
"unSubscribeFromEvents(String client, String intentFilter)",
"unSubscribeFromAllEvents(String client)",
"publishEvent(String client, String societiesIntent, Object eventPayload, Class eventClass)"
};
String GENERIC_INTENT_PAYLOAD_KEY = "Pubsub_Payload_Key";
/**
* Subscribe to a specified Societies platform event (Android Intent)
*
* @param client app package
* @param societiesIntent specific event intent
* @return int - number of subscribed events
*/
int subscribeToEvent(String client, String societiesIntent);
/**
* Subscribe to Societies platform events (Android Intent), specified with a filter. All platform events
* that start with the filter will be subscribed to.
*
* @param client app package
* @param intentFilter event filter
* @return int - number of subscribed events
*/
int subscribeToEvents(String client, String intentFilter);
/**
* Subscribe to all platform events. This should only be used if really required.
*
* @param client app package
* @return int - number of subscribed events
*/
int subscribeToAllEvents(String client);
/**
* Un-subscribe from a specified Societies platform event (Android Intent)
*
* @param client app package
* @param societiesIntent specific event intent
* @return int - number of subscribed events
*/
int unSubscribeFromEvent(String client, String societiesIntent);
/**
* Un-subscribe from Societies platform events (Android Intent), specified with a filter. All platform events
* that start with the filter will be un-subscribed from.
*
* @param client app package
* @param intentFilter event filter
* @return int - number of subscribed events
*/
int unSubscribeFromEvents(String client, String intentFilter);
/**
* Un-subscribe from all current platform event subscriptions.
*
* @param client app package
* @return int - number of subscribed events
*/
int unSubscribeFromAllEvents(String client);
/**
* Publish an event to the Societies platform for consumption by other CSS nodes
*
* @param client app package
* @param societiesIntent specific event intent
* @param eventPayload event object
* @param eventClass class of event object
* @return boolean - returned via Android intent
*/
boolean publishEvent(String client, String societiesIntent, Object eventPayload, Class eventClass);
}