Beispiel #1
0
        /// <summary>
        /// Changes the oldValue of the passed parameter to the passed newValue.
        /// Only for the named part.
        /// </summary>
        /// <param name="text">The text to search and replace in.</param>
        /// <param name="craftName">The name of the craft to change a parameter from.</param>
        /// <param name="parameterName">The parameter to change the value of.</param>
        /// <param name="oldValue">The old value of the parameter.</param>
        /// <param name="newValue">The new value for the parameter.</param>
        /// <returns>True if the text was changed.</returns>
        private static bool ChangeParameter(ref string text, string craftName, string parameterName, string oldValue, string newValue)
        {
            ////var martch = Regex.Match(text, PARAMETER_REGEX.Replace(NAMEPARAMETER, NAME).Replace(VALUEPARAMETER, partName));
            ////if (martch.Success)
            ////{
            int index = CfgFileHelper.GetIndexOfParameter(text, "ship", craftName, 0, false);

            if (index < 0)
            {
                return(false);
            }

            index = CfgFileHelper.GetIndexOfParameter(text, parameterName, oldValue, index);
            if (index < 0)
            {
                return(false);
            }

            text = text.Substring(0, index) + newValue + text.Substring(index + oldValue.Length);

            return(true);
            ////}

            ////return false;
        }
Beispiel #2
0
        public void SetBrushes(string cfgElementName, Brush defaultForeBrush, Brush defaultBackBrush)
        {
            if (string.IsNullOrEmpty(cfgElementName))
            {
                Foreground = defaultForeBrush; Background = defaultBackBrush;
            }
            // иначе берем из config-файла, значение: [строка цвета шрифта];[строка цвета фона]
            else
            {
                string cfgValue = CfgFileHelper.GetAppSetting(cfgElementName);
                if (string.IsNullOrEmpty(cfgValue))
                {
                    Foreground = defaultForeBrush; Background = defaultBackBrush;
                }
                else
                {
                    string[] cfgVals = cfgValue.Split('|');

                    Foreground = DrawHelper.GetBrushByName(cfgVals[0]);

                    if (cfgVals.Length > 1)
                    {
                        Background = DrawHelper.GetBrushByName(cfgVals[1]);
                    }
                    else
                    {
                        Background = defaultBackBrush;
                    }
                }
            }
        }
Beispiel #3
0
        private static void setGlobalValueFromCfg <T>(string cfgElementName, T defaultValue, string globVarName = null)
        {
            string sCfgValue = CfgFileHelper.GetAppSetting(cfgElementName);

            AppProperties.SetProperty(((globVarName == null) ? cfgElementName : globVarName),
                                      (string.IsNullOrEmpty(sCfgValue) ? defaultValue : getValueFromString(ref sCfgValue, typeof(T))));
        }
Beispiel #4
0
        // сохранить настройки приложения из config-файла в свойствах приложения
        public static bool saveAppSettingToProps(string settingName, Type settingType = null, string defaultConfValue = null)
        {
            string settingValue = CfgFileHelper.GetAppSetting(settingName);

            if (settingValue == null)
            {
                if (defaultConfValue == null)
                {
                    return(false);
                }
                else
                {
                    settingValue = defaultConfValue;
                }
            }

            if (settingType == null)
            {
                AppLib.SetAppGlobalValue(settingName, settingValue);   // по умолчанию сохраняется как строка
            }
            else
            {
                object objValue = getObjValueFromString(settingValue, settingType);
                if (objValue != null)
                {
                    AppLib.SetAppGlobalValue(settingName, objValue);
                }
            }
            return(true);
        }
Beispiel #5
0
        // если в config-е режим не задан или задан неверно, то по умолчанию - Cook
        private static void initFromCfgFile()
        {
            KDSModeEnum mode;
            string      cfgValue = CfgFileHelper.GetAppSetting("KDSMode");

            if (cfgValue.IsNull())
            {
                mode = KDSModeEnum.Cook;  // нет такого элемента
            }
            else if (Enum.TryParse <KDSModeEnum>(cfgValue, out mode) == false)
            {
                mode = KDSModeEnum.Cook;  // не смогли распарсить
            }
            // сохранить в свойствах класса
            KDSModeHelper.CurrentKDSMode = mode;

            // особая роль, читаем доп.элементы в config и заполняем четвертый элемент в _definedKDSModes
            if (mode == KDSModeEnum.Special)
            {
                KDSModeStates modeStates = _definedKDSModes[KDSModeEnum.Special];

                string cfgVal = CfgFileHelper.GetAppSetting("KDSModeSpecialStates");
                modeStates.StringToAllowedStates(cfgVal);

                cfgVal = CfgFileHelper.GetAppSetting("KDSModeSpecialActions");
                modeStates.StringToAllowedActions(cfgVal);

                modeStates.CreateUserStateSets();
            }
        }  // method
