HTTP event streaming is implemented in the PowerMedia WMS EventHandler resource.
When the client wishes to receive asynchronous events, it uses the web service to create an EventHandler and subscribes to specific event types. When the client performs an HTTP GET on the newly created EventHandler, the web service responds with a 200 OK; however, the TCP connection remains open until the client destroys the EventHandler. Event data related to resources and event types subscribed to will be pushed to the client until the Eventhandler is deleted by the client.
<eventhandlers size="<size>">
<eventhandler identifier=" <identifier> "appid=" <appid> "
href="http://server/dialogicwebservice/mediacontrol/eventhandlers/<identifier>" >
<eventsubscribe resourceid="<resourceid>" resourcetype="< resourcetype> "
type="<eventtype>">
</eventsubscribe>
</eventhandler>
...
</eventhandlers>
<event type="<eventtype>" data="<data>" resourceid="<resourceid>"
resourcetype="< resourcetype>" >
</event>
Name |
Description |
Type |
Input / Output |
Optional / Mandatory |
identifier |
Unique identifier assigned to the specific instance of the resource. This identifier is used by the web service client when performing actions on the resource. |
String |
Output |
N/A |
appid |
Unique application id included in the original HTTP POST creation process that is utilized by the web service such that clients only have access to resources that they created. |
String |
Output |
N/A |
href |
An HTTP reference to the specific resource. |
String |
Output |
N/A |
Name |
Description |
Type |
Input / Output |
Optional / Mandatory |
resourceid |
Unique resource identifier to monitor for events. Default:Any |
String |
Input / Output |
Optional |
resourcetype |
Type of resource to monitor for events, such as player, collector. Supported resource types: “player” “recorder” “collector” “playercollector” and “any”. “any” means all the supported resource types. Default: any |
String
|
Input / Output |
Optional |
type |
Event type to monitor, such as such as play complete, dtmf. Supported event types: “play_complete” “record_complete” “dtmf” , “keepalive” and “any”. The “keepalive” event will be sent every five mins after being subscribed. "any” means all the supported event types. Default: any |
String
|
Input / Output |
Optional |
action |
Add or remove the event subscribe: add, remove. Default: add |
String |
Input/Output |
Optional |
Name |
Description |
Type |
Input / Output |
Optional / Mandatory |
type |
Event type |
String |
Output |
N/A |
data |
Event data |
String |
Output |
N/A |
resourceid |
IP of resource sending event |
String
|
Input |
N/A |
resourcetype |
Type of resource |
String
|
Output |
N/A |
The following diagram illustrates the event handler sequence.
public void CreateEventHandler() {
logger.info("EventMonitor:: CreateEventHandler - Entered.");
//Create a HttpURLConnection with the correct server
//Send request to create event handler and retrieve response
String response = "";
String requestBody = "<eventhandler>\r\n" +
"/t<eventsubscribe type=\"any\" resourceid=\"any\"/>\r\n" +
"</eventhandler>";
HttpURLConnection connection = utils.SendHTTPRequest("http://" +
MainSipServlet.WMSHost + ":81/DialogicWebService/mediacontrol/eventhandlers",
"POST",
requestBody);
if (connection != null) {
response = utils.GetHTTPStringResponse(connection);
}
//Retrieve response codes
int responseCode = 0;
try {
responseCode = connection.getResponseCode();
} catch (IOException ex) {
Logger.getLogger(EventMonitor.class.getName()).log(Level.SEVERE, null, ex);
}
String responseMessage = "";
try {
responseMessage = connection.getResponseMessage();
} catch (IOException ex) {
Logger.getLogger(EventMonitor.class.getName()).log(Level.SEVERE, null, ex);
}
String responseLocation = connection.getHeaderField("location");
//close the connection
connection.disconnect();
//log results
logger.info("EventMonitor:: CreateEventHandler - Http response code =" +
responseCode);
logger.info("EventMonitor:: CreateEventHandler - Http response message =" +
responseMessage);
logger.info("EventMonitor:: CreateEventHandler - Http response location =" +
responseLocation);
if (responseCode == 201) {
eventHandlerRef = responseLocation;
}
logger.info("EventMonitor:: CreateEventHandler - Exited.");
}