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