private <R extends Response> R retrySync(Request aRequest) throws Exception {
RequestEnvelope requestEnv = new RequestEnvelope(aRequest, null, null, sessionTicket, null);
Logger.getLogger(PlatypusPlatypusConnection.class.getName()).log(Level.FINE, "{0} is connecting to {1}:{2}.", new Object[]{Thread.currentThread().getName(), host, port});
if (!syncSocket.isConnected()) {
syncSocket.connect(new InetSocketAddress(host, port));
}
Logger.getLogger(PlatypusPlatypusConnection.class.getName()).log(Level.FINE, "{0} is connected to {1}:{2}.", new Object[]{Thread.currentThread().getName(), host, port});
SyncProtocolEncoderOutput requestOut = new SyncProtocolEncoderOutput();
syncEncoder.encode(null, requestEnv, requestOut);
Object oFiltered = requestOut.getFiltered();
OutputStream os = syncSocket.getOutputStream();
IoBuffer toWrite = (IoBuffer) oFiltered;
os.write(toWrite.array());
byte[] readBuffer = new byte[1024 * 16];
ByteArrayOutputStream accumulated = new ByteArrayOutputStream();
InputStream is = syncSocket.getInputStream();
int read = 0;
while (read > -1) {
read = is.read(readBuffer);
accumulated.write(readBuffer, 0, read);
SyncProtocolDecoderOutput responseOut = new SyncProtocolDecoderOutput();
IoSession session = new DummySession();
session.setAttribute(RequestEnvelope.class.getSimpleName(), requestEnv);
if (syncDecoder.doDecode(session, IoBuffer.wrap(accumulated.toByteArray()), responseOut)) {
sessionTicket = requestEnv.ticket;
return (R) responseOut.getFiltered();
}
}
throw new Exception("No response was recieved via platypus protocol");
}