Esempio n. 1
0
        //out 参数赋值
        internal string WriteOutParaAssign(IT4Template writer, string outErrPara)
        {
            if (ResCase != ParaCaseType.WrapOut)
            {
                return(null);
            }

            var tag = 1;

            writer.Write("                ");
            foreach (var p in FormOfParas(true))
            {
                writer.Write($"{p.Name} = _res_.P{++tag}; "); //From Response
            }
            writer.WriteLine(string.Empty);

            //onException
            return(string.Join(" ", FormOfParas(true).Select(p => $"{p.Name} = {(p.Name == outErrPara ? "e.Message" : "default")};")));
        }
Esempio n. 2
0
        /// <summary>
        /// 输出代码文件
        /// </summary>
        internal async Task WriteFile(IT4Template template, GrpcBuildConfig conf)
        {
            using (var writer = new CodeWriter(FilePath))
            {
                template.Session = new Dictionary <string, object>
                {
                    ["config"] = conf,
                    ["file"]   = this
                };
                template.Initialize();

                await writer.WriteAsync(template.TransformText());
            }

            /*writer.WriteLine(UsingSection);
             *  //writer.WriteLine("namespace {0}", NameSpace);
             *  writer.BeginSubWrite();
             *  foreach (var dotNetType in TypeList)
             *  {
             *      dotNetType.RenderCode(writer);
             *  }
             *  writer.EndSubWrite();
             *  writer.Flush();*/
        }
Esempio n. 3
0
        internal void DefineMsgType(IT4Template writer)
        {
            #region Req参数

            var reqParas = Parameters.Separate(x => !x.IsOut, out var outParas);
            if (reqParas.Count == 0)
            {
                ProxyReqTypeName = $"{Var_MsgWrp}";
                ParaCase         = ParaCaseType.No;
            }
            else if (reqParas.Count == 1)
            {
                var pt = reqParas[0].ParameterType;
                if (pt.IsClass())
                {
                    ParaCase         = ParaCaseType.OneRaw;
                    ProxyReqTypeName = GetTypeName(pt);
                }
            }

            //包裹参数
            if (WrappedPara)
            {
                if (reqParas.Count <= MsgGenCount)
                {
                    ProxyReqTypeName = $"{Var_MsgWrp}<{JoinParaType(reqParas)}>";
                }
                else //参数过多,构造类型
                {
                    ProxyReqTypeName = Name + "_Para";
                    //Type define
                    writer.WriteLine("[DataContract]");
                    writer.WriteLine($"internal class {ProxyReqTypeName}");
                    writer.BeginSubWrite();
                    var tag = 0;
                    foreach (var para in reqParas)
                    {
                        writer.WriteLine($"[DataMember(Order = {++tag})]");
                        writer.WriteLine($"public {GetParaType(para)} P{tag} {{ get; set; }}");
                    }
                    writer.EndSubWrite();
                    writer.WriteLine(null);
                }
            }

            #endregion

            //---Res 对象
            if (IsVoidReturn)
            {
                ProxyResTypeName = Var_MsgWrp;
            }
            else if (outParas.IsNullOrEmpty())
            {
                if (ReturnType.IsClass && ReturnType.GetInterface("IGeneralResObj") != null)
                {
                    ResCase = ParaCaseType.OneRaw;
                }
                ProxyResTypeName = ResCase == ParaCaseType.OneRaw ? GetTypeName(ReturnType) : $"{Var_MsgWrp}<{GetTypeName(ReturnType)}>";
            }
            else //带out的多返回
            {
                if (outParas.Count >= MsgGenCount)
                {
                    throw new Exception($"{RawInterface}.{MethodInfo.Name}Out参数过多,无法Wrap");
                }
                ProxyResTypeName = $"{Var_MsgWrp}<{GetTypeName(ReturnType)}, {JoinParaType(outParas)}>";
                ResCase          = ParaCaseType.WrapOut;
            }
        }
Esempio n. 4
0
 public static void EndSubWrite(this IT4Template writer)
 {
     writer.PopIndent();
     writer.WriteLine("}");
 }
Esempio n. 5
0
 public static void BeginSubWrite(this IT4Template writer)
 {
     writer.WriteLine("{");
     writer.PushIndent("    ");
 }
Esempio n. 6
0
 public static void PushIndent(this IT4Template writer)
 {
     writer.PushIndent("    ");
 }