package com.neverwinterdp.tool.message;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import com.neverwinterdp.util.JSONSerializer;
public interface MessageGenerator {
public byte[] nextMessage(int partition, int messageSize);
static public class DefaultMessageGenerator implements MessageGenerator {
private Map<Integer, AtomicInteger> idTrackers = new HashMap<>() ;
@Override
public byte[] nextMessage(int partition, int messageSize) {
AtomicInteger idTracker = getIdTracker(partition) ;
Message message = new Message(partition, idTracker.incrementAndGet(), messageSize) ;
return JSONSerializer.INSTANCE.toBytes(message) ;
}
AtomicInteger getIdTracker(int partition) {
AtomicInteger idTracker = idTrackers.get(partition) ;
if(idTracker != null) return idTracker;
synchronized(idTrackers) {
idTracker = idTrackers.get(partition) ;
if(idTracker != null) return idTracker;
idTracker = new AtomicInteger() ;
idTrackers.put(partition, idTracker) ;
return idTracker;
}
}
};
}