private void SendEcho(Fiskalizator fiskalizator, string testString) { try { var replyMessage = fiskalizator.SendEcho(testString).InnerText.Trim(new[] { '\r', '\n' }); WriteToFile((replyMessage == testString ? new[] { "TRUE", (fiskalizator.LastMessageTimeStamps != null ? String.Format("Komunikacija: {0} - {1} ({2})", fiskalizator.LastMessageTimeStamps[0], fiskalizator.LastMessageTimeStamps[1], fiskalizator.LastMessageTimeStamps[1] - fiskalizator.LastMessageTimeStamps[0]) : "") } : new[] { "FALSE", String.Format("Received string ({0}) is different than sent string ({1})", replyMessage, testString) })); } catch (Exception ex) { try { WriteToFile(new[] { "FALSE", ex.Message }); } catch (Exception wex) { if (_settings.WriteDebugToLog) { WriteToLog("Unable to write to file. See next two log entries for details. [Line 271]"); WriteToLog(GenerateExceptionMessages(ex, 263)); WriteToLog(GenerateExceptionMessages(wex, 269)); } } } }
private static void SendWorkspace(Fiskalizator fiskalizator, Settings settings) { try { var parameters = new List <string>(Util.ReadFromFile(settings.InputFile).Split('|')); if (parameters.Count != 17) { WriteToFile(settings, new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } PoslovniProstorType workspace; string[] certificateParams; Util.ParseWorkspaceInput(parameters, out workspace, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(settings, new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } XmlDocument reply; try { reply = (certificateParams.Length == 1 ? fiskalizator.SendWorkspace(workspace, certificateParams[0]) : fiskalizator.SendWorkspace(workspace, certificateParams[0], certificateParams[1])); } catch (ServerException sex) { reply = fiskalizator.CisErrorReply; var lines = new List <string> { "FALSE" }; if (fiskalizator.CisExceptionStatus != null) { lines.Add("Server exception: " + fiskalizator.CisExceptionStatus); } try { var error = Fiskalizator.GetErrorCodeAndMessage(reply, MessageType.Workspace_From_CIS); lines.Add("Server error: " + error[0] + ' ' + error[1]); } catch { } lines.Add(String.Format("{0} {1}", sex.Message, (sex.InnerException != null ? sex.InnerException.Message : ""))); WriteToFile(settings, lines.ToArray()); throw new MyExitException(); } WriteToFile(settings, new[] { "TRUE", Fiskalizator.GetMessageTimestamp(reply, MessageType.Workspace_From_CIS) }); } catch (MyExitException) { throw new MyExitException(); } catch (Exception ex) { WriteToFile(settings, new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }
static void Main(string[] args) { var settings = new Settings(false); Util.ParseArguments(args, settings); if (settings.Operation == OperationType.UNKNOWN) { WriteToFile(settings, new[] { "FALSE", "Operation unknown" }); return; } var fiskalizator = new Fiskalizator(Properties.Settings.Default.CIS_URLTEST, null, settings.TimeOut); try { File.Delete(settings.OutputFile); } catch (DirectoryNotFoundException) { } catch { return; } try { switch (settings.Operation) { case OperationType.ECHO: SendEcho(fiskalizator, Util.ReadFromFile(settings.InputFile), settings); break; case OperationType.WORKSPACE: SendWorkspace(fiskalizator, settings); break; case OperationType.INVOICE: SendInvoice(fiskalizator, settings); break; case OperationType.CHECK: SendCheck(fiskalizator, settings); break; case OperationType.SAFETYCODE: GenerateSafetyCode(settings); break; } } catch (MyExitException) { } catch (Exception ex) { WriteToFile(settings, new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }
private static void SendEcho(Fiskalizator fiskalizator, string testString, Settings settings) { try { var replyMessage = fiskalizator.SendEcho(testString).InnerText.Trim(new[] { '\r', '\n' }); WriteToFile(settings, (replyMessage == testString ? new[] { "TRUE" } : new[] { "FALSE", String.Format("Received string ({0}) is different than sent string ({1})", replyMessage, testString) })); } catch (Exception ex) { try { WriteToFile(settings, new [] { "FALSE", ex.Message }); } catch { } } }
private void GenerateSafetyCode(List <string> inputParameters) { if (inputParameters.Count != 10) { WriteToFile(new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } RacunType invoice; string[] certificateParams; Util.ParseSafetyKeyInput(inputParameters, out invoice, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } WriteToFile(new[] { "TRUE", (certificateParams.Length == 1 ? Fiskalizator.GenerateSafetyCode(certificateParams[0], invoice.Oib, invoice.DatVrijeme, invoice.BrRac.BrOznRac, invoice.BrRac.OznPosPr, invoice.BrRac.OznNapUr, invoice.IznosUkupno) : Fiskalizator.GenerateSafetyCode(certificateParams[0], certificateParams[1], invoice.Oib, invoice.DatVrijeme, invoice.BrRac.BrOznRac, invoice.BrRac.OznPosPr, invoice.BrRac.OznNapUr, invoice.IznosUkupno)) }); }
private void Timer_Elapsed(object sender, ElapsedEventArgs e) { try { _timer.Stop(); _settings = new Settings(true); _operationStartTimestamp = DateTime.Now; List <string> inputParameters = null; try { inputParameters = new List <string>(Util.ReadFromFile(_settings.InputFile).Split('|')); File.Delete(_settings.InputFile); } catch { throw new MyExitException(); } Util.ParseArguments(inputParameters[0].Split(';'), _settings); inputParameters.RemoveAt(0); if (_settings.Operation == OperationType.UNKNOWN) { WriteToFile(new[] { "FALSE", "Operation unknown" }); return; } var fiskalizator = new Fiskalizator(_settings.CisWebServiceUrl, _settings.XMLOutputFolder, _settings.TimeOut); fiskalizator.NewLogEntryNeeded += fiskalizator_NewLogEntryNeeded; try { File.Delete(_settings.OutputFile); } catch (DirectoryNotFoundException) { } catch { throw new MyExitException(); } try { switch (_settings.Operation) { case OperationType.ECHO: SendEcho(fiskalizator, inputParameters[0]); break; case OperationType.WORKSPACE: SendWorkspace(fiskalizator, inputParameters); break; case OperationType.INVOICE: SendInvoice(fiskalizator, inputParameters); break; case OperationType.CHECK: SendCheck(fiskalizator, inputParameters); break; case OperationType.SAFETYCODE: GenerateSafetyCode(inputParameters); break; } } catch (MyExitException) { } } catch (MyExitException) { } catch (Exception ex) { if (_settings.WriteDebugToLog) { WriteToLog("General exception in service loop. See next entry for exception details."); WriteToLog(GenerateExceptionMessages(ex, 714)); } WriteToFile(new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } finally { _timer.Start(); } }
private void SendCheck(Fiskalizator fiskalizator, List <string> inputParameters) { try { if (inputParameters.Count != 23) { WriteToFile(new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } RacunType invoice; string[] certificateParams; Util.ParseInvoiceInput(inputParameters, out invoice, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } XmlDocument reply; try { if (_settings.WriteDebugToLog) { WriteToLog("Prepared to send invoice."); } reply = (certificateParams.Length == 1 ? fiskalizator.SendCheck(invoice, certificateParams[0]) : fiskalizator.SendCheck(invoice, certificateParams[0], certificateParams[1])); if (_settings.WriteDebugToLog) { WriteToLog("Invoice sent and reply recieved."); } if (_settings.WriteDebugToLog) { WriteToLog("Sucessful reply - starting to write output.out [Line 707]"); } var tekstGresaka = (string)null; var doc = XDocument.Load(new XmlNodeReader(reply)); var greskeNode = doc.Elements().First() .Elements().First() .Elements().First() .Elements().SingleOrDefault(x => x.Name.ToString().EndsWith("Greske")); if (greskeNode != null) { tekstGresaka = greskeNode.Elements() .Select(x => string.Format("{0} {1}", x.Elements().Single(y => y.Name.ToString().EndsWith("SifraGreske")).Value, x.Elements().Single(y => y.Name.ToString().EndsWith("PorukaGreske")).Value)) .Aggregate((x, y) => x + Environment.NewLine + y); } WriteToFile((tekstGresaka != null ? new[] { "FALSE", tekstGresaka, (fiskalizator.LastMessageTimeStamps != null ? String.Format("Komunikacija: {0} - {1} ({2})", fiskalizator.LastMessageTimeStamps[0], fiskalizator.LastMessageTimeStamps[1], fiskalizator.LastMessageTimeStamps[1] - fiskalizator.LastMessageTimeStamps[0]) : "") } : new[] { "TRUE", (fiskalizator.LastMessageTimeStamps != null ? String.Format("Komunikacija: {0} - {1} ({2})", fiskalizator.LastMessageTimeStamps[0], fiskalizator.LastMessageTimeStamps[1], fiskalizator.LastMessageTimeStamps[1] - fiskalizator.LastMessageTimeStamps[0]) : "") })); } catch (ServerException sex) { if (_settings.WriteDebugToLog) { WriteToLog("Recieved ServerException - message parsing started [Line 681]"); } reply = fiskalizator.CisErrorReply; var lines = new List <string> { "FALSE", invoice.ZastKod }; if (fiskalizator.CisExceptionStatus != null) { lines.Add("Server exception: " + fiskalizator.CisExceptionStatus); } try { var error = Fiskalizator.GetErrorCodeAndMessage(reply, MessageType.Invoice_From_CIS); lines.Add("Server error: " + error[0] + ' ' + error[1]); } catch (Exception ex) { if (_settings.WriteDebugToLog) { WriteToLog(GenerateExceptionMessages(sex, 670)); WriteToLog(GenerateExceptionMessages(ex, 683)); } } lines.Add(String.Format("{0} {1}", sex.Message, (sex.InnerException != null ? sex.InnerException.Message : ""))); if (_settings.WriteDebugToLog) { WriteToLog("ServerException sucessfuly parsed - starting to write output.out [Line 702]"); } WriteToFile(lines.ToArray()); throw new MyExitException(); } } catch (MyExitException) { throw new MyExitException(); } catch (Exception ex) { if (_settings.WriteDebugToLog) { WriteToLog("Exception in SendInvoice. See next entry for exception details."); WriteToLog(GenerateExceptionMessages(ex, 714)); } WriteToFile(new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }
private void SendWorkspace(Fiskalizator fiskalizator, List <string> inputParameters) { try { if (inputParameters.Count != 17) { WriteToFile(new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } PoslovniProstorType workspace; string[] certificateParams; Util.ParseWorkspaceInput(inputParameters, out workspace, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } XmlDocument reply; try { reply = (certificateParams.Length == 1 ? fiskalizator.SendWorkspace(workspace, certificateParams[0]) : fiskalizator.SendWorkspace(workspace, certificateParams[0], certificateParams[1])); } catch (ServerException sex) { reply = fiskalizator.CisErrorReply; var lines = new List <string> { "FALSE" }; if (fiskalizator.CisExceptionStatus != null) { lines.Add("Server exception: " + fiskalizator.CisExceptionStatus); } try { var error = Fiskalizator.GetErrorCodeAndMessage(reply, MessageType.Workspace_From_CIS); lines.Add("Server error: " + error[0] + ' ' + error[1]); } catch (Exception ex) { if (_settings.WriteDebugToLog) { WriteToLog(GenerateExceptionMessages(sex, 416)); WriteToLog(GenerateExceptionMessages(ex, 432)); } } lines.Add(String.Format("{0} {1}", sex.Message, (sex.InnerException != null ? sex.InnerException.Message : ""))); WriteToFile(lines.ToArray()); throw new MyExitException(); } WriteToFile(new[] { "TRUE", Fiskalizator.GetMessageTimestamp(reply, MessageType.Workspace_From_CIS), (fiskalizator.LastMessageTimeStamps != null ? String.Format("Komunikacija: {0} - {1} ({2})", fiskalizator.LastMessageTimeStamps[0], fiskalizator.LastMessageTimeStamps[1], fiskalizator.LastMessageTimeStamps[1] - fiskalizator.LastMessageTimeStamps[0]) : "") }); } catch (MyExitException) { throw new MyExitException(); } catch (Exception ex) { WriteToFile(new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }
private static void SendCheck(Fiskalizator fiskalizator, Settings settings) { try { var parameters = new List <string>(Util.ReadFromFile(settings.InputFile).Split('|')); if (parameters.Count != 23) { WriteToFile(settings, new[] { "FALSE", "Input file parameter count missmatch." }); throw new MyExitException(); } RacunType invoice; string[] certificateParams; Util.ParseInvoiceInput(parameters, out invoice, out certificateParams); if (certificateParams == null || !(certificateParams.Length == 1 || certificateParams.Length == 2)) { WriteToFile(settings, new[] { "FALSE", "Certificate definition error" }); throw new MyExitException(); } XmlDocument reply; try { reply = (certificateParams.Length == 1 ? fiskalizator.SendCheck(invoice, certificateParams[0]) : fiskalizator.SendCheck(invoice, certificateParams[0], certificateParams[1])); var tekstGresaka = (string)null; var doc = XDocument.Load(new XmlNodeReader(reply)); var greskeNode = doc.Elements().First() .Elements().First() .Elements().First() .Elements().SingleOrDefault(x => x.Name.ToString().EndsWith("Greske")); if (greskeNode != null) { tekstGresaka = greskeNode.Elements() .Select(x => string.Format("{0} {1}", x.Elements().Single(y => y.Name.ToString().EndsWith("SifraGreske")).Value, x.Elements().Single(y => y.Name.ToString().EndsWith("PorukaGreske")).Value)) .Aggregate((x, y) => x + Environment.NewLine + y); } WriteToFile(settings, (tekstGresaka != null ? new[] { "FALSE", tekstGresaka } : new[] { "TRUE" })); } catch (ServerException sex) { reply = fiskalizator.CisErrorReply; var lines = new List <string> { "FALSE", invoice.ZastKod }; if (fiskalizator.CisExceptionStatus != null) { lines.Add("Server exception: " + fiskalizator.CisExceptionStatus); } try { var error = Fiskalizator.GetErrorCodeAndMessage(reply, MessageType.Invoice_From_CIS); lines.Add("Server error(s): " + error.Aggregate((x, y) => x + " " + y)); } catch { } lines.Add(String.Format("{0} {1}", sex.Message, (sex.InnerException != null ? sex.InnerException.Message : ""))); WriteToFile(settings, lines.ToArray()); throw new MyExitException(); } } catch (MyExitException) { throw new MyExitException(); } catch (Exception ex) { WriteToFile(settings, new[] { "FALSE", ex.Message, (ex.InnerException != null ? ex.InnerException.Message : "") }); } }