/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.transport.spi;
import java.util.concurrent.atomic.AtomicInteger;
import de.rcenvironment.core.communication.channel.MessageChannelIdFactory;
import de.rcenvironment.core.utils.common.StringUtils;
import de.rcenvironment.toolkit.utils.common.IdGenerator;
/**
* A {@link MessageChannelIdFactory} implementation generating JVM-wide unique integer ids.
*
* @author Robert Mischke
*/
public class DefaultMessageChannelIdFactoryImpl implements MessageChannelIdFactory {
private static final int CHANNEL_ID_LENGTH = 32;
// assuming that 2^31 connections will suffice for now...
private static AtomicInteger sequence = new AtomicInteger();
@Override
public String generateId(boolean selfInitiated) {
// embed a flag that indicates whether this connection was self- or remote-initiated
String directionFlag;
// blame CheckStyle for the verbosity...
if (selfInitiated) {
directionFlag = "s";
} else {
directionFlag = "r";
}
// the running index is for easy identification in log output; the random part ensures
// uniqueness; the leading "c" is to make it recognizable as a connection id -- misc_ro
return StringUtils.format("c%d%s-%s", sequence.incrementAndGet(), directionFlag,
IdGenerator.fastRandomHexString(CHANNEL_ID_LENGTH));
}
}