* (non-Javadoc)
* @see net.timewalker.ffmq3.remote.transport.PacketTransportListener#packetReceived(net.timewalker.ffmq3.remote.transport.packet.AbstractPacket)
*/
public boolean packetReceived(AbstractPacket packet)
{
AbstractQueryPacket query = (AbstractQueryPacket)packet;
AbstractResponsePacket response = null;
// Process packet
try
{
if (traceEnabled)
log.trace("#"+id+" Received "+packet);
try
{
response = process(query);
}
catch (JMSException e)
{
log.debug("#"+id+" process() failed with "+e.toString());
response = new ErrorResponse(e);
}
}
catch (Exception e)
{
log.error("#"+id+" Cannot process command",e);
}
// Send response
if (response != null)
{
// Map endpoint id on response
response.setEndpointId(query.getEndpointId());
try
{
if (traceEnabled)
log.trace("#"+id+" Sending "+response);
transport.send(response);
}
catch (Exception e)
{
log.warn("#"+id+" Cannot send response to client : "+e.toString());
transport.close();
}
}
else
{
// Consistency check
if (query.getEndpointId() >= 0)
throw new IllegalStateException("Missing response to endpoint "+query.getEndpointId()+" query : "+query.getClass().getSimpleName());
}
return localConnection != null; // Connection still valid ?
}