import java.util.logging.Logger;
+import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.Response;
import com.google.gwt.regexp.shared.MatchResult;
import com.google.gwt.regexp.shared.RegExp;
private ServerCommunicationHandler getServerCommunicationHandler() {
return connection.getServerCommunicationHandler();
}
+
+ /**
+ * Called when a heartbeat request returns a status code other than 200
+ *
+ * @param request
+ * The heartbeat request
+ * @param response
+ * The heartbeat response
+ * @return true if a new heartbeat should be sent, false if no further
+ * heartbeats should be sent
+ */
+ public boolean heartbeatInvalidStatusCode(Request request, Response response) {
+ int status = response.getStatusCode();
+ int interval = connection.getHeartbeat().getInterval();
+ if (status == 0) {
+ getLogger().warning(
+ "Failed sending heartbeat, server is unreachable, retrying in "
+ + interval + "secs.");
+ } else if (status == Response.SC_GONE) {
+ // FIXME Stop application?
+ connection.showSessionExpiredError(null);
+ // If session is expired break the loop
+ return false;
+ } else if (status >= 500) {
+ getLogger().warning(
+ "Failed sending heartbeat, see server logs, retrying in "
+ + interval + "secs.");
+ } else {
+ getLogger()
+ .warning(
+ "Failed sending heartbeat to server. Error code: "
+ + status);
+ }
+
+ return true;
+ }
+
+ /**
+ * Called when an exception occurs during a heartbeat request
+ *
+ * @param request
+ * The heartbeat request
+ * @param exception
+ * The exception which occurred
+ * @return true if a new heartbeat should be sent, false if no further
+ * heartbeats should be sent
+ */
+ public boolean heartbeatException(Request request, Throwable exception) {
+ getLogger().severe(
+ "Exception sending heartbeat: " + exception.getMessage());
+ return true;
+ }
}
public void onResponseReceived(Request request, Response response) {
int status = response.getStatusCode();
+ boolean reschedule = true;
if (status == Response.SC_OK) {
getLogger().fine("Heartbeat response OK");
- } else if (status == 0) {
- getLogger().warning(
- "Failed sending heartbeat, server is unreachable, retrying in "
- + interval + "secs.");
- } else if (status >= 500) {
- getLogger().warning(
- "Failed sending heartbeat, see server logs, retrying in "
- + interval + "secs.");
- } else if (status == Response.SC_GONE) {
- connection.showSessionExpiredError(null);
- // If session is expired break the loop
- return;
} else {
- getLogger().warning(
- "Failed sending heartbeat to server. Error code: "
- + status);
+ reschedule = connection.getCommunicationProblemHandler()
+ .heartbeatInvalidStatusCode(request, response);
}
- // Don't break the loop
- schedule();
+ if (reschedule) {
+ schedule();
+ }
}
@Override
public void onError(Request request, Throwable exception) {
- getLogger().severe(
- "Exception sending heartbeat: "
- + exception.getMessage());
- // Don't break the loop
- schedule();
+ boolean reschedule = connection
+ .getCommunicationProblemHandler().heartbeatException(
+ request, exception);
+
+ if (reschedule) {
+ schedule();
+ }
}
};