public void run() {
try {
s.setSoTimeout(conn.getIdleTimeout());
MLLPConnection mllp = new MLLPConnection(s);
byte[] data;
while ((data = mllp.readMessage()) != null) {
HL7ConnectionMonitor monitor = hl7dev.getHL7ConnectionMonitor();
UnparsedHL7Message msg = new UnparsedHL7Message(data);
if (monitor != null)
monitor.onMessageReceived(conn, s, msg);
UnparsedHL7Message rsp;
try {
rsp = hl7dev.onMessage(conn, s, msg);
if (monitor != null)
monitor.onMessageProcessed(conn, s, msg, rsp, null);
} catch (HL7Exception e) {
rsp = new UnparsedHL7Message(
HL7Message.makeACK(msg.msh(), e).getBytes(null));
if (monitor != null)
monitor.onMessageProcessed(conn, s, msg, rsp, e);
}
mllp.writeMessage(rsp.data());
}
} catch (IOException e) {
LOG.warn("Exception on accepted connection {}:", s, e);
} finally {
conn.close(s);
}
}
}