static async Task <int> RunImport(ImportOptions opts) { var db = (await GetKTContextAsync(opts)) as KTRulesContext; var provider = KTContext.Provider; if (opts.RulesPath != null) { Console.WriteLine($"Importing Rules from {opts.RulesPath}"); provider = new Services.RulesProviders.FileRulesProvider(opts.RulesPath); } db.Database.CloseConnection(); db = new DBUpdater(db.DBPath, provider).GetUpdatedContext(); return(0); }
public MainForm() { InitializeComponent(); InitializeWaveOut(); double lat, lng; GetLatLong(out lat, out lng); if (lat == -1 && lng == -1) { gMap.Enabled = false; return; } deviceGeoLocation = new PointLatLng(lat, lng); SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory); dbUpdater = new DBUpdater(deviceGeoLocation); InitializeGMap(); recording = new Recording.Recording(4); timeAveraging = new Averaging.TimeAveraging(lblLavgValue, lblTWAValue, lblDoseValue); comboBoxTimeWeight.SelectedIndex = 0; recording.OnDataAvaliable += UpdateTimeDomain; recording.OnDataAvaliable += UpdateVUMeter; recording.OnDataAvaliable += timeAveraging.GatherNewData; CalibrationParams = new CalibrationParams { Sample = (short)Properties.Settings.Default["calibration_sample"], Noise = (double)Properties.Settings.Default["calibration_noise"] }; freqDomain.ChartAreas[0].AxisX.ScaleView.Zoomable = true; freqDomain.ChartAreas[0].CursorX.AutoScroll = true; freqDomain.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; octaveFreqDomain.ChartAreas[0].AxisX.ScaleView.Zoomable = true; octaveFreqDomain.ChartAreas[0].CursorX.AutoScroll = true; octaveFreqDomain.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; octavesVisualisation.ChartAreas[0].AxisX.ScaleView.Zoomable = true; octavesVisualisation.ChartAreas[0].CursorX.AutoScroll = true; octavesVisualisation.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; timeDomain.ChartAreas[0].AxisY.Maximum = short.MaxValue; timeDomain.ChartAreas[0].AxisY.Minimum = short.MinValue; sensorReadings.ChartAreas[0].AxisY.Maximum = 140; sensorReadings.ChartAreas[0].AxisY.Minimum = 0; AppDomain.CurrentDomain.UnhandledException += OnUnhandledException; recording.IsRecording = true; }
private void Record() { RemoteKinect.Server.Status = Status.RECORDING; recording = true; RaisePropertyChanged("CanRecord"); RaisePropertyChanged("CanForceFPS"); CurrentDuration = 1; Right = new Graphics(); Left = new Graphics(); Task.Factory.StartNew(() => { EndOfSessionTimer.Start(); SessionPercentageTimer.Start(); Session = DBUpdater.CreateUnsavedSession(); }); }
private void SaveSessionWindow_WindowClosed(object sender, bool saveSession) { SaveSessionWindow.Close(); if (saveSession) { RemoteKinect.Server.Status = Status.STORING; DBUpdater.DigestSession(Session, ref LocalFrames, ref RemoteFrames); } else { LocalFrames.Clear(); RemoteFrames.Clear(); } CurrentDuration = 0; LocalKinect.KinectController.Start(); RemoteKinect.Server.Start(); RemoteKinect.Server.Status = Status.READY; }
private void Save() { string athleteHash = ""; Models.AthleteModel validationAthlete = DBAccessor.GetAthleteIfExists(AthleteModel.IdNumber); if (AthleteFormularyEnabled == "True") { if (validationAthlete != null) { MessageBoxResult res = MessageBox.Show("Already exists an athlete with id number \"" + AthleteModel.IdNumber + "\" named \"" + validationAthlete.Name + "\"" + Environment.NewLine + "Do you want to update his name?", "Athlete already exists", MessageBoxButton.YesNo); switch (res) { case MessageBoxResult.Yes: break; case MessageBoxResult.No: AthleteModel.Name = validationAthlete.Name; AthleteModel.Gender = validationAthlete.Gender; break; default: break; } } athleteHash = DBUpdater.AddOrUpdateAthlete(AthleteModel); } else { athleteHash = DBAccessor.GetExistingAthleteHash(AthleteModel.IdNumber); } try { DBUpdater.SaveSession(SessionModel, athleteHash); } catch { } Window.CloseAndNotify(true); }
private static void Main(string[] args) { CommandLineApplication app = new CommandLineApplication { Name = "Betting", Description = "Betting console app with argument parsing." }; app.HelpOption("-?|-h|--help"); CommandOption executeMetrics = app.Option("-e|--evaluateMetrics", "Evaluate all metrics", CommandOptionType.NoValue); CommandOption inspectMetric = app.Option("-x|--inspectMeric <optionvalue>", "get data about a metric", CommandOptionType.SingleValue); CommandOption predictResults = app.Option("-w|--predictResults", "predict results", CommandOptionType.NoValue); CommandOption dbUpdate = app.Option("-u|--dbUpdate", "Create enhanced csv files", CommandOptionType.NoValue); CommandOption leagueOption = app.Option("-l|--league <optionvalue>", "League name (PremierLeague/Championship)", CommandOptionType.SingleValue); CommandOption yearOption = app.Option("-y|--year <optionvalue>", "Yeasr to start compute (2018)", CommandOptionType.SingleValue); CommandOption yReverseOption = app.Option("-r|--yreverse <optionvalue>", "Year to go behind(7)", CommandOptionType.SingleValue); CommandOption matchdayOption = app.Option("-m|--matchday <optionvalue>", "Matchday to start compute (max Championship = 46 max Premier League = 38)", CommandOptionType.SingleValue); CommandOption mReverseOption = app.Option("-v|--mreverse <optionvalue>", "Matchdays to go behind(Matchday-10)", CommandOptionType.SingleValue); CommandOption drawMarginOption = app.Option("-d|--drawmargin <optionvalue>", "Percent safety for draw(2)", CommandOptionType.SingleValue); CommandOption drawMixedMarginOption = app.Option("-i|--drawmixedmargin <optionvalue>", "Percent safety for draw mixed(20)", CommandOptionType.SingleValue); CommandOption maxOddsOption = app.Option("-o|--maxodds <optionvalue>", "Max odds (2.0)", CommandOptionType.SingleValue); CommandOption minOddsOption = app.Option("-O|--minodds <optionvalue>", "Min odds (2.0)", CommandOptionType.SingleValue); CommandOption minMetricCorrectOption = app.Option("-c|--minmetriccorrect <optionvalue>", "?? 1", CommandOptionType.SingleValue); CommandOption minYearProfitOption = app.Option("-p|--minyearprofit <optionvalue>", "Min profit per year (0)", CommandOptionType.SingleValue); CommandOption minAverageProfitOption = app.Option("-P|--minaverageprofit <optionvalue>", "Min average for all years (0)", CommandOptionType.SingleValue); CommandOption logLevelOption = app.Option("-g|--loglevel <optionvalue>", "LOG_DEBUG, LOG_INFO, LOG_RESULT", CommandOptionType.SingleValue); CommandOption filterTopRate = app.Option("-f|--filtertoprate <optionvalue>", "how many should we keep in the output sorted by rate(10)", CommandOptionType.SingleValue); CommandOption filterTopProfit = app.Option("-F|--filtertopprofit <optionvalue>", "how many should we keep in the output sorted by profit(10)", CommandOptionType.SingleValue); CommandOption betStyleOption = app.Option("-t|--betstyle <optionvalue>", "ticket options (12345)", CommandOptionType.SingleValue); CommandOption useExpanded = app.Option("-X|--useExpanded", "Use expanded csv data", CommandOptionType.SingleValue); app.OnExecute(() => { ConfigManager configManager = new ConfigManager(); Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); if (leagueOption.HasValue()) { configManager.SetLeagueName(leagueOption.Value()); } if (yearOption.HasValue()) { configManager.SetYear(int.Parse(yearOption.Value())); } if (yReverseOption.HasValue()) { configManager.SetReverseYears(int.Parse(yReverseOption.Value())); } if (mReverseOption.HasValue()) { configManager.SetReverseDays(int.Parse(mReverseOption.Value())); } if (drawMarginOption.HasValue()) { configManager.SetDrawMargin(int.Parse(drawMarginOption.Value())); } if (drawMixedMarginOption.HasValue()) { configManager.SetDrawMixedMargin(int.Parse(drawMixedMarginOption.Value())); } if (maxOddsOption.HasValue()) { configManager.SetMaxOdds(double.Parse(maxOddsOption.Value())); } if (minOddsOption.HasValue()) { configManager.SetMinOdds(double.Parse(minOddsOption.Value())); } if (minMetricCorrectOption.HasValue()) { configManager.SetMinMetricCorrect(double.Parse(minMetricCorrectOption.Value())); } if (minYearProfitOption.HasValue()) { configManager.SetMinYearProfit(double.Parse(minYearProfitOption.Value())); } if (minAverageProfitOption.HasValue()) { configManager.SetMinAverageProfit(double.Parse(minAverageProfitOption.Value())); } if (logLevelOption.HasValue()) { configManager.SetLogLevel(logLevelOption.Value()); } if (filterTopRate.HasValue()) { configManager.SetFilterTopRate(int.Parse(filterTopRate.Value())); } if (filterTopProfit.HasValue()) { configManager.SetFilterTopProfit(int.Parse(filterTopProfit.Value())); } if (betStyleOption.HasValue()) { configManager.SetBetStyle(betStyleOption.Value()); } if (useExpanded.HasValue()) { configManager.SetUseExpanded(true); configManager.SetCoeficientWeight(int.Parse(useExpanded.Value())); } FixtureRetriever fixtureRetriever = new FixtureRetriever(configManager); Logger logger = new Logger(configManager.GetLogLevel()); if (matchdayOption.HasValue()) { if (matchdayOption.Value().Contains("max")) { string expression = matchdayOption.Value().Replace("max", fixtureRetriever.GetNumberOfMatchDays(configManager.GetYear()).ToString()); DataTable dt = new DataTable(); configManager.SetMatchDay(int.Parse(dt.Compute(expression, "").ToString())); } else { configManager.SetMatchDay(int.Parse(matchdayOption.Value())); } } if (dbUpdate.HasValue()) { if (executeMetrics.HasValue()) { SortedDictionary <double, KeyValuePair <char, int> > sortedAvg = new SortedDictionary <double, KeyValuePair <char, int> >(); int numMetrics = MetricFactory.differentMetricCount; int maxI = Convert.ToInt32(Math.Pow(10, numMetrics)); Parallel.For(1, maxI, (i) => { List <MetricConfig> metricConfigs = MetricFactory.GetMetricList(i); DBUpdater db = new DBUpdater(metricConfigs, configManager, fixtureRetriever); db.AddPoints(false); logger.LogResult("\n R2 values 1 {0:0.00}, X {1:0.00}, 2 {2:0.00} metric {3} \n", db.r2Values_['1'], db.r2Values_['X'], db.r2Values_['2'], i); lock (sortedAvg) { foreach (KeyValuePair <char, double> kv in db.r2Values_) { if (kv.Key != '1') { continue; } if (!sortedAvg.ContainsKey(kv.Value)) { sortedAvg.Add(kv.Value, new KeyValuePair <char, int>(kv.Key, i)); } if (sortedAvg.Count > configManager.GetFilterTopProfit()) { sortedAvg.Remove(sortedAvg.Keys.First()); } } } }); foreach (KeyValuePair <double, KeyValuePair <char, int> > x in sortedAvg) { logger.LogResult("\nR2 metric {0:0.00}, value {1:0.00}\n", x.Value.Value, x.Key); } } else { int metricConfigId = int.Parse(inspectMetric.Value()); List <MetricConfig> metricConfigs = MetricFactory.GetMetricList(metricConfigId); MetricFactory.PrintMetricList(logger, metricConfigId); DBUpdater db = new DBUpdater(metricConfigs, configManager, fixtureRetriever); db.AddPoints(true); logger.LogResult("\n R2 values 1 {0:0.00}, X {1:0.00}, 2 {2:0.00} \n", db.r2Values_['1'], db.r2Values_['X'], db.r2Values_['2']); } } else if (predictResults.HasValue()) { int metricConfigId = int.Parse(inspectMetric.Value()); List <MetricConfig> metricConfigs = MetricFactory.GetMetricList(metricConfigId); MetricFactory.PrintMetricList(logger, metricConfigId); logger.LogResultSuccess("\n Results: \n"); GlobalStats gs = new GlobalStats(metricConfigs, configManager, fixtureRetriever, logger); gs.ProcessUpcomingFixtures(out double profit); } else if (inspectMetric.HasValue()) { int metricConfigId = int.Parse(inspectMetric.Value()); List <MetricConfig> metricConfigs = MetricFactory.GetMetricList(metricConfigId); MetricFactory.PrintMetricList(logger, metricConfigId); GlobalStats gs = new GlobalStats(metricConfigs, configManager, fixtureRetriever, logger); gs.GetAllYearsData(out bool success, out double rate, out double averageProfit); if (success) { logger.LogResultSuccess("Result {0}, Rate {1:0.00}, avgProfit {2:0.00} \n", success, rate, averageProfit); } else { logger.LogResultFail("Result {0}, Rate {1:0.00}, avgProfit {2:0.00} \n", success, rate, averageProfit); } } else if (executeMetrics.HasValue()) { SortedDictionary <double, RunOutput> topByProfit = new SortedDictionary <double, RunOutput>(); SortedDictionary <double, RunOutput> topByRate = new SortedDictionary <double, RunOutput>(); SortedDictionary <double, RunOutput> successRuns = new SortedDictionary <double, RunOutput>(); int numMetrics = MetricFactory.differentMetricCount; int maxI = Convert.ToInt32(Math.Pow(10, numMetrics)); Parallel.For(1, maxI, (i) => { List <MetricConfig> metricConfigs = MetricFactory.GetMetricList(i); if (configManager.GetLogLevel() <= ConfigManager.LogLevel.LOG_INFO) { MetricFactory.PrintMetricList(logger, i); } GlobalStats gs = new GlobalStats(metricConfigs, configManager, fixtureRetriever, logger); gs.GetAllYearsData(out bool success, out double rate, out double averageProfit); if (success) { lock (successRuns) { try { successRuns.Add(averageProfit, new RunOutput(success, rate, averageProfit, i, maxI)); } catch (Exception) { } } logger.LogResultSuccess("Result {0}, Rate {1:0.00}, avgProfit {2:0.00}, cfg {3} \n", success, rate, averageProfit, i); } else { logger.LogResultFail("Result {0}, Rate {1:0.00}, avgProfit {2:0.00}, cfg {3} \n", success, rate, averageProfit, i); } lock (topByProfit) { if (!topByProfit.ContainsKey(averageProfit)) { topByProfit.Add(averageProfit, new RunOutput(success, rate, averageProfit, i, maxI)); } if (topByProfit.Count > configManager.GetFilterTopProfit()) { topByProfit.Remove(topByProfit.Keys.First()); } } lock (topByRate) { if (!topByRate.ContainsKey(rate)) { topByRate.Add(rate, new RunOutput(success, rate, averageProfit, i, maxI)); } if (topByRate.Count > configManager.GetFilterTopRate()) { topByRate.Remove(topByRate.Keys.First()); } } }); if (configManager.GetLogLevel() <= ConfigManager.LogLevel.LOG_RESULT) { logger.LogResult("TopByProfit {0}: \n\n", configManager.GetFilterTopProfit()); OutputFormatter.AddClusterInfo(ref topByProfit); foreach (RunOutput t in topByProfit.Values) { if (t.success) { logger.LogResultSuccess("Rate {0:0.00}, avgProfit {1:0.00}, id {2}, cl {3}: ", t.rate, t.averageProfit, t.metricId, t.cluster); } else { logger.LogResultFail("Rate {0:0.00}, avgProfit {1:0.00}, id {2}, cl {3}: ", t.rate, t.averageProfit, t.metricId, t.cluster); } MetricFactory.PrintMetricList(logger, t.metricId); logger.LogResult("\n ---------------- \n"); } logger.LogResult("TopByRate {0}: \n\n", configManager.GetFilterTopRate()); OutputFormatter.AddClusterInfo(ref topByRate); foreach (RunOutput t in topByRate.Values) { if (t.success) { logger.LogResultSuccess("Rate {0:0.00}, avgProfit {1:0.00}, id {2}, cl {3}: ", t.rate, t.averageProfit, t.metricId, t.cluster); } else { logger.LogResultFail("Rate {0:0.00}, avgProfit {1:0.00}, id {2}, cl {3}: ", t.rate, t.averageProfit, t.metricId, t.cluster); } MetricFactory.PrintMetricList(logger, t.metricId); logger.LogResult("\n ---------------- \n"); } logger.LogResult("SuccessRuns {0}: \n\n", successRuns.Count); OutputFormatter.AddClusterInfo(ref successRuns); foreach (RunOutput t in successRuns.Values) { if (t.success) { logger.LogResultSuccess("Rate {0:0.00}, avgProfit {1:0.00}, id {2}, cl {3}: ", t.rate, t.averageProfit, t.metricId, t.cluster); } else { logger.LogResultFail("Rate {0:0.00}, avgProfit {1:0.00}, id {2}, cl {3}:", t.rate, t.averageProfit, t.metricId, t.cluster); } MetricFactory.PrintMetricList(logger, t.metricId); logger.LogResult("\n ---------------- \n"); } if (configManager.GetLogLevel() > ConfigManager.LogLevel.LOG_RESULT) { OutputFormatter.PrintClusterInfo(logger, successRuns); } } } stopWatch.Stop(); TimeSpan ts = stopWatch.Elapsed; string elapsedTime = string.Format("{0:00}:{1:00}.{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine("\nRunTime " + elapsedTime); Console.ReadLine(); return(0); }); app.Execute(args); }
public void AddDatabase <T, Statements>(DatabaseWorkerPool <T, Statements> pool, string name) where T : MySqlConnection <Statements> where Statements : unmanaged, Enum { bool updatesEnabledForThis = DBUpdater <T, Statements> .IsEnabled(_updateFlags); _open.Enqueue(() => { var dbString = sConfigMgr.GetStringDefault(name + "DatabaseInfo", ""); if (dbString.Length == 0) { FEL_LOG_ERROR(_logger, "Database {0} not specified in configuration file!", name); return(false); } var asyncThreads = (byte)sConfigMgr.GetIntDefault(name + "Database.WorkerThreads", 1); if (asyncThreads < 1 || asyncThreads > 32) { FEL_LOG_ERROR(_logger, "{0} database: invalid number of worker threads specified. Please pick a value between 1 and 32.", name); return(false); } var synchThreads = (byte)sConfigMgr.GetIntDefault(name + "Database.SynchThreads", 1); pool.SetConnectionInfo(dbString, asyncThreads, synchThreads); var error = pool.Open(); if (error != 0) { // Database does not exist if (error == (int)ER_BAD_DB_ERROR && updatesEnabledForThis && _autoSetup) { // Try to create the database and connect again if auto setup is enabled if (DBUpdater <T, Statements> .Create(pool) && (pool.Open() == 0)) { error = 0; } } // If the error wasn't handled quit if (error != 0) { FEL_LOG_ERROR("sql.driver", "Database {0} NOT opened. There were errors opening the MySQL connections. Check your SQLDriverLogFile ", name); return(false); } } // Add the close operation _close.Push(() => { pool.Close(); }); return(true); }); if (updatesEnabledForThis) { _populate.Enqueue(() => { if (!DBUpdater <T, Statements> .Populate(pool)) { FEL_LOG_ERROR(_logger, "Could not populate the {0} database, see log for details.", name); return(false); } return(true); }); _update.Enqueue(() => { if (!DBUpdater <T, Statements> .Update(pool)) { FEL_LOG_ERROR(_logger, "Could not update the {0} database, see log for details.", name); return(false); } return(true); }); } _prepare.Enqueue(() => { if (!pool.PrepareStatements()) { FEL_LOG_ERROR(_logger, "Could not prepare statements of the {0} database, see log for details.", name); return(false); } return(true); }); }
private void OnLoginCommandExecute() { if (!String.IsNullOrWhiteSpace(Account) && !String.IsNullOrWhiteSpace(Password) && !String.IsNullOrWhiteSpace(Server)) { UserProfileService.Server = Server; Task.Factory.StartNew(() => { using (var dc = new CRMContext()) { if (!dc.Database.Exists() && Account.ToLower() != SYSDBA) { ErrorMessage = String.Format("Ошибка подключения к базе данных: на сервере \"{0}\" база данных CRM не найдена!", Server); Stage = Enums.LoginStage.Error; return; } else if (Account.ToLower() == SYSDBA && Server.ToLower() != LOCALHOST && Server != LOCALHOST_IP) { Stage = LoginStage.Error; ErrorMessage = "Запуск приложения от имени пользователя SYSDBA разрешено только с ПК-сервера базы данных!"; return; } else if (Account.ToLower() == SYSDBA && (Server.ToLower() == LOCALHOST || Server == LOCALHOST_IP)) { if (Password != "qwerty~123") { ErrorMessage = "Указан неверный пароль системного пользоваетеля"; Stage = Enums.LoginStage.Error; } var updater = new DBUpdater(BeautySmileCRM.Properties.Settings.Default.ServiceConnectionString, "CRM", "SERVICE", Resources.Packs.ResourceManager); if (updater.IsNewVersionFound) { try { Stage = LoginStage.Updating; UpdatingMessage = "Выполняется обновление БД..."; Thread.Sleep(2000); updater.InstallUpdates(); UpdatingMessage = String.Format("База данных успешно обновлена до версии {0}", updater.NewVersion); using (var outfile = new StreamWriter(String.Format("update_{0}.log", DateTime.Now.Date.ToString("ddMMyyyHHmmss")))) { outfile.Write(updater.Log.ToString()); } Thread.Sleep(4000); } catch (Exception ex) { Stage = LoginStage.Error; ErrorMessage = "Во время обновления произошла ошибка. Подробнее см. лог-файл обновления в корневой папке приложения."; using (var outfile = new StreamWriter(String.Format("update_{0}.log", DateTime.Now.Date.ToString("ddMMyyyHHmmss")))) { outfile.WriteLine(updater.Log.ToString()); outfile.WriteLine(ex.Message); } return; } } ; } try { var dbVersionRow = dc.DBVersions .OrderByDescending(x => x.Major) .ThenByDescending(x => x.Minor) .ThenByDescending(x => x.Build) .ThenByDescending(x => x.Revision) .FirstOrDefault(); if (dbVersionRow == null) { Stage = LoginStage.Error; ErrorMessage = "База данных не иницализирована. Обратитесь к администратору для инициализации БД."; return; } var dbVersion = new Version(dbVersionRow.Major, dbVersionRow.Minor, dbVersionRow.Build, dbVersionRow.Revision); if (dbVersion != ApplicationService.AppVersion) { Stage = LoginStage.Error; ErrorMessage = String.Format("Не совпадают версии БД ({0}) и приложения ({1})", dbVersion.ToString(), ApplicationService.AppVersion.ToString()); return; } Stage = Enums.LoginStage.Authorization; var encriptedPassword = Password.ToMD5Hash(); var user = dc.Users .Where(x => x.Login == Account && x.Password == encriptedPassword) .Include(x => x.Privileges) .SingleOrDefault(); if (user != null) { user.Password = "******".PadLeft(user.Password.Length, '*'); if (user.ExpirationDate.HasValue && user.ExpirationDate < DateTime.Now) { ErrorMessage = String.Format("Учетная запись заблокирована с {0:d}", user.ExpirationDate); Stage = Enums.LoginStage.Error; } else if (!user.Privileges.Any(x => x.ID == (int)Enums.Privilege.Login)) { ErrorMessage = "Пользователь не имеет достаточно прав для запуска приложения"; Stage = Enums.LoginStage.Error; } else { CurrentUser = user; Stage = Enums.LoginStage.Authorized; NavigationService.Navigate("DashboardView", null, this); UserProfileService.SetLogins(user.Login); UserProfileService.SetServers(Server); }; } else { ErrorMessage = "Пользователь с указанным логином и паролем не найден"; Stage = Enums.LoginStage.Error; } } catch (Exception e) { ErrorMessage = String.Format("Ошибка операции: {0}", e.Message); Stage = Enums.LoginStage.Error; } }; }); } else { ErrorMessage = "Не заполнен логин или пароль"; Stage = Enums.LoginStage.Error; }; }
static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); var ok = true; //var m = new System.Threading.Mutex(true, "YourNameHere", out ok);//Проверяем не запущена ли ещё одна копия программы if (!ok) //Если запущена, то выдаём ошибку и закрываем программу. { MessageBox.Show("Другая копия программы уже запущена.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null) { args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData; } //MessageBox.Show(Environment.Version.Build.ToString()); if (Settings.Default.FirstRun) //Проверяем установлен ли флаг 1-ого запуска программы в Settings-файле { var wiz = new Wizard(args); //Создаём форму Мастера настройки if (wiz.ShowDialog() == DialogResult.Cancel) //Открываем диалог работы с мастером и ждём его завершения { return; //Если диалог завершился отменой, выходим из программы } wiz.Dispose(); //Освобождаем ресурсы диалога, т.к. он нам больше не нужен } var s = new SplashScreen("Resources/gws_landing_hero.png"); s.Show(false, true); try { if (args.Length >= 1) { if (args[0] == "active") { context = new GamesEntities(Settings.Default.DefaultConStr); //Создаём новый контекст базы данных, используя подключение по умолчанию из файла настроек CurrentBase = Settings.Default.DefaultConStr; } else { context = new GamesEntities(args[0]); CurrentBase = args[0]; } } else { context = new GamesEntities(Settings.Default.DefaultConStr); //Создаём новый контекст базы данных, используя подключение по умолчанию из файла настроек CurrentBase = Settings.Default.DefaultConStr; } //Database.SetInitializer(new MigrateDatabaseToLatestVersion<GamesEntities, Migrations.Configuration>()); if (Settings.Default.NewBase) //Если стоит флаг новой базы, то { if (File.Exists(Settings.Default.DefaultConStr)) //Проверяем существует ли файл с указанным именем. { try { File.Delete(Settings.Default.DefaultConStr); //Пробуем удалить файл } catch { MessageBox.Show("Не удаётся перезаписать файл! Программа перезапустится, чтобы вы могли заного выбрать файл с играми.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); //Если удалить не удаётся, выводим сообщение об ошибке Settings.Default.FirstRun = true; //Устанавливаем флаг первого запуска, чтобы пользователь мог повторно создать базу. Settings.Default.Save(); //Сохраняем файл настроек Application.Restart(); //Перезапускаем программу return; //Выходим из текущего экземпляра программы } } context.Database.Create(); //Создаём базу данных. Данный метод создаст файл базы данных в указанном месте. context.Database.ExecuteSqlCommand(string.Format("INSERT INTO GLDBVersion (ID_V, Version) VALUES (1,{0});", Settings.Default.DatabaseVersion)); Settings.Default.NewBase = false; Settings.Default.Save(); } context.Database.Connection.Open(); //Открываем соединение с базой } catch (Exception ex1) { //Если соединение с базой по умолчанию не удалось установить, то выводим следующий диалог var DR = MessageBox.Show(string.Format("Не удаётся подключиться к базе по умолчанию ({0}). {1} Попытаться создать новую базу?\nИли нажмите \"Нет\" чтобы открыть другой файл базы данных.", Settings.Default.DefaultConStr, ex1.Message), "Ошибка открытия", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); //Предлагаем пользователию либо создать файл базы данны, либо открыть другую базу, или вообще выйти из программы switch (DR) //Перебираем результат диалога { case DialogResult.Yes: //Если пользователь нажал Да if (File.Exists(Settings.Default.DefaultConStr)) //Проверяем существует ли файл с указанным именем. { try { File.Delete(Settings.Default.DefaultConStr); //Пробуем удалить файл } catch { MessageBox.Show("Не удаётся перезаписать файл! Программа перезапустится, чтобы вы могли заного выбрать файл с играми.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); //Если удалить не удаётся, выводим сообщение об ошибке Settings.Default.FirstRun = true; //Устанавливаем флаг первого запуска, чтобы пользователь мог повторно создать базу. Settings.Default.Save(); //Сохраняем файл настроек Application.Restart(); //Перезапускаем программу return; //Выходим из текущего экземпляра программы } } context.Database.Create(); //Создаём базу данных context.Database.ExecuteSqlCommand(string.Format("INSERT INTO GLDBVersion (ID_V, Version) VALUES (1,{0});", Settings.Default.DatabaseVersion)); break; case DialogResult.No: //Если пользователь нажал Нет var dial = new OpenFileDialog { Title = "Выберите файл базы данных", FileName = "MyGames.gdb", Filter = "База игр (*.gdb)|*.gdb" }; //Создаём диалог открытия файла if (dial.ShowDialog() == DialogResult.OK) //Показываем диалог и проверяем результат { context = new GamesEntities(dial.FileName); //Создаём контекст базы данных с выбранным файлом try { context.Database.Connection.Open(); //Пробуем установить соединение CurrentBase = dial.FileName; if (MessageBox.Show("Вы хотите, чтобы эта база стала базой по умолчанию?", "База по умолчанию", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { Settings.Default.DefaultConStr = dial.FileName; Settings.Default.Save(); } } catch (Exception ex) { MessageBox.Show(string.Format("Произошла ошибка. Свяжитесь с автором.\n{0}", ex.Message)); //Если соединение установить не удалось, показываем ошибку. return; //Выходим из программы } } else { return; //Если пользователь отказался выбирать базу, то выходим из программы } break; case DialogResult.Cancel: //Если пользователь отказался создавать или открывать базу return; //то выходим из программы } } try { if (!DBUpdater.checkDBVersion(context)) { return; } } catch (Exception ex) { MessageBox.Show(String.Format("{0}{1}", ex.Message, ex.InnerException != null ? "\n" + ex.InnerException.Message : null), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } s.Close(new TimeSpan(0, 0, 0, 0, 500)); Application.Run(new GamesForm()); //Запускаем главную форму //GC.KeepAlive(m);//Нужно для проверки уже запущенной копии }
public Load() { InitializeComponent(); if (openFileDialog1.ShowDialog() == DialogResult.OK) { /*try * {*/ SecondBase = new GamesEntities(openFileDialog1.FileName); SecondBase.Database.Connection.Open(); if (!DBUpdater.checkDBVersion(SecondBase)) { return; } List <string> MyGamesNames = new List <string>(); foreach (var g in Program.context.Games) { MyGamesNames.Add(g.GetFullName().ToUpper()); } foreach (var g in SecondBase.Games) { if (!MyGamesNames.Contains(g.GetFullName().ToUpper())) { GamesToAdd.Add(g); } } GamesToAdd = GamesToAdd.OrderBy(g => g.Name).ToList(); TreeNode TN, TN1; foreach (var g in GamesToAdd) { if (g.Name == "Rebellion") { g.Name.ToString(); } if (g.OriginalGame != null) { if (g.OriginalGame.OriginalGame != null) { TN = TreeNodeFinderRecursiv(win7StyleTreeView1.Nodes, g.OriginalGame.OriginalGame); if (TN == null) { TN = win7StyleTreeView1.Nodes.Add(g.OriginalGame.OriginalGame.Name); TN.Tag = g.OriginalGame.OriginalGame; if (Program.context.Games.FirstOrDefault(g1 => g1.Name == g.OriginalGame.OriginalGame.Name) != null) { TN.Checked = true; } } TN1 = TreeNodeFinderRecursiv(TN.Nodes, g.OriginalGame); if (TN1 == null) { TN1 = TN.Nodes.Add(g.OriginalGame.Name); TN1.Tag = g.OriginalGame; if (Program.context.Games.FirstOrDefault(g1 => g1.Name == g.OriginalGame.Name) != null) { TN1.Checked = true; } } TN = TN1; } else { TN = TreeNodeFinderRecursiv(win7StyleTreeView1.Nodes, g.OriginalGame); if (TN == null) { TN = win7StyleTreeView1.Nodes.Add(g.OriginalGame.Name); TN.Tag = g.OriginalGame; if (Program.context.Games.FirstOrDefault(g1 => g1.Name == g.OriginalGame.Name) != null) { TN.Checked = true; } } } if (TreeNodeFinderRecursiv(TN.Nodes, g) == null) { TN = TN.Nodes.Add(g.Name); TN.Tag = g; } } else { if (TreeNodeFinderRecursiv(win7StyleTreeView1.Nodes, g) == null) { TN = win7StyleTreeView1.Nodes.Add(g.Name); TN.Tag = g; } } } GamesToAdd = new List <Games>(); /*} * catch(Exception ex) * { * MessageBox.Show("Не удалось открыть файл.\n"+ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); * }*/ } }
private void onDbUpdateMessage(object sender, DBUpdater.MessageEventArgs e) { if (this.InvokeRequired) { this.Invoke(new DBUpdater.MessageEventHandler(onDbUpdateMessage), new object[] { sender, e }); } else { string str = "\r\n"; if (string.IsNullOrEmpty(memoEdit.Text)) str = ""; memoEdit.Text += (str + e.Message); } }
private void onDbUpdateMessage(object sender, DBUpdater.MessageEventArgs e) { if (this.InvokeRequired) { this.Invoke(new DBUpdater.MessageEventHandler(onDbUpdateMessage), new object[] { sender, e }); } else { addTextToMemo(e.Message); } }
private void DeleteSelection() { DBUpdater.DeleteFromSelection(SelectedSessions); SessionsCollection = new SessionCollection(SessionsCollection.Where(x => !SelectedSessions.Contains(x))); }