public abstract class SubscriptionCallback extends Object implements Runnable
Usage example, establishing a subscription with a Service
:
SubscriptionCallback callback = new SubscriptionCallback(service, 600) { // Timeout in seconds public void established(GENASubscription sub) { System.out.println("Established: " + sub.getSubscriptionId()); } public void failed(GENASubscription sub, UpnpResponse response, Exception ex) { System.err.println( createDefaultFailureMessage(response, ex) ); } public void ended(GENASubscription sub, CancelReason reason, UpnpResponse response) { // Reason should be null, or it didn't end regularly } public void eventReceived(GENASubscription sub) { System.out.println("Event: " + sub.getCurrentSequence().getValue()); Map<String, StateVariableValue> values = sub.getCurrentValues(); StateVariableValue status = values.get("Status"); System.out.println("Status is: " + status.toString()); } public void eventsMissed(GENASubscription sub, int numberOfMissedEvents) { System.out.println("Missed events: " + numberOfMissedEvents); } }; upnpService.getControlPoint().execute(callback);
Modifier and Type | Field and Description |
---|---|
protected static Logger |
log |
protected Integer |
requestedDurationSeconds |
protected Service |
service |
Modifier | Constructor and Description |
---|---|
protected |
SubscriptionCallback(Service service) |
protected |
SubscriptionCallback(Service service,
int requestedDurationSeconds) |
Modifier and Type | Method and Description |
---|---|
static String |
createDefaultFailureMessage(UpnpResponse responseStatus,
Exception exception) |
void |
end() |
protected abstract void |
ended(GENASubscription subscription,
CancelReason reason,
UpnpResponse responseStatus)
Called when a local or remote subscription ended, either on user request or because of a failure.
|
protected abstract void |
established(GENASubscription subscription)
Called when a local or remote subscription was successfully established.
|
protected abstract void |
eventReceived(GENASubscription subscription)
Called when an event for an established subscription has been received.
|
protected abstract void |
eventsMissed(GENASubscription subscription,
int numberOfMissedEvents)
Called when a received event was out of sequence, indicating that events have been missed.
|
protected void |
failed(GENASubscription subscription,
UpnpResponse responseStatus,
Exception exception) |
protected abstract void |
failed(GENASubscription subscription,
UpnpResponse responseStatus,
Exception exception,
String defaultMsg)
Called when establishing a local or remote subscription failed.
|
ControlPoint |
getControlPoint() |
Service |
getService() |
GENASubscription |
getSubscription() |
protected void |
invalidMessage(RemoteGENASubscription remoteGENASubscription,
UnsupportedDataException ex)
Called when a received event message could not be parsed successfully.
|
void |
run() |
void |
setControlPoint(ControlPoint controlPoint) |
void |
setSubscription(GENASubscription subscription) |
String |
toString() |
protected static Logger log
protected final Service service
protected final Integer requestedDurationSeconds
protected SubscriptionCallback(Service service)
protected SubscriptionCallback(Service service, int requestedDurationSeconds)
public Service getService()
public ControlPoint getControlPoint()
public void setControlPoint(ControlPoint controlPoint)
public GENASubscription getSubscription()
public void setSubscription(GENASubscription subscription)
public void end()
protected void failed(GENASubscription subscription, UpnpResponse responseStatus, Exception exception)
protected abstract void failed(GENASubscription subscription, UpnpResponse responseStatus, Exception exception, String defaultMsg)
subscription
- The failed subscription object, not very useful at this point.responseStatus
- For a remote subscription, if a response was received at all, this is it, otherwise null.exception
- For a local subscription and failed creation of a remote subscription protocol (before
sending the subscribe request), any exception that caused the failure, otherwise null.defaultMsg
- A user-friendly error message.createDefaultFailureMessage(org.fourthline.cling.model.message.UpnpResponse, java.lang.Exception)
protected abstract void established(GENASubscription subscription)
subscription
- The successful subscription.protected abstract void ended(GENASubscription subscription, CancelReason reason, UpnpResponse responseStatus)
subscription
- The ended subscription instance.reason
- If the subscription ended regularly (through end()), this is null.responseStatus
- For a remote subscription, if the cause implies a remopte response and it was
received, this is it (e.g. renewal failure response).protected abstract void eventReceived(GENASubscription subscription)
Use the GENASubscription.getCurrentValues()
method to obtain
the evented state variable values.
subscription
- The established subscription with fresh state variable values.protected abstract void eventsMissed(GENASubscription subscription, int numberOfMissedEvents)
It's up to you if you want to react to missed events or if you (can) silently ignore them.
subscription
- The established subscription.numberOfMissedEvents
- The number of missed events.public static String createDefaultFailureMessage(UpnpResponse responseStatus, Exception exception)
responseStatus
- The (HTTP) response or null
if there was no response.exception
- The exception or null
if there was no exception.protected void invalidMessage(RemoteGENASubscription remoteGENASubscription, UnsupportedDataException ex)
This typically indicates a broken device which is not UPnP compliant. You can react to this failure in any way you like, for example, you could terminate the subscription or simply create an error report/log.
The default implementation will log the exception at INFO
level, and
the invalid XML at FINE
level.
remoteGENASubscription
- The established subscription.ex
- Call UnsupportedDataException.getData()
to access the invalid XML.Copyright © 2016 4th Line GmbH, Switzerland. All rights reserved.