private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            #region 判断依赖是否保存
            // Nuget包的生成才需要
            lbDependencies.Visibility = Visibility.Hidden;
            if (_genType == EnumGenType.AsyncClientNuget)
            {
                var type         = "thrift_" + ThriftGlobal.GenAsyncVersion.ToString();
                var dependencies = DependenceHelper.Get(type);
                if (dependencies == null || dependencies.Count <= 0)
                {
                    ShowDependenceDialog();
                    return;
                }
                lbDependencies.Content    = $"共有{dependencies.Count}个依赖";
                lbDependencies.Visibility = Visibility.Visible;
            }
            #endregion

            #region 赋值
            var serviceModel = LocalDataHelper.Get(_dte.ActiveDocument.FullName);

            var configServiceName = serviceModel.ConfigServiceName ?? "";
            if (serviceModel.ServiceName == configServiceName)
            {
                configServiceName = "";
            }

            tbServiceName.Text       = serviceModel.ServiceName ?? "";
            tbConfigServiceName.Text = configServiceName;
            tbPort.Text    = serviceModel.Port <= 0 ? "" : serviceModel.Port.ToString();
            tbNugetId.Text = serviceModel.NugetId ?? "";
            #endregion
        }
Example #2
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            #region 判断依赖是否保存
            var dependencies = DependenceHelper.Get(type);
            if (dependencies == null || dependencies.Count <= 0)
            {
                // 弹出编辑依赖的窗口
                ShowDependenceDialog();
                return;
            }
            lbDependencies.Content = $"共有{dependencies.Count}个依赖";
            #endregion

            #region 赋值
            var serviceModel = LocalDataHelper.Get(_dte.ActiveDocument.FullName);

            var configServiceName = serviceModel.ConfigServiceName ?? "";
            if (serviceModel.ServiceName == configServiceName)
            {
                configServiceName = "";
            }

            tbServiceName.Text = serviceModel.ServiceName ?? "";
            tbPort.Text        = serviceModel.Port <= 0 ? "" : serviceModel.Port.ToString();
            #endregion
        }
Example #3
0
        protected override async UniTask InitializeAsync()
        {
            LocalDataHelper.LoadAllGameData();
            LocalDataManager.Instance.SetSaveAction(LocalDataHelper.SaveAllGameData);
            await NavigationHelper.OpenPage(NavigationViewType.TitlePage, NavigationTriggerState.First);

            await base.InitializeAsync();
        }
Example #4
0
        public SpeedTestHttpClient() : base(new HttpClientHandler() { Proxy = new WebProxy() })
        {
            Timeout = TimeSpan.FromSeconds(30);

            ServersConfig = new ServersList(
                JsonSerializer.Deserialize <List <Server> >(
                    LocalDataHelper.ReadLocalFile("servers.json")
                    )
                );
        }
        private void btnSure_Click(object sender, RoutedEventArgs e)
        {
            var serviceName = tbServiceName.Text.Trim();
            var configServcieName = tbConfigServiceName.Text.Trim();
            int.TryParse(tbPort.Text.Trim(), out int port);
            var publish = cbPublish.IsChecked;
            var nugetId = tbNugetId.Text.Trim();
            if (string.IsNullOrEmpty(serviceName))
            {
                MessageBox.Show("请输入服务名称\r\n禁止除数字/大小写字母以外的字符", "VSMenu提示");
                return;
            }
            if (!Regex.IsMatch(serviceName, "^[A-Za-z0-9]+$"))
            {
                MessageBox.Show("服务名称为静态类属性名称\r\n禁止除数字/大小写字母以外的字符\r\n\r\nThriftProxy.[服务名称]", "VSMenu提示");
                return;
            }

            if (port <= 0)
            {
                MessageBox.Show("请输入合理的端口号", "VSMenu提示");
                return;
            }

            if (!serviceName.EndsWith("Service"))
            {
                if (serviceName.EndsWith("service"))
                    serviceName = serviceName.TrimEnd("service".ToArray());
                serviceName += "Service";
            }

            if (string.IsNullOrEmpty(configServcieName))
                configServcieName = serviceName;

            var model = new ServiceModel()
            {
                ServiceName = serviceName,
                ConfigServiceName = configServcieName,
                Port = port,
                Publish = publish ?? false,
                NugetId = nugetId,
            };

            #region 记录服务名称跟端口号
            LocalDataHelper.Save(model, _dte.ActiveDocument.FullName);
            #endregion

            var errorMsg = string.Empty;
            var result = ThriftGenerator.Default.GenCsharp(_dte.ActiveDocument.FullName, _genType, out errorMsg, model);
            if (!result)
                MessageBox.Show(errorMsg, "VSMenu提示");

            this.Close();
        }