Beispiel #6
0
        protected override void OnStart(string[] args)
        {
            putToSvcLog("*** Запуск Windows-службы КДС ***");

#if DEBUG == true
            if (args != null)
            {
                putToSvcLog("аргументы запуска службы: " + string.Join(" ", args));
            }
#endif
            // ЗАЩИТА PSW-файлом
            // аргумент запуска args = new string[] { "-autoGenLicence" };
            bool isLoyalClient = ((args != null) && args.Contains("-autoGenLicence"));
            // ключ реестра HKLM\Software\Integra\autoGenLicence = 01 (binary)
            if (isLoyalClient == false)
            {
                isLoyalClient = RegistryHelper.IsExistsAutoGenLicenceKey();
            }
            pswLib.CheckProtectedResult checkProtectedResult;
            if (pswLib.Hardware.IsCurrentAppProtected("KDSService", out checkProtectedResult, null, isLoyalClient) == false)
            {
                putToSvcLog(checkProtectedResult.LogMessage);
                putToSvcLog(checkProtectedResult.CustomMessage);
                Environment.Exit(2);
                return;
            }


            // 1. Инициализация сервисного класса KDSService
            try
            {
                // config file
                string cfgFile = CfgFileHelper.GetAppConfigFile("KDSService");
                putToSvcLog("Инициализация сервисного класса KDSService...");
                service = new KDSService.KDSServiceClass();
                service.InitService(cfgFile);
                putToSvcLog("Инициализация сервисного класса KDSService... Ok");
            }
            catch (Exception ex)
            {
                putToSvcLog("Ошибка инициализации сервисного класса: " + ex.Message);
                exitApplication(1);
            }

            // создать хост, параметры канала считываются из app.config
            try
            {
                putToSvcLog("Создание канала для приема сообщений...");
                service.CreateHost();
            }
            catch (Exception ex)
            {
                putToSvcLog("  ERROR: " + ex.Message);
                exitApplication(2);
            }

            service.StartTimer();

            putToSvcLog("Создание канала для приема сообщений... Ok\n\tСлужба готова к приему сообщений.");
        }
Beispiel #7
0
        private static void setGlobBoolValueFromCfg(string cfgElementName, bool defaultValue = false, string globVarName = null)
        {
            string sCfgValue = CfgFileHelper.GetAppSetting(cfgElementName);

            string key   = ((globVarName == null) ? cfgElementName : globVarName);
            bool   value = (string.IsNullOrEmpty(sCfgValue) ? defaultValue : sCfgValue.ToBool());

            WpfHelper.SetAppGlobalValue(key, value);
        }
Beispiel #8
0
        private static void setGlobDoubleValueFromCfg(string cfgElementName, double defaultValue = 0d, string globVarName = null)
        {
            string sCfgValue = CfgFileHelper.GetAppSetting(cfgElementName);

            string key   = ((globVarName == null) ? cfgElementName : globVarName);
            double value = (string.IsNullOrEmpty(sCfgValue) ? defaultValue : sCfgValue.ToDouble());

            WpfHelper.SetAppGlobalValue(key, value);
        }
Beispiel #9
0
        private void setBackgroundImage(string bgImageFile)
        {
            // фон
            backgroundImage.Source = ImageHelper.GetBitmapImage(bgImageFile);
            // яркость фона
            string opacity = CfgFileHelper.GetAppSetting("MenuBackgroundBrightness");

            if (opacity != null)
            {
                backgroundImage.Opacity = opacity.ToDouble();
            }
        }
Beispiel #10
0
        public static bool AppInit(out string errMsg)
        {
            errMsg = null;

            // прочитать настройки из config-файла во внутренний словарь
            putAppConfigParamsToAppProperties();

            // вывести в лог настройки из config-файла
            WriteLogInfoMessage("Настройки из config-файла: " + CfgFileHelper.GetAppSettingsFromConfigFile());

            // доступная память
            WriteLogInfoMessage("Доступная память: {0} Mb", AppEnvironment.getAvailableRAM());

            return(true);
        }
Beispiel #11
0
        internal static bool CheckDBConnection(Type dbType)
        {
            AppLib.WriteLogInfoMessage(" - проверка доступа к базе данных...");
            string strConn = CfgFileHelper.GetDBConnectionStringFromConfigFile(dbType.Name);

            AppLib.WriteLogInfoMessage("   строка подключения из config-файла: " + strConn);

            // контекст БД
            DbContext dbContext = (DbContext)Activator.CreateInstance(dbType);

            SqlConnection dbConn = (SqlConnection)dbContext.Database.Connection;
            //AppLib.WriteLogTraceMessage("-- строка подключения: " + dbConn.ConnectionString);

            // создать такое же подключение, но с TimeOut = 1 сек
            SqlConnectionStringBuilder confBld = new SqlConnectionStringBuilder(dbConn.ConnectionString);
            SqlConnectionStringBuilder testBld = new SqlConnectionStringBuilder()
            {
                DataSource          = confBld.DataSource,
                InitialCatalog      = confBld.InitialCatalog,
                PersistSecurityInfo = confBld.PersistSecurityInfo,
                IntegratedSecurity  = confBld.IntegratedSecurity,
                UserID            = confBld.UserID,
                Password          = confBld.Password,
                ConnectRetryCount = 1,
                ConnectTimeout    = 1
            };
            SqlConnection testConn = new SqlConnection(testBld.ConnectionString);
            bool          retVal   = false;

            try
            {
                testConn.Open();
                retVal = true;
            }
            catch (Exception ex)
            {
                AppLib.WriteLogErrorMessage("--- ошибка доступа к БД: " + ex.Message);
            }
            finally
            {
                testConn.Close();
                testConn = null;
            }

            AppLib.WriteLogTraceMessage("- проверка доступа к базе данных - " + ((retVal) ? "READY" : "ERROR!!!"));
            return(retVal);
        }
Beispiel #12
0
        private void setLayoutAfterLoaded()
        {
            // main title
            double fontSize = ((WpfHelper.IsAppVerticalLayout) ? 0.4 : 0.5) * brdTitle.ActualHeight;

            tbMainTitle.FontSize = fontSize;

            // logo image
            string logoFile = CfgFileHelper.GetAppSetting("LogoImage");

            if (logoFile != null)
            {
                logoFile = AppEnvironment.GetFullFileName((string)WpfHelper.GetAppGlobalValue("ImagesPath", ""), logoFile);
                double d1 = 0.15 * brdTitle.ActualHeight;
                imgLogo.Source = ImageHelper.GetBitmapImage(logoFile);
                imgLogo.Margin = new Thickness(0, d1, 0, d1);
            }
        }
