package org.cowboycoders.ant.utils;
import org.cowboycoders.ant.Channel;
import org.cowboycoders.ant.events.MessageCondition;
import org.cowboycoders.ant.events.MessageConditionFactory;
import org.cowboycoders.ant.messages.ChannelMessage;
import org.cowboycoders.ant.messages.MessageId;
import org.cowboycoders.ant.messages.StandardMessage;
import org.cowboycoders.ant.messages.data.BroadcastDataMessage;
import org.cowboycoders.ant.messages.responses.ResponseCode;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.logging.Logger;
public class AntUtils {
private AntUtils() {}
public final static Logger LOGGER = Logger.getLogger(AntUtils.class.getName());
public static final MessageCondition CONDITION_CHANNEL_TX = MessageConditionFactory
.newResponseCondition(MessageId.EVENT, ResponseCode.EVENT_TX);
public static byte[] padToDataLength(int[] array) {
byte[] rtn = new byte[8];
for (int i = 0; i < array.length; i++) {
rtn[i] = (byte) array[i];
}
return rtn;
}
public static StandardMessage sendAndRetry(final Channel channel, final ChannelMessage msg,
final MessageCondition condition, final int maxRetries, final long timeoutPerRetry, final
TimeUnit timeoutUnit) throws InterruptedException, TimeoutException {
StandardMessage response = null;
int retries = 0;
while (response == null) {
try {
response = channel.sendAndWaitForMessage(
msg,
condition,
timeoutPerRetry, timeoutUnit,
null
);
} catch (TimeoutException e) {
LOGGER.finer("sendAndRetry : timeout");
retries++;
if (retries >= maxRetries) {
throw e;
}
}
}
return response;
}
public static BroadcastDataMessage buildBroadcastMessage(byte[] data) {
BroadcastDataMessage msg = new BroadcastDataMessage();
msg.setData(data);
return msg;
}
}