com.pushtechnology.diffusion.client.callbacks.Callback Maven / Gradle / Ivy
/*******************************************************************************
* Copyright (c) 2023 DiffusionData Ltd., All Rights Reserved.
*
* Use is subject to license terms.
*
* NOTICE: All information contained herein is, and remains the
* property of Push Technology. The intellectual and technical
* concepts contained herein are proprietary to Push Technology and
* may be covered by U.S. and Foreign Patents, patents in process, and
* are protected by trade secret or copyright law.
*******************************************************************************/
package com.pushtechnology.diffusion.client.callbacks;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Callback interface that provides responses from the server. Extensions of
* this interface have callback methods that provide results for successful
* calls.
*
* Direct extensions of this interface support a single callback each time the
* callback is used in a call (the call context). If the call fails to
* return a result, for example if the session is closed or the operation times
* out, {@link #onError(ErrorReason) onError} will be called. Each call to the
* server will result in invocation of either a single callback method or
* {@code onError}.
*
* The {@link Stream} extension supports multiple responses for each call.
*
* If the server returns a response for an unknown call context (typically a
* late response for a call context has timed out), an error will be reported to
* the {@link com.pushtechnology.diffusion.client.session.Session.ErrorHandler
* session error handler}.
*
* @author DiffusionData Limited
* @since 5.1
* @see Stream
* @see ContextStream
* @see ContextCallback
*/
public interface Callback {
/**
* Notification of a contextual error related to this callback. This is
* analogous to an exception being raised. Situations in which
* {@code onError} is called include the session being closed, a
* communication timeout, or a problem with the provided parameters. No
* further calls will be made to this callback for the call context.
*
* @param errorReason a value representing the error; this can be one of
* constants defined in {@link ErrorReason}, or a feature-specific
* reason
*/
void onError(ErrorReason errorReason);
/**
* Abstract default callback.
*
* This simply logs onError calls at debug level. This should be overridden
* to perform more specific error handling.
*/
abstract class Default implements Callback {
private static final Logger LOG =
LoggerFactory.getLogger(Default.class);
@Override
public void onError(ErrorReason errorReason) {
LOG.warn("{} error, reason={}", this, errorReason);
}
}
}