Example #6
0
        private void btnSure_Click(object sender, RoutedEventArgs e)
        {
            var serviceName = tbServiceName.Text.Trim();

            int.TryParse(tbPort.Text.Trim(), out int port);
            var publish = cbPublish.IsChecked;

            if (string.IsNullOrEmpty(serviceName))
            {
                MessageBox.Show("请输入服务名称\r\n禁止除数字/大小写字母以外的字符", "VSMenu提示");
                return;
            }
            if (!Regex.IsMatch(serviceName, "^[A-Za-z0-9]+$"))
            {
                MessageBox.Show("服务名称为静态类属性名称\r\n禁止除数字/大小写字母以外的字符\r\n\r\n.[服务名称]", "VSMenu提示");
                return;
            }

            if (port <= 0)
            {
                MessageBox.Show("请输入合理的端口号", "VSMenu提示");
                return;
            }

            var model = new ServiceModel()
            {
                ServiceName = serviceName,
                Port        = port,
                Publish     = publish ?? false,
            };

            #region 记录服务名称跟端口号
            LocalDataHelper.Save(model, _dte.ActiveDocument.FullName);
            #endregion

            var errorMsg = string.Empty;
            var result   = GrpcGenerator.Default.GenCsharp(_dte.ActiveDocument.FullName, EnumGrpcGenType.GenNuget_GrpcNet, out errorMsg, model);
            if (!result)
            {
                MessageBox.Show(errorMsg, "VSMenu提示");
            }

            this.Close();
        }
Example #7
0
#pragma warning disable CA1801  // Remove unused parameter
#pragma warning disable IDE0060 // Remove unused parameter
        /// <summary>
        /// Get data from DAWA DAGI WebApi and bootload database.
        /// </summary>
        /// <param name="transactionInfo">Dummy - not used.</param>
        /// <returns>Count of all rows.</returns>
        /// <typeparam name="T">Any DAGI entity class in the JOInformatik.DawaReplication.DataAccess namespace.</typeparam>
        public static int Dagi <T>(DawaProcessInfo transactionInfo, DateTime starttime)
