/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.toolkit.modules.concurrency.api; /** * A concurrency mechanism to manage asynchronous callback listeners and callback execution so that each listener receives all callbacks in * the order they were enqueued in. * * @param <T> the listener class (usually an interface) * * @author Robert Mischke */ public interface AsyncOrderedCallbackManager<T> { /** * Adds an asynchronous listener. * * @param listener the listener to add */ void addListener(T listener); /** * Atomically adds an asynchronous listener and enqueues an asynchronous callback. The given callback is guaranteed to be the first one * that the listener receives. This is useful to initialize listeners using the callback method without risk of race conditions. * * @param listener the listener to add * @param callback the callback to execute asynchronously */ void addListenerAndEnqueueCallback(T listener, AsyncCallback<T> callback); /** * Enqueues a callback to send asynchronously to all current listeners. * * @param callback the callback to execute asynchronously */ void enqueueCallback(AsyncCallback<T> callback); /** * Removes an asynchronous listener. * * @param listener the listener to remove */ void removeListener(T listener); }