Beispiel #13
0
        private static void createWinTitleBrushes()
        {
            string cfgValue;

            cfgValue = CfgFileHelper.GetAppSetting("WinTitleBackground");
            if (cfgValue == null)
            {
                cfgValue = "122;34;104";                     // по умолчанию - т.фиолетовый
            }
            WpfHelper.SetAppGlobalValue("WinTitleBackground", DrawHelper.GetBrushByName(cfgValue, "122;34;104"));

            cfgValue = CfgFileHelper.GetAppSetting("WinTitleForeground");
            if (cfgValue == null)
            {
                cfgValue = "255;200;62";                     // по умолчанию - т.желтый
            }
            WpfHelper.SetAppGlobalValue("WinTitleForeground", DrawHelper.GetBrushByName(cfgValue, "255;200;62"));
        }
Beispiel #14
0
            public CfgValue(string key, bool fromAppProps, Control control)
            {
                _key = key; _control = control; _fromAppProps = fromAppProps;

                // из AppLib.GetAppSetting(_key) возвращается СТРОКА
                _preValue = (fromAppProps) ? WpfHelper.GetAppGlobalValue(_key) : CfgFileHelper.GetAppSetting(_key);
                if (_preValue == null)
                {
                    return;
                }

                _typeName = _preValue.GetType().Name;

                if (control != null)
                {
                    putValueToControl();
                }
            }
Beispiel #15
0
        private void setAppLayout()
        {
            string bgImageFile = CfgFileHelper.GetAppSetting("ImagesPath");

            if (WpfHelper.IsAppVerticalLayout)
            {
                bgImageFile = AppEnvironment.GetFullFileName(bgImageFile, "bg 3ver 1080x1920 background.png");
                // пересоздать кол-во строк и столбцов
                transposeGrid(G15);
                transposeGrid(G24);
            }
            else
            {
                bgImageFile = AppEnvironment.GetFullFileName(bgImageFile, "bg 3hor 1920x1080 background.png");
            }

            setBackgroundImage(bgImageFile); // фон
        }
Beispiel #16
0
        public MainWindow()
        {
            InitializeComponent();

            _appOrders  = new List <AppOrder>();
            _unUsedDeps = (HashSet <int>)WpfHelper.GetAppGlobalValue("UnusedDepartments");

            // кисти заголовка окна
            Brush titleBackColor = (SolidColorBrush)WpfHelper.GetAppGlobalValue("WinTitleBackground");
            Brush titleForeColor = (SolidColorBrush)WpfHelper.GetAppGlobalValue("WinTitleForeground");

            brdTitle.Background    = titleBackColor;
            tbMainTitle.Foreground = titleForeColor;
            // статусная строка
            statusBorder.Background = titleBackColor;
            statusBorder.SetValue(TextBlock.ForegroundProperty, titleForeColor);

            // кисти для панелей заказов
            _cellBrushes = (Brush[])WpfHelper.GetAppGlobalValue("PanelBackgroundBrushes");

            string statusReadyAudioFile = AppEnvironment.GetFullFileName(CfgFileHelper.GetAppSetting("AudioPath"), CfgFileHelper.GetAppSetting("StatusReadyAudioFile"));

            if (System.IO.File.Exists(statusReadyAudioFile))
            {
                simpleSound = new System.Media.SoundPlayer(statusReadyAudioFile);
            }

            _isShowClientName  = (bool)WpfHelper.GetAppGlobalValue("IsShowClientName");
            _isShowCookingTime = (bool)WpfHelper.GetAppGlobalValue("IsShowOrderEstimateTime");
            _cookingEstMinutes = (double)WpfHelper.GetAppGlobalValue("OrderEstimateTime", 0d);

            this.Loaded += MainWindow_Loaded;
            setAppLayout();

            _updateTimer           = new System.Timers.Timer(1000d);
            _updateTimer.AutoReset = true;
            _updateTimer.Elapsed  += updateTimer_Tick;
            _updateTimer.Start();

            _currentDate         = DateTime.Now.Date;
            _hoursBeforeMidnight = Convert.ToDouble(WpfHelper.GetAppGlobalValue("MidnightShiftShowYesterdayOrders", 0d));
            _readOrdersSQLText   = getReadOrdersSQLText();
        }
Beispiel #17
0
        private string getSplashBackImageFile()
        {
            string hor = CfgFileHelper.GetAppSetting("BackgroundImageHorizontal");
            string ver = CfgFileHelper.GetAppSetting("BackgroundImageVertical");

            string fileName = (WpfHelper.IsAppVerticalLayout ? ver : hor);

            if (fileName == null)
            {
                return(null);
            }

            string cfgValue = CfgFileHelper.GetAppSetting("ImagesPath");

            fileName = AppEnvironment.GetFullFileName(cfgValue, fileName);
            if (System.IO.File.Exists(fileName) == false)
            {
                return(null);
            }

            return(fileName);
        }
Beispiel #18
0
        private string getSplashBackImageFile()
        {
            string hor      = CfgFileHelper.GetAppSetting("SplashBackImageHorizontal");
            string ver      = CfgFileHelper.GetAppSetting("SplashBackImageVertical");
            string fileName = (WpfHelper.IsAppVerticalLayout ? ver : hor);

            if (fileName == null)
            {
                return(null);
            }
            if (System.IO.File.Exists(fileName) == false)
            {
                return(null);
            }

            if (fileName.Contains(@"/"))
            {
                fileName = fileName.Replace(@"/", "\\");
            }

            return(AppEnvironment.GetFullFileName("", fileName));
        }