#pragma warning restore IDE0060 // Remove unused parameter
#pragma warning restore CA1801  // Remove unused parameter
            where T : DAGIBase
        {
            var    methodName = LoggingUtils.GetMethodName();
            string entityName = typeof(T).Name;

            Logger?.Info($"{methodName}: Processing entity {entityName}");

            var entityNameApi   = entityName.Substring(6).ToLowerInvariant(); // Get rid of starting "DAGI__"
            int counter         = 0;
            var itemList        = new List <T>();
            var syncDeletesTime = DateTime.Now;
            var stopwatch       = System.Diagnostics.Stopwatch.StartNew();

            using (var httpClient = new HttpClient())
            {
                // Always use "&noformat" for increased performance:
                var stream = httpClient.GetStreamAsync($"{DawaApiUri}{entityNameApi}?format=geojson&srid={(int)KoordinatsystemSrid.ETRS89}&noformat").Result;
                stream.ReadTimeout = ReadTimeoutInSeconds * 1000;
                var fileStream = LocalDataHelper.CreateTempFile(entityName);
                try
                {
                    // Remove geojson header and save to file. Read from same file and stop when reaching end of array(list of objects).
                    for (int x = 0; x < DKStedDataStartPos; x++)
                    {
                        stream.ReadByte();
                    }

                    stream.CopyTo(fileStream);
                    stream.Close();
                    fileStream.Close();
                }
                catch
                {
                    // If something goes wrong, make sure to close filestream, so we can try to write to the file again.
                    stream.Close();
                    fileStream.Close();
                    throw;
                }
            }

            var fileLocation = LocalDataHelper.RenameTempFile(entityName);

            Console.Write("Done saving to file.");

            using (var reader = new JsonTextReader(new StreamReader(fileLocation)))
            {
                DBContext.Database.BeginTransaction();
                try
                {
                    while (reader.Read())
                    {
                        if (reader.TokenType == JsonToken.EndArray)
                        {
                            break;
                        }

                        if (reader.TokenType == JsonToken.StartObject)
                        {
                            var item             = JObject.Load(reader);
                            T   rootItemAsObject = JsonConvert.DeserializeObject <T>(item.ToString(Formatting.None), UserJsonSerializerSettings);
                            T   itemAsObject     = JsonConvert.DeserializeObject <T>(item["properties"].ToString(Formatting.None), UserJsonSerializerSettings);

                            itemAsObject.SetEntityFields(item);
                            itemAsObject.Geometry = rootItemAsObject.Geometry;
                            itemList.Add(itemAsObject);

                            counter += 1;

                            if (itemList.Count % DKStedBulkSize == 0)
                            {
                                DBContext.BulkInsertOrUpdate(itemList);
                                itemList.Clear();
                            }
                        }
                    }

                    Logger?.Info($"{methodName}: Total fetched: {counter}");

                    DBContext.BulkInsertOrUpdate(itemList);
                    DagiStedHelper.DeleteOldRows(DBContext, entityName, syncDeletesTime);

                    var finishtime = EntityStateHelper.SetEntityStateDone(DBContext, entityName, true, -1, counter);
                    EntityStateHelper.SetEntityStateHistoryDone(DBContext, entityName, true, starttime, finishtime, -1, itemList.Count, 0);
                    if (UseMSApplicationInsights)
                    {
                        TelemetryHelper.AddTelemetryForEntity(EntityProcessMode.Dagi, entityName, stopwatch);
                    }

                    DBContext.Database.CommitTransaction();
                }
                catch (Exception ex)
                {
                    if (DBContext.Database.CurrentTransaction != null)
                    {
                        DBContext.Database.RollbackTransaction();
                    }

                    var exception  = ex.InnerException ?? ex;
                    var finishtime = EntityStateHelper.SetEntityStateDone(DBContext, entityName, false, -1, counter, exception.Message);
                    EntityStateHelper.SetEntityStateHistoryDone(DBContext, entityName, false, starttime, finishtime, -1, null, null, exception.Message);
                    if (reader != null)
                    {
                        reader.Close();
                    }

                    throw;
                }
            }

            // Delete temporary file.
            LocalDataHelper.RemoveTempFile(fileLocation);

            return(counter);
        }
