55 lines
1.4 KiB
Java
55 lines
1.4 KiB
Java
package envoy.client.net;
|
|
|
|
import java.util.LinkedList;
|
|
import java.util.Queue;
|
|
import java.util.function.Consumer;
|
|
import java.util.logging.Logger;
|
|
|
|
import envoy.client.util.EnvoyLog;
|
|
import envoy.data.Message;
|
|
|
|
/**
|
|
* Stores messages in a queue until the application initialization is complete.
|
|
* The messages can then be relayed to a processor.<br>
|
|
* <br>
|
|
* Project: <strong>envoy-client</strong><br>
|
|
* File: <strong>MessageCache.java</strong><br>
|
|
* Created: <strong>4 Feb 2020</strong><br>
|
|
*
|
|
* @author Kai S. K. Engelbart
|
|
* @since Envoy v0.3-alpha
|
|
*/
|
|
public class MessageCache implements Consumer<Message> {
|
|
|
|
private final Queue<Message> messages = new LinkedList<>();
|
|
private Consumer<Message> processor;
|
|
|
|
private static final Logger logger = EnvoyLog.getLogger(MessageCache.class.getSimpleName());
|
|
|
|
/**
|
|
* Adds a message to the cache.
|
|
*
|
|
* @since Envoy v0.3-alpha
|
|
*/
|
|
@Override
|
|
public void accept(Message message) {
|
|
logger.info(String.format("Adding message %s to cache", message));
|
|
messages.add(message);
|
|
}
|
|
|
|
/**
|
|
* Sets the processor to which messages are relayed.
|
|
*
|
|
* @param processor the processor to set
|
|
* @since Envoy v0.3-alpha
|
|
*/
|
|
public void setProcessor(Consumer<Message> processor) { this.processor = processor; }
|
|
|
|
/**
|
|
* Relays all cached messages to the processor.
|
|
*
|
|
* @since Envoy v0.3-alpha
|
|
*/
|
|
public void relayMessages() { messages.forEach(processor::accept); }
|
|
}
|