package org.jboss.narayana.blacktie.jatmibroker.xatmi.services;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.jboss.narayana.blacktie.jatmibroker.core.conf.ConfigurationException;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.Buffer;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.Connection;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.ConnectionException;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.Response;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.ResponseException;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.Service;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.TPSVCINFO;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.TestTPConversation;
import org.jboss.narayana.blacktie.jatmibroker.xatmi.X_OCTET;
public class TPConversationService implements Service {
private static final Logger log = LogManager.getLogger(TPConversationService.class);
public Response tpservice(TPSVCINFO svcinfo) throws ConnectionException, ConfigurationException {
log.info("testTPConversation_service");
boolean fail = false;
if (TestTPConversation.strcmp((X_OCTET) svcinfo.getBuffer(), "conversate") != 0) {
if (svcinfo.getBuffer() != null) {
log.error("Got invalid data %s" + new String(((X_OCTET) svcinfo.getBuffer()).getByteArray()));
} else {
log.error("GOT A NULL");
}
fail = true;
} else {
long revent = 0;
log.info("Chatting");
for (int i = 0; i < TestTPConversation.interationCount; i++) {
byte[] bytes = ("hi" + i).getBytes();
X_OCTET sendbuf = (X_OCTET) svcinfo.getConnection().tpalloc("X_OCTET", null);
sendbuf.setByteArray(bytes);
// btlogger((char*) "testTPConversation_service:%s:",
// sendbuf);
int result = svcinfo.getSession().tpsend(sendbuf, Connection.TPRECVONLY);
if (result != -1) {
try {
svcinfo.getSession().tprecv(0);
fail = true;
break;
} catch (ResponseException e) {
if (e.getEvent() == Connection.TPEV_SENDONLY) {
Buffer rcvbuf = e.getReceived();
if (TestTPConversation.strcmp("yo" + i, rcvbuf) != 0) {
fail = true;
break;
}
} else {
fail = true;
break;
}
} catch (ConnectionException e) {
fail = true;
break;
}
} else {
fail = true;
break;
}
}
log.info("Chatted");
}
if (fail) {
return new Response((short) Connection.TPESVCFAIL, 0, null, 0);
} else {
byte[] bytes = ("hi" + TestTPConversation.interationCount).getBytes();
X_OCTET sendbuf = (X_OCTET) svcinfo.getConnection().tpalloc("X_OCTET", null);
sendbuf.setByteArray(bytes);
return new Response(Connection.TPSUCCESS, 0, sendbuf, 0);
}
}
}