public Hl7SocketListener(int port, StringStringDelegate callback, bool useSsl = false)
        {
            _useSsl = useSsl;

            try
            {
                if (port == 0)
                {
                    throw new ArgumentOutOfRangeException($"Port is 0");
                }

                _stringCallback = callback ?? throw new ArgumentNullException($"callback null");

                _listenerSocket = new MotSocket(port, callback)
                {
                    UseSsl    = UseSsl,
                    _useASCII = PreferASCII
                };
            }
            catch (Exception e)
            {
                var errString = $"An error occurred while attempting to start the HL7 Listener: {e.Message}";
                EventLogger.Error(errString);
                throw;
            }
        }
        /// <inheritdoc />
        public MotParser(MotSocket outSocket, string inputStream, InputDataFormat inputDataFormat, bool debugMode = false, bool allowZeroTQ = false, string defaultStoreLoc = null, bool autoTruncate = false, bool sendEof = false) : base(inputStream)
        {
            GatewaySocket = outSocket ?? throw new ArgumentNullException($@"NULL Socket passed to MotParser");

            if (GatewaySocket.Disposed)
            {
                throw new ArgumentNullException($"Disposed Socket passed to MotParser");
            }

            SendEof         = sendEof;
            DebugMode       = debugMode;
            AutoTruncate    = autoTruncate;
            AllowZeroTQ     = allowZeroTQ;
            DefaultStoreLoc = defaultStoreLoc;

            try
            {
                RunParser(inputDataFormat, inputStream);
            }
            catch
            {
                EventLogger.Error($"MotParser failed on input type {inputDataFormat} and data: {inputStream}");
                throw;
            }
        }
