use of com.cloudhopper.commons.util.windowing.OfferTimeoutException in project smscgateway by RestComm.
the class TestSmppSession method sendRequestPdu.
public WindowFuture<Integer, PduRequest, PduResponse> sendRequestPdu(PduRequest pdu, long timeoutMillis, boolean synchronous) throws RecoverablePduException, UnrecoverablePduException, SmppTimeoutException, SmppChannelException, InterruptedException {
// assign the next PDU sequence # if its not yet assigned
if (!pdu.hasSequenceNumberAssigned()) {
pdu.setSequenceNumber(this.getSequenceNumber().next());
}
// encode the pdu into a buffer
ChannelBuffer buffer;
if (this.malformedPacket) {
this.malformedPacket = false;
buffer = this.testPduTranscoder.encode(pdu);
} else {
buffer = this.getTranscoder().encode(pdu);
}
WindowFuture<Integer, PduRequest, PduResponse> future = null;
try {
future = this.getSendWindow().offer(pdu.getSequenceNumber(), pdu, timeoutMillis, this.getConfiguration().getRequestExpiryTimeout(), synchronous);
} catch (DuplicateKeyException e) {
throw new UnrecoverablePduException(e.getMessage(), e);
} catch (OfferTimeoutException e) {
throw new SmppTimeoutException(e.getMessage(), e);
}
if (this.sessionHandler instanceof SmppSessionListener) {
if (!((SmppSessionListener) this.sessionHandler).firePduDispatch(pdu)) {
// logger.info("dispatched request PDU discarded: {}", pdu);
// @todo probably throwing exception here is better solution?
future.cancel();
return future;
}
}
// during the encoding process such as looking up the result message
if (this.getConfiguration().getLoggingOptions().isLogPduEnabled()) {
if (synchronous) {
// logger.info("sync send PDU: {}", pdu);
} else {
// logger.info("async send PDU: {}", pdu);
}
}
// write the pdu out & wait timeout amount of time
ChannelFuture channelFuture = this.getChannel().write(buffer).await();
// check if the write was a success
if (!channelFuture.isSuccess()) {
// the write failed, make sure to throw an exception
throw new SmppChannelException(channelFuture.getCause().getMessage(), channelFuture.getCause());
}
return future;
}
Aggregations