Example #8
0
        /// <summary>
        /// Main program.
        /// </summary>
        /// <param name="args">String arguments for program initialization.</param>
        public static void Main(string[] args)
        {
            Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
            var settings = Properties.Settings.Default;

            if (settings.UseMSApplicationInsights)
            {
                try
                {
                    ApplicationInsightInitializer.Initialize();
                }
                catch (Exception ex)
                {
                    var msg = $"ERROR! Failed to initialize MS Application Insights. Problem: {ex.Message}";
                    Console.WriteLine(msg);
                    _logger.Error(msg, ex);
                    Environment.Exit((int)ReturnCode.ApplicationInsightInitializeError);
                }
            }

            Helpers.InitializeHelpers.HaltIfNoDBConnection();
            Helpers.InitializeHelpers.HaltIfAllreadyRunning();

            try
            {
#pragma warning disable CS0436 // Type conflicts with imported type
                SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
#pragma warning restore CS0436 // Type conflicts with imported type

                string programAssemblyVersion    = Assembly.GetExecutingAssembly().GetName().Version.ToString();
                string dataAccessAssemblyVersion = Assembly.GetAssembly(typeof(Adgangsadresse)).GetName().Version.ToString();
                var    methodName = LoggingUtils.GetMethodName();
                Console.WriteLine($"Starting DawaReplication assembly ver. {programAssemblyVersion}; DataAccess ver. {dataAccessAssemblyVersion} ....");
                _logger.Info($"{methodName}: Starting DawaReplication assembly ver. {programAssemblyVersion}; DataAccess ver. {dataAccessAssemblyVersion}");
                _logger.Info($"{methodName}: Settings = {SettingsHelper.SettingsAsString()}");
                _logger.Info($"{methodName}: Time of initialization: {DateTime.Now.ToShortTimeString()}");

                var processMode = InitialArgumentHelper.InitializeProcess(args);
                Helpers.InitializeHelpers.HaltIfDBSchemeNotInitialized();

                Console.WriteLine($"Time: {DateTime.Now.ToShortTimeString()}. ProcessMode: {processMode}\n");
                var list = TableInfo.GetTableInfoList(AppDomain.CurrentDomain.BaseDirectory + settings.TableInfoFile, false);

#pragma warning disable CA2000 // Dispose objects before losing scope
                var dbContext = new DawaReplicationDBContext();
#pragma warning restore CA2000 // Dispose objects before losing scope
                if (processMode == EntityProcessMode.Udtraek)
                {
                    FixDBProblems.FixDbProblems(dbContext);
                }

                EntityManager.InitSettings(dbContext, list.Select(x => x.Name).ToList(), settings.DawaApiUri, settings.DawaApiReadTimeoutInSeconds, settings.UdtraekRowsMax, settings.UdtraekBulkSize, settings.DKStedDataStartPos, settings.DKStedBulkSize, settings.DBCommandTimeoutInSeconds, settings.TempDataFolderPath, settings.ActiveFixes, settings.ActiveFixesListFileLocation, settings.UseMSApplicationInsights, settings.JsonSerializerIgnoreNullValue);

                LocalDataHelper.MakeFolder(settings.TempDataFolderPath);

                var msg = LoggingUtils.MakeMessage(methodName, " TableInfoFile", list);
                _logger.Info(msg);

                var watch           = Stopwatch.StartNew();
                var dawaProcessInfo = Helpers.InitializeHelpers.MakeDawaProcessInfo(processMode, settings.DawaApiUri, settings.DawaApiReadTimeoutInSeconds, settings.TxidOverride);
                _logger.Info($"{methodName}: Got latest transaction ID = {dawaProcessInfo.Txid}");

                EntityManager.ProcessTables(processMode, dawaProcessInfo);

                if (dawaProcessInfo.FailedTables.Any() && (processMode == EntityProcessMode.Dagi || processMode == EntityProcessMode.Udtraek))
                {
                    for (int i = 1; i <= settings.RetryCount; i++)
                    {
                        msg = $"{methodName}: Failed to process all tables. No of failed tables: {dawaProcessInfo.FailedTables.Count}. Retrying again in {settings.RetryTimerInMinutes * i} minutes.";
                        Console.WriteLine($"\nWARNING. Time: {DateTime.Now.ToShortTimeString()}. {msg}");
                        _logger.Warn(msg);
                        EntityManager.TableList = new List <string>(dawaProcessInfo.FailedTables);
                        dawaProcessInfo.FailedTables.Clear();
                        Thread.Sleep(settings.RetryTimerInMinutes * 60 * 1000 * i);
                        EntityManager.ProcessTables(processMode, dawaProcessInfo);
                        if (dawaProcessInfo.FailedTables.Count == 0)
                        {
                            break;
                        }
                    }
                }

                if (processMode == EntityProcessMode.Udtraek)
                {
                    if (settings.RebuildIndicesAfterReplication)
                    {
                        FixDBProblems.RebuildIndices(dbContext);
                    }
                }

                if (processMode == EntityProcessMode.Dagi)
                {
                    LocalDataHelper.CleanUpHelper(settings.EntitystateHistoryDeleteOldNumOfDays, settings.ArchiveLogsAfterDays, settings.DeleteOldArchivesAfterDays, settings.DeleteLogsAfterDays);
                }

                dbContext.Dispose();
                _logger.Info($"{methodName}: Done. Execution time: {watch.Elapsed}");
                _logger.Info($"{methodName}: Time of completion: {DateTime.Now.ToShortTimeString()}");

                if (settings.UseMSApplicationInsights)
                {
                    TelemetryHelper.AddTime(methodName, watch.Elapsed.TotalMinutes, "Minutes");
                }

                if (settings.WaitForUserInput)
                {
                    Console.WriteLine($"Done: {DateTime.Now.ToShortTimeString()}. Execution time: {watch.Elapsed}" + "\n");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }
            }
            catch (Exception ex)
            {
                var msg = $"ERROR! Unexpected exception. Problem: {ex.Message}";
                Console.WriteLine(msg);
                Console.WriteLine($"Time at which error occured {DateTime.Now.ToShortTimeString()}");
                _logger.Error(msg, ex);

                if (Properties.Settings.Default.WaitForUserInput)
                {
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }

                Environment.Exit((int)ReturnCode.UnknownError);
            }

            Environment.Exit((int)ReturnCode.Success);
        }
 /// <summary>
 /// 로컬 데이터 로드.
 /// </summary>
 private void LocalDataLoad()
 {
     LocalDataManager.Instance.AddComponentBase(FindObjectOfType <LocalDataComponent>());
     LocalDataHelper.LoadAllGameData();
 }