/// <summary> /// Constructor /// </summary> /// <param name="mllp"></param> public MllpPacket(byte[] mllp) { if (mllp != null && IsValidMllpPacket(mllp.ToList())) hl7 = new HL7Message(ParseMllpPacket(mllp.ToList()).ToArray()); else throw new ArgumentException("Invalid MLLP packet"); }
static HL7Message mllpReceiver_HL7MessageReceived(HL7Message hl7) { Console.WriteLine(hl7 + "\n\n"); // return new HL7Message( //@"MSH|^~\&|BROKER.RECEIVER.FLOW||ADT|767543|20090824222730||ACK|XX3657|P|2.5 //MSA|AA|ZZ9380||1"); return null; }
static void mllpSend_ErrorHandler(Exception ex, HL7Message hl7) { Console.WriteLine(ex.Message + "\n\n"); }
static void mllpSend_AckNackReceived(HL7Message origHl7, HL7Message ackNack) { // if (++count % 100 == 0) Console.WriteLine("ACK Received: " + count + "\n"); }
/// <summary> /// Send: sends an HL7 message to a host and returns the ACK/NACK response (if required). /// </summary> /// <param name="data"></param> /// <returns>byte[]</returns> public HL7Message Send(HL7Message hl7) { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { s.Connect(ep); if (s.Connected) { MllpPacket mllp = new MllpPacket(hl7); int count = s.Send((byte[])mllp); if (count > 0 && ackNackRequired) { SocketState state = new SocketState(); s.Receive(state.Buffer, 0, SocketState.BufferSize, SocketFlags.None); if (MllpPacket.IsValidMllpPacket(state.Buffer.ToList())) return new MllpPacket(state.Buffer).HL7Message; } } } finally { s.Close(); } return null; }
/// <summary> /// RaiseErrorEvent /// </summary> /// <param name="error"></param> private void RaiseErrorEvent(Exception ex, HL7Message hl7) { try { if (ErrorHandler != null) ErrorHandler(ex, hl7); } catch { } }
/// <summary> /// RaiseAckNackReceived /// </summary> /// <param name="ackNack"></param> private void RaiseAckNackReceived(HL7Message origHl7, HL7Message ackNack) { try { if (AckNackReceived != null) AckNackReceived(origHl7, ackNack); } catch { } }
/// <summary> /// SendAsync: sends an HL7 message to a host and returns the ACK/NACK response (if required). /// </summary> /// <param name="data"></param> /// <returns>bool</returns> public void SendAsync(HL7Message hl7) { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { s.BeginConnect(ep, SocketConnect, new SocketState() { Socket = s, HL7Message = hl7 }); } catch (Exception ex) { RaiseErrorEvent(ex, hl7); s.Close(); } }
/// <summary> /// Constructor /// </summary> /// <param name="hl7"></param> public MllpPacket(HL7Message hl7) { this.hl7 = hl7; }