Ejemplo n.º 1
0
 private void Window_Loaded(object sender, RoutedEventArgs e)
 {
     #region 获取已经保存的依赖
     dependencies = DependenceHelper.Get(_type) ?? new List <DependenceModel>();
     lvDependencies.ItemsSource = dependencies;
     #endregion
 }
Ejemplo n.º 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
        }
Ejemplo n.º 3
0
        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
        }
Ejemplo n.º 4
0
        private void btnSure_Click(object sender, RoutedEventArgs e)
        {
            var packageId  = tbPackageId.Text.Trim();
            var version    = tbVersion.Text.Trim();
            var namespaces = tbNamespace.Text.Trim();

            if (string.IsNullOrEmpty(packageId))
            {
                tbPackageId.Focus();
                MessageBox.Show("请输入依赖包名称");
                return;
            }
            if (string.IsNullOrEmpty(version))
            {
                tbVersion.Focus();
                MessageBox.Show("请输入依赖包版本");
                return;
            }

            if (dependencies.Any(oo => oo.PackageId == packageId && oo.Version == version))
            {
                tbPackageId.Focus();
                MessageBox.Show("依赖包已存在");
                return;
            }

            if (dependencies.Any(oo => oo.PackageId == packageId))
            {
                var dependency = dependencies.FirstOrDefault(oo => oo.PackageId == packageId);
                dependency.Version   = version;
                dependency.Namespace = namespaces;
            }
            else
            {
                dependencies.Add(new DependenceModel()
                {
                    PackageId = packageId,
                    Version   = version,
                    Namespace = namespaces,
                });
            }
            DependenceHelper.Save(dependencies, _type);

            // 清除
            tbPackageId.Text = string.Empty;
            tbVersion.Text   = string.Empty;
            tbNamespace.Text = string.Empty;
            tbPackageId.Focus();

            CrossThreadExecuteUI(() =>
            {
                var a = dependencies.Select(oo => new { oo.PackageId, oo.Version, oo.Namespace });
                lvDependencies.ItemsSource = a;
            });
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 生成异步代理类
        /// </summary>
        public static string GenAsyncProxyCs(string grpcDllPath, out string csNamespace)
        {
            var a2          = Assembly.LoadFrom(grpcDllPath);
            var classes     = a2.GetExportedTypes().Where(oo => oo.FullName.IndexOf("+") > -1 && oo.FullName.EndsWith("Client"));
            var clientClass = classes.First();

            csNamespace = clientClass.Namespace;
            var clientClassFullName = clientClass.FullName;
            var mainClassName       = clientClassFullName.Split('+')[0];
            var clientName          = clientClass.Name;

            // 依赖的命名空间可能会改
            var namespaces         = DependenceHelper.GetGrpcNamespace();
            var thriftProxyBuilder = new StringBuilder();

            thriftProxyBuilder.Append($"using {namespaces};");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append($"using {namespaces}.Intercept;");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("using System;");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("using System.IO;");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("using __GrpcService = " + mainClassName + ";");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("namespace " + csNamespace);
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("{");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("#if NET45 || NET46 || NET47");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("public class ClientManager {");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("public static IClientTracer Tracer { get; set; } = default(IClientTracer);");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("public static __GrpcService." + clientName + " Instance{get{");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("var configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, \"dllconfigs/" + csNamespace + ".dll.config\");");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("return GrpcClientManager<__GrpcService." + clientName + ">.Get(configPath, Tracer);");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("} }");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("}");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("#endif");
            thriftProxyBuilder.Append(Environment.NewLine);
            thriftProxyBuilder.Append("}");

            return(thriftProxyBuilder.ToString());
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 添加引用的xml标签
        /// </summary>
        /// <param name="builder"></param>
        private static void AppendReference(StringBuilder builder, string depType = "grpc")
        {
            builder.Append("<ItemGroup>");
            builder.Append(Environment.NewLine);

            // 依赖
            var dependencies = DependenceHelper.Get(depType);

            foreach (var dependence in dependencies)
            {
                builder.Append($"<PackageReference Include=\"{dependence.PackageId}\" Version=\"{dependence.Version}\" />");
                builder.Append(Environment.NewLine);
            }

            builder.Append("</ItemGroup>");
            builder.Append(Environment.NewLine);
        }
Ejemplo n.º 7
0
        private void cmiDelete_OnClick(object sender, RoutedEventArgs e)
        {
            if (lvDependencies.SelectedItem == null)
            {
                return;
            }

            var packageId = ((dynamic)lvDependencies.SelectedItem).PackageId;
            var index     = dependencies.FindIndex(oo => oo.PackageId == packageId);

            if (index > -1)
            {
                dependencies.RemoveAt(index);
                DependenceHelper.Save(dependencies, _type);
            }
            CrossThreadExecuteUI(() =>
            {
                var a = dependencies.Select(oo => new { oo.PackageId, oo.Version, oo.Namespace });
                lvDependencies.ItemsSource = a;
            });
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 生成Nuspec文件
        /// </summary>
        /// <param name="complieFold">编译后的数据的文件夹</param>
        /// <returns></returns>
        public static string GenNuspecXml(string complieFold, ServiceModel serviceModel, string csNamespace)
        {
            var net45File    = Directory.GetFiles(Path.Combine(complieFold, net45Fold));
            var net45Configs = Directory.GetFiles(Path.Combine(complieFold, net45Fold, dllconfigFold));

            var net46File    = Directory.GetFiles(Path.Combine(complieFold, net46Fold));
            var net46Configs = Directory.GetFiles(Path.Combine(complieFold, net46Fold, dllconfigFold));

            //var net47File = Directory.GetFiles(Path.Combine(complieFold, net47Fold));
            //var net47Configs = Directory.GetFiles(Path.Combine(complieFold, net47Fold, dllconfigFold));

            var netcore20File    = Directory.GetFiles(Path.Combine(complieFold, netcoreFold));
            var netcore20Configs = Directory.GetFiles(Path.Combine(complieFold, netcoreFold, dllconfigFold));

            var nugetId = csNamespace;

            // 输出zookeeper.config
            var grpcBuilder = new StringBuilder();

            grpcBuilder.Append("<?xml version=\"1.0\"?>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("<package>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("  <metadata>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <id>" + nugetId + "</id>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <title>" + csNamespace + "</title>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <version>1.0." + DateTime.Now.ToString("yyyyMMddHH") + "</version>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <authors>Overt</authors>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <owners>Overt</owners>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <requireLicenseAcceptance>false</requireLicenseAcceptance>");
            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("    <description>" + csNamespace + "</description>");
            grpcBuilder.Append(Environment.NewLine);

            grpcBuilder.Append("    <copyright>Copyright " + DateTime.Now.Year + "</copyright>");
            grpcBuilder.Append(Environment.NewLine);

            // 依赖
            grpcBuilder.Append("    <dependencies>");
            grpcBuilder.Append(Environment.NewLine);

            var type         = $"grpc";
            var dependencies = DependenceHelper.Get(type);

            foreach (var dependence in dependencies)
            {
                grpcBuilder.Append($"      <dependency id=\"{dependence.PackageId}\" version=\"{dependence.Version}\" />");
                grpcBuilder.Append(Environment.NewLine);
            }

            grpcBuilder.Append("    </dependencies>");
            grpcBuilder.Append(Environment.NewLine);

            grpcBuilder.Append("  </metadata>");
            grpcBuilder.Append(Environment.NewLine);

            // Dll文件
            grpcBuilder.Append("  <files>");
            grpcBuilder.Append(Environment.NewLine);
            foreach (var filePath in net45File)
            {
                var file = new FileInfo(filePath);
                grpcBuilder.Append("    <file src=\"" + filePath + "\" target=\"/lib/net45/" + file.Name + "\" />");
            }
            grpcBuilder.Append(Environment.NewLine);
            foreach (var filePath in net46File)
            {
                var file = new FileInfo(filePath);
                grpcBuilder.Append("    <file src=\"" + filePath + "\" target=\"/lib/net46/" + file.Name + "\" />");
            }
            //grpcBuilder.Append(Environment.NewLine);
            //foreach (var filePath in net47File)
            //{
            //    var file = new FileInfo(filePath);
            //    grpcBuilder.Append("    <file src=\"" + filePath + "\" target=\"/lib/net47/" + file.Name + "\" />");
            //}
            grpcBuilder.Append(Environment.NewLine);
            foreach (var filePath in netcore20File)
            {
                var file = new FileInfo(filePath);
                grpcBuilder.Append("    <file src=\"" + filePath + "\" target=\"/lib/netstandard2.0/" + file.Name + "\" />");
            }

            // configs
            foreach (var config in net45Configs)
            {
                var file = new FileInfo(config);
                var name = file.Name;
                if (file.Name.ToLower().IndexOf("client") > -1)
                {
                    ChangeFmConfig(serviceModel, config);
                    name = csNamespace + ".dll" + file.Extension;

                    grpcBuilder.Append(Environment.NewLine);
                    grpcBuilder.Append("    <file src=\"" + config + "\" target=\"/content/net45/dllconfigs/" + name + "\" />");
                }
            }
            foreach (var config in net46Configs)
            {
                var file = new FileInfo(config);
                var name = file.Name;
                if (file.Name.ToLower().IndexOf("client") > -1)
                {
                    ChangeFmConfig(serviceModel, config);
                    name = csNamespace + ".dll" + file.Extension;

                    grpcBuilder.Append(Environment.NewLine);
                    grpcBuilder.Append("    <file src=\"" + config + "\" target=\"/content/net46/dllconfigs/" + name + "\" />");
                }
            }
            //foreach (var config in net47Configs)
            //{
            //    var file = new FileInfo(config);
            //    var name = file.Name;
            //    if (file.Name.ToLower().IndexOf("client") > -1)
            //    {
            //        ChangeFmConfig(serviceModel, config);
            //        name = csNamespace + ".dll" + file.Extension;

            //        grpcBuilder.Append(Environment.NewLine);
            //        grpcBuilder.Append("    <file src=\"" + config + "\" target=\"/content/net47/dllconfigs/" + name + "\" />");
            //    }
            //}

            foreach (var config in netcore20Configs)
            {
                var file = new FileInfo(config);
                var name = file.Name;

                if (name.ToLower().IndexOf("client") > -1)
                {
                    ChangeCoreConfig(serviceModel, config);
                    name = csNamespace + ".dll" + file.Extension;

                    grpcBuilder.Append(Environment.NewLine);
                    grpcBuilder.Append("    <file src=\"" + config + "\" target=\"/content/netstandard2.0/dllconfigs/" + name + "\" />");
                }
            }

            grpcBuilder.Append(Environment.NewLine);
            grpcBuilder.Append("  </files>");
            grpcBuilder.Append(Environment.NewLine);

            grpcBuilder.Append("</package>");
            grpcBuilder.Append(Environment.NewLine);

            return(grpcBuilder.ToString());
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 生成Nuspec文件
        /// </summary>
        /// <param name="thriftDllPath"></param>
        /// <returns></returns>
        public static string GenNuspecXml(string thriftDllPath, string nugetId = "")
        {
            // 加载依赖
            LoadDependencies();

            // 尝试把文件加载到字节流中读取
            byte[]   b  = File.ReadAllBytes(thriftDllPath);
            Assembly a2 = Assembly.Load(b);
            // 获取其中公开的接口类型
            var interfaces = a2.GetExportedTypes().Where(c => c.IsInterface).ToArray();

            if (interfaces.Length > 0)
            {
                var csNamespace   = interfaces.First().Namespace;
                var declaringName = string.Empty;
                if (interfaces.First().DeclaringType != null)
                {
                    declaringName = interfaces.First().DeclaringType.Name;
                }

                if (string.IsNullOrEmpty(nugetId))
                {
                    nugetId = csNamespace;
                }

                // 输出zookeeper.config
                var thriftProxyBuilder = new StringBuilder();
                thriftProxyBuilder.Append("<?xml version=\"1.0\"?>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("<package>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("  <metadata>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <id>" + nugetId + "</id>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <title>" + csNamespace + "</title>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <version>1.0." + DateTime.Now.ToString("yyyyMMddHH") + "</version>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <authors>Sodao</authors>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <owners>Sodao</owners>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <requireLicenseAcceptance>false</requireLicenseAcceptance>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <description>" + csNamespace + "</description>");
                thriftProxyBuilder.Append(Environment.NewLine);


                thriftProxyBuilder.Append("    <copyright>Copyright " + DateTime.Now.Year + "</copyright>");
                thriftProxyBuilder.Append(Environment.NewLine);

                // 依赖
                var type         = $"thrift_{ThriftGlobal.GenAsyncVersion}";
                var dependencies = DependenceHelper.Get(type);
                thriftProxyBuilder.Append("    <dependencies>");
                thriftProxyBuilder.Append(Environment.NewLine);
                foreach (var dependence in dependencies)
                {
                    thriftProxyBuilder.Append($"      <dependency id=\"{dependence.PackageId}\" version=\"{dependence.Version}\" />");
                    thriftProxyBuilder.Append(Environment.NewLine);
                }
                thriftProxyBuilder.Append("    </dependencies>");
                thriftProxyBuilder.Append(Environment.NewLine);

                //if (ThriftGlobal.GenAsyncVersion == EnumGenAsyncVersion.New)
                //{
                //    thriftProxyBuilder.Append("    <dependencies>");
                //    thriftProxyBuilder.Append(Environment.NewLine);
                //    thriftProxyBuilder.Append("      <dependency id=\"thrift_client\" version=\"2.1.3\" />");
                //    thriftProxyBuilder.Append(Environment.NewLine);
                //    thriftProxyBuilder.Append("    </dependencies>");
                //    thriftProxyBuilder.Append(Environment.NewLine);
                //}
                //else
                //{
                //    thriftProxyBuilder.Append("    <dependencies>");
                //    thriftProxyBuilder.Append(Environment.NewLine);
                //    thriftProxyBuilder.Append("      <dependency id=\"thrift_client\" version=\"1.0.0.1\" />");
                //    thriftProxyBuilder.Append(Environment.NewLine);
                //    thriftProxyBuilder.Append("    </dependencies>");
                //    thriftProxyBuilder.Append(Environment.NewLine);
                //}

                thriftProxyBuilder.Append("  </metadata>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("  <files>");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <file src=\"" + csNamespace + ".dll.config\" target=\"/content/dllconfigs/" + csNamespace + ".dll.config\" />");
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <file src=\"" + csNamespace + ".dll\" target=\"/lib/net4.0/" + csNamespace + ".dll\" />");

                // XML
                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("    <file src=\"" + csNamespace + ".XML\" target=\"/lib/net4.0/" + csNamespace + ".XML\" />");

                thriftProxyBuilder.Append(Environment.NewLine);
                thriftProxyBuilder.Append("  </files>");
                thriftProxyBuilder.Append(Environment.NewLine);

                thriftProxyBuilder.Append("</package>");
                thriftProxyBuilder.Append(Environment.NewLine);

                return(thriftProxyBuilder.ToString());
            }
            return(string.Empty);
        }