Beispiel #19
0
        private static string checkMarginKoefString()
        {
            // строки по умолчанию
            string cfgValue = CfgFileHelper.GetAppSetting("MarginHor");

            if (cfgValue.IsNull())
            {
                cfgValue = "0.05";
            }
            string s1 = CfgFileHelper.GetAppSetting("MarginVer");

            cfgValue += ";" + (s1.IsNull() ? "0.05" : s1);

            // проверить цифровые значения
            string[] a1 = cfgValue.Split(';');
            double   d1 = a1[0].ToDouble(), d2 = ((a1.Length > 1) ? a1[1].ToDouble() : d1);

            if (d1 < 0d)
            {
                d1 = 0.01d;
            }
            else if (d1 > 0.4d)
            {
                d1 = 0.4d;
            }
            if (d2 < 0d)
            {
                d2 = 0.01d;
            }
            else if (d2 > 0.4d)
            {
                d2 = 0.4d;
            }

            IFormatProvider dotFormatter = FormatProviderHelper.DotFormatter();
            string          retVal       = d1.ToString(dotFormatter) + ";" + d2.ToString(dotFormatter);

            return(retVal);
        }
Beispiel #20
0
        private static void createPanelBackBrushes()
        {
            Brush[] cellBrushes = new Brush[2];

            string cfgValue;

            cfgValue = CfgFileHelper.GetAppSetting("StatusCookingPanelBackground");
            if (cfgValue == null)
            {
                cfgValue = "Gold";
            }
            cellBrushes[0] = DrawHelper.GetBrushByName(cfgValue, "Gold");

            cfgValue = CfgFileHelper.GetAppSetting("StatusReadyPanelBackground");
            if (cfgValue == null)
            {
                cfgValue = "LimeGreen";
            }
            cellBrushes[1] = DrawHelper.GetBrushByName(cfgValue, "LimeGreen");

            // сохранить в свойствах
            WpfHelper.SetAppGlobalValue("PanelBackgroundBrushes", cellBrushes);
        }
Beispiel #21
0
        // получить настройки приложения из config-файла
        public static string GetAppSetting(string key)
        {
            string retVal = CfgFileHelper.GetAppSetting(key);

            return((retVal == null) ? "-" : retVal);
        }