Esempio n. 3
0
        public string Parse(string data)
        {
            if (data == null)
            {
                throw new ArgumentNullException($"MotParser::Parse");
            }

            string responseMessage;

            try
            {
                using (var gatewaySocket = new MotSocket(GatewayAddress, GatewayPort))
                {
                    gatewaySocket._useASCII = this.UseAscii;

                    using (var p = new MotParser(gatewaySocket, data, _inputDataFormat, DebugMode, AllowZeroTQ, DefaultStoreLoc))
                    {
                        EventLogger.Debug(p.ResponseMessage);
                        responseMessage = p.ResponseMessage;
                    }
                }
            }
            catch (Exception ex)
            {
                responseMessage = $"Parser failure, Message: {ex.Message}";
                EventLogger.Error(responseMessage);
                throw;
            }

            return(responseMessage);
        }
 /// <inheritdoc />
 // ReSharper disable once UnusedParameter.Local
 public MotParser(string inputStream, InputDataFormat inputDataFormat, bool autoTruncate = false, bool sendEof = false, bool debugMode = false) : base(inputStream)
 {
     try
     {
         GatewaySocket = new MotSocket("localhost", 24042);
         RunParser(inputDataFormat, inputStream);
     }
     catch
     {
         EventLogger.Error("MotParser failed on input type {0} and data: {1}", inputDataFormat.ToString(), inputStream);
         throw;
     }
 }
        /// <inheritdoc />
        public MotParser(MotSocket outSocket, string inputStream, bool autoTruncate) : base(inputStream)
        {
            GatewaySocket = outSocket ?? throw new ArgumentNullException($@"NULL Socket passed to MotParser");

            if (GatewaySocket.Disposed)
            {
                throw new ArgumentNullException($@"Disposed Socket passed to MotParser");
            }

            AutoTruncate = autoTruncate;

            try
            {
                ParseByGuess(inputStream);
            }
            catch
            {
                EventLogger.Error("MotParser failed on input type {0} and data: {1}", "Best Guess", inputStream);
                throw;
            }
        }
        public void TestReturnValuesFromSocket()
        {
            var brokenRecordBadTableType       = @"<Record><Table>Foobar</Table><Action>Add</Action><RxSys_PatID>6d9f217b-c2c8-4b44-b617-96a446b6bf11</RxSys_PatID><LastName>Banzai</LastName><FirstName>Buckaroo</FirstName><MiddleInitial></MiddleInitial><Address1></Address1><Address2></Address2><City></City><State></State><Zip></Zip><Phone1></Phone1><Phone2></Phone2><WorkPhone></WorkPhone><RxSys_LocID>5d0504e3-c94a-4697-83d6-473b857d4a89</RxSys_LocID><Room></Room><Comments></Comments><CycleDate>2018-10-16</CycleDate><CycleDays>30</CycleDays><CycleType></CycleType><Status></Status><RxSys_LastDoc></RxSys_LastDoc><RxSys_PrimaryDoc>d23707a2-5eea-407c-9692-a52eeba31f0e</RxSys_PrimaryDoc><RxSys_AltDoc></RxSys_AltDoc><SSN></SSN><Allergies></Allergies><Diet></Diet><DxNotes></DxNotes><TreatmentNotes></TreatmentNotes><DOB>2018-10-16</DOB><Height></Height><Weight></Weight><ResponsibleName></ResponsibleName><InsName></InsName><InsPNo></InsPNo><AltInsName></AltInsName><AltInsPNo></AltInsPNo><MCareNum></MCareNum><MCaidNum></MCaidNum><AdmitDate></AdmitDate><ChartOnly></ChartOnly><Gender></Gender></Record>";
            var brokenRecordBadActionType      = @"<Record><Table>Patient</Table><Action>FooBar</Action><RxSys_PatID>6d9f217b-c2c8-4b44-b617-96a446b6bf11</RxSys_PatID><LastName>Banzai</LastName><FirstName>Buckaroo</FirstName><MiddleInitial></MiddleInitial><Address1></Address1><Address2></Address2><City></City><State></State><Zip></Zip><Phone1></Phone1><Phone2></Phone2><WorkPhone></WorkPhone><RxSys_LocID>5d0504e3-c94a-4697-83d6-473b857d4a89</RxSys_LocID><Room></Room><Comments></Comments><CycleDate>2018-10-16</CycleDate><CycleDays>30</CycleDays><CycleType></CycleType><Status></Status><RxSys_LastDoc></RxSys_LastDoc><RxSys_PrimaryDoc>d23707a2-5eea-407c-9692-a52eeba31f0e</RxSys_PrimaryDoc><RxSys_AltDoc></RxSys_AltDoc><SSN></SSN><Allergies></Allergies><Diet></Diet><DxNotes></DxNotes><TreatmentNotes></TreatmentNotes><DOB>2018-10-16</DOB><Height></Height><Weight></Weight><ResponsibleName></ResponsibleName><InsName></InsName><InsPNo></InsPNo><AltInsName></AltInsName><AltInsPNo></AltInsPNo><MCareNum></MCareNum><MCaidNum></MCaidNum><AdmitDate></AdmitDate><ChartOnly></ChartOnly><Gender></Gender></Record>";
            var brokenRecordMissingPrimaryTags = @"<Table>Patient</Table><Action>Add</Action><RxSys_PatID>6d9f217b-c2c8-4b44-b617-96a446b6bf11</RxSys_PatID><LastName>Banzai</LastName><FirstName>Buckaroo</FirstName><MiddleInitial></MiddleInitial><Address1></Address1><Address2></Address2><City></City><State></State><Zip></Zip><Phone1></Phone1><Phone2></Phone2><WorkPhone></WorkPhone><RxSys_LocID>5d0504e3-c94a-4697-83d6-473b857d4a89</RxSys_LocID><Room></Room><Comments></Comments><CycleDate>2018-10-16</CycleDate><CycleDays>30</CycleDays><CycleType></CycleType><Status></Status><RxSys_LastDoc></RxSys_LastDoc><RxSys_PrimaryDoc>d23707a2-5eea-407c-9692-a52eeba31f0e</RxSys_PrimaryDoc><RxSys_AltDoc></RxSys_AltDoc><SSN></SSN><Allergies></Allergies><Diet></Diet><DxNotes></DxNotes><TreatmentNotes></TreatmentNotes><DOB>2018-10-16</DOB><Height></Height><Weight></Weight><ResponsibleName></ResponsibleName><InsName></InsName><InsPNo></InsPNo><AltInsName></AltInsName><AltInsPNo></AltInsPNo><MCareNum></MCareNum><MCaidNum></MCaidNum><AdmitDate></AdmitDate><ChartOnly></ChartOnly><Gender></Gender>";
            var brokenRecordEmpty = @"<record></record>";
            var brokenRecordMissingClosingTags = @"<Record><Table>Patient</Table><Action>Add</Action><RxSys_PatID>6d9f217b-c2c8-4b44-b617-96a446b6bf11</RxSys_PatID><LastName>Banzai</LastName><FirstName>Buckaroo</FirstName><MiddleInitial></MiddleInitial><Address1></Address1><Address2></Address2><City></City><State></State><Zip></Zip><Phone1></Phone1><Phone2></Phone2><WorkPhone></WorkPhone><RxSys_LocID>5d0504e3-c94a-4697-83d6-473b857d4a89</RxSys_LocID><Room></Room><Comments></Comments><CycleDate>2018-10-16</CycleDate><CycleDays>30</CycleDays><CycleType></CycleType><Status></Status><RxSys_LastDoc></RxSys_LastDoc><RxSys_PrimaryDoc>d23707a2-5eea-407c-9692-a52eeba31f0e</RxSys_PrimaryDoc><RxSys_AltDoc></RxSys_AltDoc><SSN></SSN><Allergies></Allergies><Diet></Diet><DxNotes></DxNotes><TreatmentNotes></TreatmentNotes><DOB>2018-10-16</DOB><Height></Height><Weight></Weight><ResponsibleName></ResponsibleName><InsName></InsName><InsPNo></InsPNo><AltInsName></AltInsName><AltInsPNo></AltInsPNo><MCareNum></MCareNum><MCaidNum></MCaidNum><AdmitDate></AdmitDate><ChartOnly></ChartOnly><Gender></Gender>";


            using (var s = new MotSocket("localhost", 24042))
            {
                s._useASCII = true;

                try
                {
                    var ret = s.Write(brokenRecordBadTableType);
                    if (ret != false)
                    {
                        Assert.Fail("MotSocket Wrong return, should be 0x15, 0xA, or `Error - Invalid Table Type");
                    }
                }
                catch
                {
                    Console.WriteLine("MotSocket Successful prror trap for bad table type");
                }

                try
                {
                    var ret = s.Write(brokenRecordBadActionType);
                    if (ret != false)
                    {
                        Assert.Fail("MotSocket Wrong return, should be 0x15, 0xB, or `Error - Invalid Process Type");
                    }
                }
                catch
                {
                    Console.WriteLine("MotSocket Successful prror trap for bad table type");
                }

                try
                {
                    var ret = s.Write(brokenRecordMissingPrimaryTags);
                    if (ret != false)
                    {
                        Assert.Fail("MotSocket Wrong return, should be 0x15, 0xC, or `Error - Missing <record> tags");
                    }
                }
                catch
                {
                    Console.WriteLine("MotSocket Successful prror trap for bad table type");
                }

                try
                {
                    var ret = s.Write(brokenRecordEmpty);
                    if (ret != false)
                    {
                        Assert.Fail("MotSocket Wrong return, should be 0x15, 0xD, or `Error - No data between <record></record> tags");
                    }
                }
                catch
                {
                    Console.WriteLine("MotSocket Successful prror trap for bad table type");
                }

                try
                {
                    var ret = s.Write(brokenRecordMissingClosingTags);
                    if (ret != false)
                    {
                        Assert.Fail("MotSocket Wrong return, should be 0x15, 0xA, or `Error - Invalid Table Type");
                    }
                }
                catch
                {
                    Console.WriteLine("MotSocket Successful prror trap for bad table type");
                }
            }
        }