}
@Override
public void handleMessage(ByteBuffer message, Connection c) {
try {
StoredProcedureInvocation spi = new StoredProcedureInvocation();
spi.initFromBuffer(message);
final String proc = spi.getProcName();
// record if we got a ping
if (proc.equals("@Ping"))
gotPing = true;
if (sendResponses.get()) {
VoltTable vt[] = new VoltTable[0];
if (proc.equals("@Subscribe")) {
invokedSubscribe.release();
} else if (proc.equals("@Statistics")) {
invokedTopology.release();
} else if (proc.equals("@SystemCatalog")) {
invokedSystemInformation.release();
} else {
vt = new VoltTable[1];
vt[0] = new VoltTable(new VoltTable.ColumnInfo("Foo", VoltType.BIGINT));
vt[0].addRow(1);
}
ClientResponseImpl response;
if (sendProcTimeout.get()) {
response = new ClientResponseImpl(ClientResponseImpl.CONNECTION_TIMEOUT, vt,
"Timeout String", spi.getClientHandle());
} else {
response = new ClientResponseImpl(ClientResponseImpl.SUCCESS, vt,
"Extra String", spi.getClientHandle());
}
ByteBuffer buf = ByteBuffer.allocate(4 + response.getSerializedSize());
buf.putInt(buf.capacity() - 4);
response.flattenToBuffer(buf);
buf.clear();