Beispiel #22
0
        public static void Main()
        {
            App app = new App();

            if (Microsoft.Shell.SingleInstance <App> .InitializeAsFirstInstance(Unique))
            {
                string cfgValue;
                // установить текущий каталог на папку с приложением
                string setAppDirResult = setAppDirectory();

                // splash-screen
                Splasher.Splash = new Views.SplashScreen();
                Splasher.ShowSplash();

                MessageListener.Instance.ReceiveMessage("Инициализация журнала событий...");
                cfgValue = AppLib.InitAppLoggers();
                if (cfgValue != null)
                {
                    appExit(1, "Ошибка инициализации журнала приложения: " + cfgValue);
                }

                AppLib.WriteLogInfoMessage("************  Start NoodleD_Client (WPF) *************");
                // объем доступной памяти
                MessageListener.Instance.ReceiveMessage("Check free RAM value...");
                int freeMemory = AppLib.getAvailableRAM();
                AppLib.WriteLogInfoMessage("Available RAM: " + freeMemory.ToString() + " MB");
                if (freeMemory < 300)
                {
                    AppLib.WriteLogErrorMessage("Terminate program by low memory.");
                    AppLib.WriteLogInfoMessage("************  End application  ************");
                    appExit(2, "This computer has too low available memory.\r\nYou need at least 300 MB free memory.");
                }

                if (setAppDirResult.IsNull() == false)
                {
                    AppLib.WriteLogInfoMessage(setAppDirResult);
                }

                // таймаут запуска приложения
                cfgValue = CfgFileHelper.GetAppSetting("StartTimeout");
                int startTimeout = 0;
                if (cfgValue != null)
                {
                    startTimeout = cfgValue.ToInt();
                }
                if (startTimeout != 0)
                {
                    for (int i = startTimeout; i > 0; i--)
                    {
                        MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд.");
                        System.Threading.Thread.Sleep(1000);
                    }
                }

                #region информация о сборках
                MessageListener.Instance.ReceiveMessage("Получаю информацию о сборках и настройках...");
                ITSAssemblyInfo asmInfo = new ITSAssemblyInfo(AppEnvironment.GetAppAssemblyName());
                AppLib.WriteLogInfoMessage($" - файл: {asmInfo.FullFileName}, version {asmInfo.Version}, last write date '{asmInfo.DateLastOpened.ToString()}'");
                asmInfo = new ITSAssemblyInfo("IntegraLib");
                AppLib.WriteLogInfoMessage($" - файл: {asmInfo.FullFileName}, version {asmInfo.Version}, last write date '{asmInfo.DateLastOpened.ToString()}'");
                asmInfo = new ITSAssemblyInfo("IntegraWPFLib");
                AppLib.WriteLogInfoMessage($" - файл: {asmInfo.FullFileName}, version {asmInfo.Version}, last write date '{asmInfo.DateLastOpened.ToString()}'");

                AppLib.WriteLogInfoMessage("Системное окружение: " + AppEnvironment.GetEnvironmentString());

                // номер устройства - не число!
                if (AppLib.GetAppSetting("ssdID").IsNumber() == false)
                {
                    AppLib.WriteLogErrorMessage("** Номер устройства - НЕ ЧИСЛО !! **");
                    AppLib.WriteLogInfoMessage("************  End application  ************");
                    appExit(4, "Номер устройства - НЕ ЧИСЛО!!");
                }

                // основная информация о софт-окружении
                AppLib.WriteLogTraceMessage(string.Format("Настройки: Id устройства-{0}, папка изображений-{1}, таймер бездействия-{2} sec, диапазон номеров чеков от {3} до {4}, принтер пречека-{5}",
                                                          AppLib.GetAppSetting("ssdID"), AppLib.GetAppSetting("ImagesPath"), AppLib.GetAppSetting("UserIdleTime"),
                                                          AppLib.GetAppSetting("RandomOrderNumFrom"), AppLib.GetAppSetting("RandomOrderNumTo"),
                                                          AppLib.GetAppSetting("PrinterName")));

                //******  НАСТРОЙКИ  ******
                // определенные в app.xaml
                app.InitializeComponent();
                // определенные в config-файле
                getSettingsFromConfigFile();
                // вычислить размеры, хранимые в свойствах приложения
                calculateAppSizes();
                // прочие глобальные настройки
                AppLib.SetAppGlobalValue("promoCode", null);
                //TestData.mainProc();
                #endregion

                // проверка соединения с бд
                MessageListener.Instance.ReceiveMessage("Проверяю доступность к базе данных...");
                AppLib.WriteLogTraceMessage("Проверка доступа к базе данных...");
                AppLib.WriteLogTraceMessage(" - строка подключения: " + getDbConnectionString());
                string errorMessage;
                while (AppLib.CheckDBConnection(typeof(NoodleDContext), out errorMessage) == false)
                {
                    AppLib.WriteLogTraceMessage(" - result: " + errorMessage);
                    // задержка на 10 сек
                    for (int i = 10; i > 0; i--)
                    {
                        MessageListener.Instance.ReceiveMessage($"Проверка доступа к БД завершилась ошибкой!! (след.проверка через {i} сек)");
                        Thread.Sleep(1000);
                    }
                    MessageListener.Instance.ReceiveMessage("Проверяю доступность к базе данных...");
                    Thread.Sleep(500);
                }
                AppLib.WriteLogTraceMessage(" - result: Ok");

                // настройки, определенные в ms sql
                readSettingFromDB();

                // данные, хранящиеся в БД
                readAppDataFromDB();

                // ожидашка
                int idleSec = (int)AppLib.GetAppGlobalValue("UserIdleTime", 0);
                if (idleSec > 0)
                {
                    IdleHandler                  = new UserActionIdle();
                    IdleHandler.IdleSeconds      = idleSec;
                    IdleHandler.IdleElapseEvent += IdleHandler_IdleElapseEvent;
                    IdleHandler.SetPause();
                }

                // главное окно приложения
                MessageListener.Instance.ReceiveMessage("Запуск основного окна...");
                Thread.Sleep(500);

                MainWindow mainWindow = new MainWindow();
                try
                {
                    app.Run(mainWindow);
                }
                catch (Exception ex)
                {
                    AppLib.WriteLogErrorMessage(ex.ToString());
                    MessageBox.Show(ex.Message, "Error Application", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                }

                AppLib.WriteLogInfoMessage("************  End application  ************");

                // подчистить память
                if (IdleHandler != null)
                {
                    IdleHandler.Dispose();
                }

                // Allow single instance code to perform cleanup operations
                Microsoft.Shell.SingleInstance <App> .Cleanup();
            }
        }
Beispiel #23
0
        public static void Main(string[] args)
        {
            // splash
            Splasher.Splash = new SplashScreen();
            Splasher.ShowSplash();
            //for (int i = 0; i < 5000; i += 1)
            //{
            //    MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i));
            //    Thread.Sleep(1);
            //}

            // таймаут запуска приложения
            string cfgValue     = CfgFileHelper.GetAppSetting("StartTimeout");
            int    startTimeout = 0;

            if (cfgValue != null)
            {
                startTimeout = cfgValue.ToInt();
            }
            if (startTimeout != 0)
            {
                for (int i = startTimeout; i > 0; i--)
                {
                    MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд.");
                    System.Threading.Thread.Sleep(1000);
                }
            }

            // текст в MessageListener.Instance прибинден к текстовому полю на сплэше
            MessageListener.Instance.ReceiveMessage("Инициализация журнала событий...");
            AppLib.InitAppLogger();

            AppLib.WriteLogInfoMessage("************  Start KDS Client (WPF) *************");
            // установить текущий каталог на папку с приложением
            string curDir = System.IO.Directory.GetCurrentDirectory();

            if (curDir.Last() != '\\')
            {
                curDir += "\\";
            }
            string appDir = AppEnvironment.GetAppDirectory();

            if (curDir != appDir)
            {
                AppLib.WriteLogInfoMessage("Текущий каталог изменен на папку приложения: " + appDir);
                System.IO.Directory.SetCurrentDirectory(appDir);
            }

            // защита PSW-файлом
            MessageListener.Instance.ReceiveMessage("Проверка лицензии...");
            bool isLoyalClient = false;

            //isLoyalClient = ((args != null) && args.Contains("-autoGenLicence"));
            // ключ реестра HKLM\Software\Integra\autoGenLicence = 01 (binary)
            if (isLoyalClient == false)
            {
                isLoyalClient = RegistryHelper.IsExistsAutoGenLicenceKey();
            }
            pswLib.CheckProtectedResult checkProtectedResult;
            if (pswLib.Hardware.IsCurrentAppProtected("KDSWPFClient", out checkProtectedResult, null, isLoyalClient) == false)
            {
                string errMsg = string.Format("{0}{1}{1}{2}", checkProtectedResult.LogMessage, Environment.NewLine, checkProtectedResult.CustomMessage);
                appExit(2, errMsg);
            }

            MessageListener.Instance.ReceiveMessage("Получение версии приложения...");
            AppLib.WriteLogInfoMessage("Инициализация KDS-клиента...");

            // проверка наличия уникального имени клиента в конфиг-файле
            cfgValue = CfgFileHelper.GetAppSetting("KDSClientName");
            if (cfgValue.IsNull() == true)
            {
                cfgValue = "Не указано имя КДС-клиента в файле AppSettings.config.";
                appExit(3, cfgValue);
            }
            if (cfgValue.Equals("uniqClientName", StringComparison.OrdinalIgnoreCase))
            {
#if (Release == false) && (DEBUG == false)
                cfgValue = "Измените имя КДС-клиента в файле AppSettings.config";
                appExit(3, cfgValue);
#endif
            }
            KDSWPFClient.App app = new KDSWPFClient.App();
            WpfHelper.SetAppGlobalValue("KDSClientName", cfgValue);
            App.ClientName = System.Convert.ToString(WpfHelper.GetAppGlobalValue("KDSClientName"));
            AppLib.WriteLogInfoMessage(" - имя КДС-клиента: {0}", App.ClientName);

            // информация о файлах и сборках
            AppLib.WriteLogInfoMessage(" - файл: {0}, Version {1}", AppEnvironment.GetAppFullFile(), AppEnvironment.GetAppVersion());
            ITSAssemblyInfo asmInfo = new ITSAssemblyInfo("IntegraLib");
            AppLib.WriteLogInfoMessage(" - Integra lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version);
            asmInfo = new ITSAssemblyInfo("IntegraWPFLib");
            AppLib.WriteLogInfoMessage(" - Integra WPF lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version);

            MessageListener.Instance.ReceiveMessage("Получение параметров окружения...");
            AppLib.WriteLogInfoMessage(AppEnvironment.GetEnvironmentString());

            getAppLayout();

            // настройка приложения
            MessageListener.Instance.ReceiveMessage("Получение параметров приложения...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            app.InitializeComponent(); // определенные в app.xaml

            setAppGlobalValues();      // для хранения в свойствах приложения (из config-файла или др.)
            AppLib.WriteLogInfoMessage("App settings from config file: " + CfgFileHelper.GetAppSettingsFromConfigFile());

            // создать каналы
            AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - START");
            AppDataProvider dataProvider = new AppDataProvider();
            try
            {
                MessageListener.Instance.ReceiveMessage("Создание канала получения данных...");
#if !DEBUG
                System.Threading.Thread.Sleep(1000);
#endif
                dataProvider.CreateGetChannel();

                MessageListener.Instance.ReceiveMessage("Создание канала установки данных...");
#if !DEBUG
                System.Threading.Thread.Sleep(1000);
#endif
                dataProvider.CreateSetChannel();

                AppLib.WriteLogInfoMessage("Создаю клиента для работы со службой KDSService - FINISH");
            }
            catch (Exception)
            {
                AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage);
            }

            // и получить словари и настройки от службы
            MessageListener.Instance.ReceiveMessage("Получаю словари и настройки от службы KDSService...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - START");
            if (dataProvider.SetDictDataFromService() == false)
            {
                // КДСы могут быть уже запущены, а служба еще нет!
                AppLib.WriteLogErrorMessage("Data provider error: " + dataProvider.ErrorMessage);
                //if (splashScreen != null) splashScreen.Close(TimeSpan.FromMinutes(10));
                //MessageBox.Show("Ошибка получения словарей от службы KDSService:" + Environment.NewLine + dataProvider.ErrorMessage, "АВАРИЙНОЕ ЗАВЕРШЕНИЕ ПРИЛОЖЕНИЯ", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
                //Environment.Exit(2);
            }
            else
            {
                AppLib.WriteLogInfoMessage("Получаю словари и настройки от службы KDSService - FINISH");
            }

            WpfHelper.SetAppGlobalValue("AppDataProvider", dataProvider);

            // прочитать из config-а и сохранить в свойствах приложения режим КДС
            MessageListener.Instance.ReceiveMessage("Получаю из config-файла режим работы КДС...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            KDSModeHelper.Init();

            // создать и сохранить в свойствах приложения служебные окна (ColorLegend, StateChange)
            MessageListener.Instance.ReceiveMessage("Создаю служебные окна...");
#if !DEBUG
            System.Threading.Thread.Sleep(500);
#endif
            WpfHelper.SetAppGlobalValue("ColorLegendWindow", new ColorLegend());  // окно легенды
            // окно изменения статуса
            WpfHelper.SetAppGlobalValue("StateChangeWindow", new StateChange());

            // основное окно приложения
            MessageListener.Instance.ReceiveMessage("Инициализация окна приложения...");
#if !DEBUG
            System.Threading.Thread.Sleep(1000);
#endif
            MainWindow mainWindow = new MainWindow(args);
            app.MainWindow = mainWindow;
            app.Run(mainWindow);

            if (dataProvider != null)
            {
                dataProvider.Dispose(); dataProvider = null;
            }
            AppLib.WriteLogInfoMessage("************  End KDS Client (WPF)  *************");
        }  // Main()
Beispiel #24
0
        // сохранить в свойствах приложения часто используемые значения, чтобы не дергать config-файл
        private static void setAppGlobalValues()
        {
            string cfgValue;
            double dCfg;

            cfgValue = CfgFileHelper.GetAppSetting("MidnightShiftShowYesterdayOrders");
            dCfg     = (cfgValue == null ? 0 : cfgValue.ToDouble());
            if (dCfg < 0)
            {
                dCfg = 0d;
            }
            WpfHelper.SetAppGlobalValue("MidnightShiftShowYesterdayOrders", dCfg);

            // файл изображения состояния
            string sPath = CfgFileHelper.GetAppSetting("ImagesPath");

            if (string.IsNullOrEmpty(sPath))
            {
                sPath = "Images";
            }
            WpfHelper.SetAppGlobalValue("ImagesPath", sPath);
            string sFile    = CfgFileHelper.GetAppSetting("StatusReadyImage");
            string fileName = AppEnvironment.GetFullFileName(sPath, sFile);

            if ((fileName != null) && (System.IO.File.Exists(fileName)))
            {
                WpfHelper.SetAppGlobalValue("StatusReadyImageFile", fileName);
            }

            // неиспользуемые цеха
            HashSet <int> unUsed = new HashSet <int>();

            cfgValue = CfgFileHelper.GetAppSetting("UnusedDepartments");
            if (cfgValue != null)
            {
                if (cfgValue.Contains(","))
                {
                    cfgValue = cfgValue.Replace(',', ';');
                }
                int id;
                foreach (string item in cfgValue.Split(';'))
                {
                    id = item.ToInt();
                    if (!unUsed.Contains(id))
                    {
                        unUsed.Add(id);
                    }
                }
            }
            WpfHelper.SetAppGlobalValue("UnusedDepartments", unUsed);

            // кисти фона и текста заголовка окна
            createWinTitleBrushes();
            // кисти фона панели заказа (CellBrushes - кисть фона и разделительной полосы)
            createPanelBackBrushes();

            // поля панели заказа в ячейке - два double-значения, разделенные ";"
            cfgValue = checkMarginKoefString();
            WpfHelper.SetAppGlobalValue("MarginKoefStr", cfgValue);

            // показывать ли ожидаемое время приготовления заказа
            cfgValue = CfgFileHelper.GetAppSetting("IsShowOrderEstimateTime");
            WpfHelper.SetAppGlobalValue("IsShowOrderEstimateTime", cfgValue.ToBool());
            // ожидаемое время приготовления заказа
            cfgValue = CfgFileHelper.GetAppSetting("OrderEstimateTime");
            WpfHelper.SetAppGlobalValue("OrderEstimateTime", cfgValue.ToDouble());
            // имя клиента - отображается на панели, если есть
            cfgValue = CfgFileHelper.GetAppSetting("IsShowClientName");
            WpfHelper.SetAppGlobalValue("IsShowClientName", cfgValue.ToBool());

            cfgValue = CfgFileHelper.GetAppSetting("IsWriteTraceMessages");
            WpfHelper.SetAppGlobalValue("IsWriteTraceMessages", (cfgValue == null) ? false : cfgValue.ToBool());

            // массивы строк для различных языков
            cfgValue = CfgFileHelper.GetAppSetting("StatusTitle");
            if (cfgValue == null)
            {
                cfgValue = "Заказ|Замовлення|Order";
            }
            WpfHelper.SetAppGlobalValue("StatusTitle", cfgValue);

            cfgValue = CfgFileHelper.GetAppSetting("PanelWaitText");
            if (cfgValue != null)
            {
                cfgValue = "Ожидать|Чекати|Wait";
            }
            WpfHelper.SetAppGlobalValue("PanelWaitText", cfgValue);

            cfgValue = CfgFileHelper.GetAppSetting("StatusLang0");
            if (cfgValue == null)
            {
                cfgValue = "Готовится|Готується|In process";
            }
            WpfHelper.SetAppGlobalValue("Status1Langs", cfgValue);

            cfgValue = CfgFileHelper.GetAppSetting("StatusLang1");
            if (cfgValue == null)
            {
                cfgValue = "Готов|Готово|Done";
            }
            WpfHelper.SetAppGlobalValue("Status2Langs", cfgValue);

            cfgValue = CfgFileHelper.GetAppSetting("StatusLang2");
            if (cfgValue == null)
            {
                cfgValue = "Забрали|Забрали|Taken";
            }
            WpfHelper.SetAppGlobalValue("Status3Langs", cfgValue);
        }
Beispiel #25
0
        public static void Main()
        {
            App app = new App();

            // splash

            Splasher.Splash = new View.SplashScreen();
            Splasher.ShowSplash();
            //for (int i = 0; i < 5000; i += 1)
            //{
            //    MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i));
            //    Thread.Sleep(1);
            //}

            // таймаут запуска приложения
            string cfgValue     = CfgFileHelper.GetAppSetting("StartTimeout");
            int    startTimeout = 0;

            if (cfgValue != null)
            {
                startTimeout = cfgValue.ToInt();
            }
            if (startTimeout != 0)
            {
                for (int i = startTimeout; i > 0; i--)
                {
                    MessageListener.Instance.ReceiveMessage($"Таймаут запуска приложения - {i} секунд.");
                    System.Threading.Thread.Sleep(1000);
                }
            }

            MessageListener.Instance.ReceiveMessage("Инициализация журнала событий...");
            cfgValue = AppLib.InitAppLogger();
            if (cfgValue != null)
            {
                appExit(1, "Ошибка инициализации журнала приложения: " + cfgValue);
            }
            System.Threading.Thread.Sleep(500);

            AppLib.WriteLogInfoMessage("****  Start application  ****");

            // защита PSW-файлом
            // текст в MessageListener.Instance прибинден к текстовому полю на сплэше
            MessageListener.Instance.ReceiveMessage("Проверка лицензии...");
            pswLib.CheckProtectedResult checkProtectedResult;
            if (pswLib.Hardware.IsCurrentAppProtected("ClientOrderQueue", out checkProtectedResult) == false)
            {
                AppLib.WriteLogErrorMessage(checkProtectedResult.LogMessage);
                appExit(2, checkProtectedResult.CustomMessage);
                return;
            }
            System.Threading.Thread.Sleep(500);

            // информация о файлах, сборках и настройках из конфиг-файлов
            MessageListener.Instance.ReceiveMessage("Получаю информацию о сборках и настройках...");
            // для хранения в свойствах приложения (из config-файла или др.)
            setAppGlobalValues();
            AppLib.WriteLogInfoMessage(" - файл: {0}, Version {1}", AppEnvironment.GetAppFullFile(), AppEnvironment.GetAppVersion());
            ITSAssemblyInfo asmInfo = new ITSAssemblyInfo("IntegraLib");

            AppLib.WriteLogInfoMessage(" - Integra lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version);
            asmInfo = new ITSAssemblyInfo("IntegraWPFLib");
            AppLib.WriteLogInfoMessage(" - Integra WPF lib: '{0}', Version {1}", asmInfo.FullFileName, asmInfo.Version);

            AppLib.WriteLogInfoMessage("Системное окружение: " + AppEnvironment.GetEnvironmentString());
            AppLib.WriteLogInfoMessage("Настройки из config-файла: " + CfgFileHelper.GetAppSettingsFromConfigFile());

            // флажки для логов
            cfgValue = CfgFileHelper.GetAppSetting("IsWriteTraceMessages");
            WpfHelper.SetAppGlobalValue("IsWriteTraceMessages", cfgValue.ToBool());
            System.Threading.Thread.Sleep(300);

            // проверить доступность БД
            MessageListener.Instance.ReceiveMessage("Проверяю доступность к базе данных...");
            AppLib.CheckDBConnection(typeof(KDSContext));

            // настройка приложения
            app.InitializeComponent();  // определенные в app.xaml

            MessageListener.Instance.ReceiveMessage("Работаю...");
            View.MainWindow mWindow = new View.MainWindow();
            try
            {
                app.Run(mWindow);
            }
            catch (Exception ex)
            {
                AppLib.WriteLogErrorMessage(ex.ToString());
                MessageBox.Show(ex.Message, "Error Application", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
            }

            AppLib.WriteLogInfoMessage("****  End application  ****");
        }
Beispiel #26
0
        }  // method

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            //  *** получить напрямую новые значения  ***
            // новые значения из списков
            _cfgValKeeper.PutNewValueDirectly("depUIDs", getIsViewDepIds());

            // роль КДС из контролов
            KDSModeEnum eMode = getKDSModeFromRadioButtons();

            if (eMode != KDSModeEnum.None)
            {
                _cfgValKeeper.PutNewValueDirectly("KDSMode", eMode.ToString());
                string sStates, sActions;
                if (eMode == KDSModeEnum.Special)
                {
                    // получить новые объектные значения разрешений
                    List <OrderStatusEnum> newAllowedStates = getStatesFromCheckBoxes(pnlStates);
                    List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > newAllowedActions = getActionsFromCheckBoxes(pnlActions);
                    sStates = KDSModeHelper.StatesListToString(newAllowedStates); if (sStates == null)
                    {
                        sStates = "";
                    }
                    sActions = KDSModeHelper.ActionsListToString(newAllowedActions); if (sActions == null)
                    {
                        sActions = "";
                    }
                }
                else
                {
                    sStates = ""; sActions = "";
                }
                // записать их новые значения в кипер
                _cfgValKeeper.PutNewValueDirectly("KDSModeSpecialStates", sStates);
                _cfgValKeeper.PutNewValueDirectly("KDSModeSpecialActions", sActions);
            }

            _cfgValKeeper.PutNewValueDirectly("NewOrderAudioAttention", (string)cbxSelectAudio.SelectedValue);

            // *** получить новые значения из контролов  ***
            _cfgValKeeper.PutNewValueFromControls();

            // собрать словарь новых значений
            _appNewSettings = _cfgValKeeper.GetNewValuesDict();
            // сделаны ли какие-нибудь изменения?
            if (_appNewSettings.Count > 0)
            {
                string errMsg = null;
                string sBuf;
                if (CfgFileHelper.SaveAppSettings(_appNewSettings, out errMsg))  // сохранить в config-файле (все в символьном виде)
                {
                    // для объектов, взятых из AppProps, сохранить туда
                    _cfgValKeeper.SaveToAppProps();

                    // для некоторых значений может понадобиться преобразование типов для сохранения в App.Properties
                    if (_appNewSettings.ContainsKey("KDSMode") && (_appNewSettings["KDSMode"].IsNull() == false))
                    {
                        if (Enum.TryParse <KDSModeEnum>(_appNewSettings["KDSMode"], out eMode))
                        {
                            KDSModeHelper.CurrentKDSMode = eMode;
                        }
                    }
                    // особые состояния и действия хранятся не в App.Properties, а в четвертом элементе KDSModeStates и в config-e !!
                    if (_appNewSettings.ContainsKey("KDSModeSpecialStates"))
                    {
                        sBuf = _appNewSettings["KDSModeSpecialStates"];
                        KDSModeStates modeStates = KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special];
                        modeStates.StringToAllowedStates(sBuf);
                        modeStates.CreateUserStateSets();
                    }
                    if (_appNewSettings.ContainsKey("KDSModeSpecialActions"))
                    {
                        sBuf = _appNewSettings["KDSModeSpecialActions"];
                        KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special].StringToAllowedActions(sBuf);
                    }

                    MessageBox.Show("Настройки успешно сохранены в config-файле!", "Сохранение настроек в config-файле", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                else
                {
                    MessageBox.Show("Ошибка сохранения настроек приложения:" + Environment.NewLine + "\t" + errMsg, "Сохранение настроек в config-файле", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }

            this.DialogResult = true;
        }