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