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); } } }