public DebugForm(Printer printer, VirtualComPort lockPort) : this() { this.printer = printer; this.printer.PrintOccured += printer_PrintOccured; this.lockPort = lockPort; }
internal DebugForm(Printer printer, VirtualComPort lockPort, IList<User> users) { InitializeComponent(); this.printer = printer; this.printer.PrintOccured += printer_PrintOccured; this.lockPort = lockPort; this.users = users; lbKeyUsers.DataSource = users; }
public void RequestData(VirtualComPort.TransmitMode readingMode) { try { if ((gComPort == null) == true) return; if (gComPort.IsOpen == false) return; switch (readingMode) { case VirtualComPort.TransmitMode.Standard: StandardModeReading(); break; case VirtualComPort.TransmitMode.Polling_ENQ1: case VirtualComPort.TransmitMode.Polling_ENQ9: PollingModeReading(readingMode); break; default: // Should never occur break; } } catch (Exception ex) { LogWriter.Write(ex, LOG_FILENAME); throw new Exception("VirtualComPort GetData Exception: " + ex.Message); } }
void addimatLock_PortReadEvent(VirtualComPort.TransmitMode mode, string data) { data = data.Replace("OUT\r\n", ""); User u = (from usr in users where usr.LockID == data select usr as User).FirstOrDefault(); lblKeyAnswer.Text = "Melden Sie sich an"; if (IsWaiterMode() == true) { if (data != "" && u != null) // login { if (_closePrinter.Visible || _paperOut.Visible) return; // printer cover opened. do nothing if (!u.IsEnabled) lblKeyAnswer.Text = "Das Benutzerkonto ist deaktiviert"; else if (u.IsDeleted) lblKeyAnswer.Text = "Das Benutzerkonto wurde gelöscht"; else { this.Invoke(new Action(() => { if (!regForm.Visible) { regForm.UserLoggedIn = u; regForm.ShowDialog(LoginMode.Key); this.BringToFront(); this.Focus(); if (regForm.RefreshNeeded) refresher_UpdateRequested(null, null); } else // discard form is shown { if (u.LockID == regForm.UserLoggedIn.LockID) regForm.CancelRequestClosure(); } })); } } else // logout { this.Invoke(new Action(() => { if (_closePrinter.Visible) { regForm.EmptyCart(); regForm.RequestClosure(); } else if (regForm.Visible) regForm.RequestClosure(); })); } } }
/// <summary> /// Backgroundworker DoWork method: represents the routine for the startup of the cashpoint. /// Step 1: check completeness of config file /// Step 2: check database connectivity /// Step 3: connect to printer device /// Step 4: connect to addimat lock /// Step 5: load profiles (including articles), users, config /// Step 6: initialize status update sender object /// Step 7: create forms, e.g. RegisterForm() + draw articles, popup(), submit cashpoint state /// Step 8: debug options /// </summary> void InitializeCashpoint(object sender, DoWorkEventArgs e) { bgwInitialize.ReportProgress(2, "StartupRoutine"); bool configCorrect = false, databaseCorrect = false, printerFound = false, lockFound = false, dataLoaded = false; int currentStep = 0; int goToStep; try { goToStep = Convert.ToInt32(e.Argument); } catch (Exception) { goToStep = 0; } #region step 1 currentStep++; bgwInitialize.ReportProgress(0, currentStep); if (goToStep <= 1) do { try { bgwInitialize.ReportProgress(1, ""); ConfigReader = new ConfigurationReader(ConfigurationReader.CONFIGURATION_FILE_NAME); ConfigReader.Check(); configCorrect = true; } catch (Exception ex) { LogWriter.Write(ex, LOGFILE_NAME); bgwInitialize.ReportProgress(1, ex.Message); System.Threading.Thread.Sleep(2500); bgwInitialize.ReportProgress(1, ""); System.Threading.Thread.Sleep(750); } } while (!configCorrect); #endregion #region step 2 currentStep++; bgwInitialize.ReportProgress(0, currentStep); if (goToStep <= 2) do { try { bool missing = false; bgwInitialize.ReportProgress(1, ""); DatabaseHandler.ConnectionString = DatabaseHandler.GenerateConnectionString(ConfigReader.GetValue("server")); for (int i = 0; i < 3; i++) if (!DatabaseHandler.TestConnection()) throw new Exception("Verbindung konnte nicht hergestellt werden"); CashpointSettings = DatabaseHandler.GetSettings(); // check config settings from database string[] required = new string[] { "DoPrint", "IsEnabled", "IsServiceMode", "OrganizationName", "AutoRefresh", "AutoRefreshInterval" }; foreach (string s in required) if (CashpointSettings[s] == null) { missing = true; bgwInitialize.ReportProgress(1, "Benötigte Informationen konnten nicht geladen werden (\"" + s + "\")"); System.Threading.Thread.Sleep(250); } databaseCorrect = !missing; } catch (Exception ex) { LogWriter.Write(ex, LOGFILE_NAME); bgwInitialize.ReportProgress(1, ex.Message); System.Threading.Thread.Sleep(2500); bgwInitialize.ReportProgress(1, ex.Message); System.Threading.Thread.Sleep(750); } } while (!databaseCorrect); #endregion #region step 3 currentStep++; bgwInitialize.ReportProgress(0, currentStep); if (goToStep <= 3) do { try { if (printDevice != null) { while (printDevice.PrintStatus == PrintStatus.Printing || _closePrinter.Visible) System.Threading.Thread.Sleep(250); printDevice.Dispose(); } bgwInitialize.ReportProgress(1, ""); printDevice = new Printer(ConfigReader.GetValue("PrinterName"), !DebugPrinter); printDevice.DeviceStatusChanged += printDevice_DeviceStatusChanged; printDevice.CheckAvailability(); printerFound = true; printDevice_DeviceStatusChanged(this, new Microsoft.PointOfService.StatusUpdateEventArgs(printDevice.DeviceStatusCode)); } catch (Exception ex) { LogWriter.Write(ex, LOGFILE_NAME); if (!ex.Message.Contains("Fehler beim Setzen des aktuellen Kassenstatus.")) bgwInitialize.ReportProgress(1, "Druckerverbindung konnte nicht hergestellt werden.\n" + ex.Message); System.Threading.Thread.Sleep(2000); } } while (!printerFound); #endregion #region step 4 currentStep++; bgwInitialize.ReportProgress(0, currentStep); // check if "ignorelock" is configured string result; if (ConfigReader.TryGetValue("NOLOCK", out result)) IgnoreLock = true; if (goToStep <= 4 && !IgnoreLock) { do { try { bgwInitialize.ReportProgress(1, ""); string errmsg = ""; if (addimatLock != null) addimatLock.CloseComPort(); addimatLock = new VirtualComPort(!DebugLock); addimatLock.PortReadEvent += new VirtualComPort.ReadEventHandler(addimatLock_PortReadEvent); if (!addimatLock.OpenComPort(ConfigReader.GetValue("Lockport"), ref errmsg)) throw new Exception(errmsg); Application.DoEvents(); tLock.Start(); Application.DoEvents(); lockFound = true; } catch (Exception ex) { LogWriter.Write(ex, LOGFILE_NAME); bgwInitialize.ReportProgress(1, "Verbindungsaufbau zum Kellnerschloss fehlgeschlagen\n" + ex.Message); System.Threading.Thread.Sleep(5000); } } while (!lockFound); } #endregion #region step 5 currentStep++; bgwInitialize.ReportProgress(0, currentStep); if (goToStep <= 5) do { try { bgwInitialize.ReportProgress(1, ""); CashpointSettings = DatabaseHandler.GetSettings(); this.users = DatabaseHandler.GetUsers(); this.profiles = DatabaseHandler.GetProfiles(); dataLoaded = true; } catch (Exception ex) { LogWriter.Write(ex, LOGFILE_NAME); bgwInitialize.ReportProgress(1, ex.Message); System.Threading.Thread.Sleep(2000); } } while (!dataLoaded); #endregion #region step 6 StatusUpdater updater = new StatusUpdater(LoginForm.CashpointSettings["LiveViewEndpoint"]); updater.Start(); #endregion #region step 7 currentStep++; bgwInitialize.ReportProgress(0, currentStep); if (goToStep <= 6) try { regForm = new DepositRegisterForm(profiles, users, printDevice); if (CashpointSettings["IsEnabled"] == "True") // cashpoint unlocked { StatusUpdater.Instance.Update(null, CashpointAction.ACTION_LOGIN); string mode; if (ConfigReader.TryGetValue("Mode", out mode)) // is auto mode ? { if (mode.ToLower() == "auto") // auto mode { if (CashpointSettings["IsServiceMode"] == "False") bgwInitialize.ReportProgress(2, "PinLogin"); else bgwInitialize.ReportProgress(2, "KeyLogin"); } else // no auto, config.ini defined { string value = ConfigReader.GetValue("Mode"); switch (value.ToLower()) { case "pin": bgwInitialize.ReportProgress(2, "PinLogin"); break; case "lock": bgwInitialize.ReportProgress(2, "KeyLogin"); break; default: // invalid value for attribute "mode", so use database setting if (CashpointSettings["IsServiceMode"] == "False") bgwInitialize.ReportProgress(2, "PinLogin"); else bgwInitialize.ReportProgress(2, "KeyLogin"); break; } } } else // no mode defined, use database setting { if (CashpointSettings["IsServiceMode"] == "False") bgwInitialize.ReportProgress(2, "PinLogin"); else bgwInitialize.ReportProgress(2, "KeyLogin"); } string doPrintConfigIni; if (ConfigReader.TryGetValue("Printer", out doPrintConfigIni)) { try { DepositRegisterForm.DoPrint = Convert.ToBoolean(doPrintConfigIni); } catch (Exception) { DepositRegisterForm.DoPrint = null; } } else DepositRegisterForm.DoPrint = null; } else // cashpoint locked { StatusUpdater.Instance.Update(null, CashpointAction.ACTION_LOCKED); bgwInitialize.ReportProgress(2, "Disabled"); } if (refresher != null) refresher.Stop(); refresher = new AutoUpdateChecker(int.Parse(LoginForm.CashpointSettings["AutoRefreshInterval"])); refresher.UpdateRequested += refresher_UpdateRequested; if (CashpointSettings["Autorefresh"].ToLower() == "auto") refresher.Start(); else refresher.Stop(); DatabaseHandler.TransmitCurrentState(IgnoreLock ? 6 : 1); } catch (Exception ex) { LogWriter.Write(ex, LOGFILE_NAME); bgwInitialize.ReportProgress(1, ex.Message); } #endregion #region step 8 if (DebugPrinter || DebugLock) { Invoke(new Action(() => { // create toolbox (recreation needed after cashpoint reloaded) if (debugToolbox != null && debugToolbox.Visible) debugToolbox.Close(); if (DebugToolboxVisible) this.Invoke(new Action(() => { debugToolbox = new DebugForm(printDevice, addimatLock); // form settings to prevent showDialog() to keep toolbox focusable KasseForm.DebugEnabled = true; debugToolbox.Show(); })); })); } #endregion }
public DebugForm(VirtualComPort lockPort) : this() { this.lockPort = lockPort; }