예제 #1
0
        public static void readAppDataFromDB()
        {
            MessageListener.Instance.ReceiveMessage("Получаю из MS SQL главное меню...");
            AppLib.WriteLogTraceMessage("Получаю из MS SQL главное меню...");

            MenuLib.MenuFolderHandler = (folderName) => MessageListener.Instance.ReceiveMessage($"Получаю блюда раздела '{folderName}'...");
            List <AppModel.MenuItem> newMenu = MenuLib.GetMenuMainFolders();

            if (newMenu == null)
            {
                AppLib.WriteLogErrorMessage("Fatal error: Ошибка создания Главного Меню. Меню не создано. Аварийное завершение приложения.");
                MessageBox.Show("Ошибка создания меню\nПрограмма будет закрыта.");
                throw new Exception("Ошибка создания меню");
            }

            // сохранить Главное Меню в свойствах приложения
            List <AppModel.MenuItem> mainMenu = (List <AppModel.MenuItem>)AppLib.GetAppGlobalValue("mainMenu");

            if (mainMenu != null)
            {
                mainMenu.Clear();
            }
            mainMenu = newMenu;

            AppLib.SetAppGlobalValue("mainMenu", mainMenu);

            AppLib.WriteLogTraceMessage("Получаю из MS SQL главное меню... - READY");
        }
예제 #2
0
        public static System.Windows.Controls.Image getImage(string fileName)
        {
            if (!File.Exists(fileName))
            {
                AppLib.WriteLogErrorMessage(string.Format("Изображение {0} не найдено!", fileName));
                return(null);
            }

            System.Windows.Media.Imaging.BitmapImage bitmapImage = new System.Windows.Media.Imaging.BitmapImage();
            bitmapImage.BeginInit();
            bitmapImage.UriSource = new Uri(fileName, UriKind.RelativeOrAbsolute);
            bitmapImage.EndInit();

            System.Windows.Controls.Image img = new System.Windows.Controls.Image();
            img.Source = bitmapImage;
            img.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;

            return(img);
        }
예제 #3
0
        public static void readSettingFromDB()
        {
            MessageListener.Instance.ReceiveMessage("Читаю настройки из БД...");
            AppLib.WriteLogTraceMessage("Получаю настройки приложения из таблицы Setting ...");

            using (NoodleDContext db = new NoodleDContext())
            {
                try
                {
                    List <Setting>     setList     = db.Setting.ToList();
                    List <StringValue> stringTable = db.StringValue.ToList();

                    foreach (Setting item in setList)
                    {
                        //                        AppLib.WriteLogTraceMessage("- параметр "+ item.UniqName + "...");

                        AppLib.SetAppGlobalValue(item.UniqName, item.Value);
                        if (item.UniqName.EndsWith("Color") == true)  // преобразовать и переопределить цвета
                        {
                            convertAppColor(item.UniqName);
                            checkAppColor(item.UniqName);
                        }
                        if (item.Value == "StringValue")    // заменить в Application.Properties строку StringValue на словарь языковых строк
                        {
                            Dictionary <string, string> d = getLangTextDict(stringTable, item.RowGUID, 1);
                            AppLib.SetAppGlobalValue(item.UniqName, d);
                        }

                        //                        AppLib.WriteLogTraceMessage("- параметр " + item.UniqName + "... Ready");
                    }
                }
                catch (Exception ex)
                {
                    AppLib.WriteLogErrorMessage(string.Format("Fatal error: {0}\nSource: {1}\nStackTrace: {2}", ex.Message, ex.Source, ex.StackTrace));
                    appExit(5, "Ошибка доступа к данным: " + ex.Message + "\nПрограмма будет закрыта.");
                }
            }
            AppLib.WriteLogTraceMessage("Получаю настройки приложения из таблицы Setting ... READY");
        }
예제 #4
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();
            }
        }