Beispiel #1
0
        /// <summary>
        /// Send a HL7 message
        /// </summary>
        /// <param name="message">Message to send</param>
        /// <returns>Reply message</returns>
        public string SendHL7Message(string message)
        {
            message = MLLP.CreateMLLPMessage(message);

            // Send the message
            StreamWriter sw = new StreamWriter(streamToUse);

            sw.Write(message);
            sw.Flush();

            // Read the reply
            StringBuilder sb = new StringBuilder();
            bool          messageComplete = false;

            while (!messageComplete)
            {
                int b = streamToUse.ReadByte();
                if (b != -1)
                {
                    sb.Append((char)b);
                }

                messageComplete = MLLP.ValidateMLLPMessage(sb);
            }
            MLLP.StripMLLPContainer(sb);

            return(sb.ToString());
        }
        /// <summary>
        /// Send a HL7 message
        /// </summary>
        /// <param name="message">Message to send</param>
        /// <returns>Reply message</returns>
        public string SendHL7Message(string message)
        {
            message = MLLP.CreateMLLPMessage(message);

            // Send the message
            StreamWriter sw = new StreamWriter(streamToUse);

            sw.Write(message);
            sw.Flush();

            var stopwatch = new Stopwatch();

            if (ReceiveTimeoutInSeconds > 0)
            {
                stopwatch.Start();
            }

            // Read the reply
            StringBuilder sb = new StringBuilder();
            bool          messageComplete = false;

            while (!messageComplete)
            {
                int b = streamToUse.ReadByte();
                if (b != -1)
                {
                    sb.Append((char)b);
                }

                messageComplete = MLLP.ValidateMLLPMessage(sb);

                if (ReceiveTimeoutInSeconds > 0)
                {
                    if (stopwatch.ElapsedMilliseconds / 1000 > ReceiveTimeoutInSeconds)
                    {
                        messageComplete = true;
                        stopwatch.Stop();
                        return(string.Format("Timed out waiting for response after {0} seconds", ReceiveTimeoutInSeconds));
                    }
                }
            }
            MLLP.StripMLLPContainer(sb);

            return(sb.ToString());
        }
        protected override HL7RequestInfo ProcessMatchedRequest(byte[] readBuffer, int offset, int length)
        {
            byte[] msg = new byte[length];
            Array.Copy(readBuffer, offset, msg, offset, length);

            string result = System.Text.UTF8Encoding.UTF8.GetString(msg);

            // Remove the begin and end marks
            if (result.Length > 3)
            {
                StringBuilder sb = new StringBuilder(result);
                MLLP.StripMLLPContainer(sb);

                result = sb.ToString();
            }
            // Remove empty space at the end of the message
            result = result.TrimEnd(new char[] { ' ', '\r', '\n' });

            HL7RequestInfoParser parser = new HL7RequestInfoParser();

            return(parser.ParseRequestInfo(result, "MLLP"));
        }
Beispiel #4
0
        /// <summary>
        /// Send a HL7 message
        /// </summary>
        /// <param name="message">Message to send</param>
        /// <param name="timeout">Read timeout, throws exception when receiving no data until timeout</param>
        /// <returns>Reply message</returns>
        /// <exception cref="TimeoutException">throws exception on read timeout</exception>
        public string SendHL7Message(string message, double timeout = 30000)
        {
            message = MLLP.CreateMLLPMessage(message);

            // Send the message
            StreamWriter sw = new StreamWriter(streamToUse, encodingForStream);

            sw.Write(message);
            sw.Flush();

            // Read the reply
            StringBuilder sb = new StringBuilder();
            bool          messageComplete  = false;
            DateTime      startReadingTime = DateTime.Now;

            while (!messageComplete)
            {
                int b = streamToUse.ReadByte();
                if (b != -1)
                {
                    sb.Append((char)b);
                }

                messageComplete = MLLP.ValidateMLLPMessage(sb);

                if (b > 0) // reset start reading time for timout check
                {
                    startReadingTime = DateTime.Now;
                }

                if (!messageComplete && DateTime.Now.Subtract(startReadingTime).TotalMilliseconds > timeout)
                {
                    throw new TimeoutException($"Reading the HL7 reply timed out after {timeout} milliseconds.");
                }
            }
            MLLP.StripMLLPContainer(sb);

            return(sb.ToString());
        }