Esempio n. 1
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;
            }
        }