Exemplo n.º 1
0
 /// <summary>
 /// 获取 HTML 信息
 /// </summary>
 /// <param name="htmlFile">HTML 文件</param>
 /// <returns>HTML 信息</returns>
 private static Html getHtml(FileInfo htmlFile)
 {
     AutoCSer.HtmlNode.Node htmlNode = new AutoCSer.HtmlNode.Node(File.ReadAllText(htmlFile.FullName, Encoding.UTF8));
     foreach (AutoCSer.HtmlNode.Node bodyNode in bodyFilter.Get(htmlNode))
     {
         foreach (AutoCSer.HtmlNode.Node titleNode in titleFilter.Get(htmlNode))
         {
             string title, bodyText;
             if (!string.IsNullOrEmpty(title = titleNode.Text) && !string.IsNullOrEmpty(bodyText = bodyNode.Text))
             {
                 LeftArray <HtmlImage> images = default(LeftArray <HtmlImage>);
                 foreach (AutoCSer.HtmlNode.Node imgNode in bodyNode.GetNodesByTagName("img"))
                 {
                     string alt = imgNode["alt"], src = imgNode["src"] ?? imgNode["@src"];
                     if (!string.IsNullOrEmpty(alt) && !string.IsNullOrEmpty(src))
                     {
                         images.Add(new HtmlImage {
                             Url = src, Title = alt
                         });
                     }
                 }
                 return(new Html {
                     Title = title, Text = bodyText, Images = images.ToArray()
                 });
             }
             break;
         }
         break;
     }
     return(null);
 }
Exemplo n.º 2
0
            /// <summary>
            /// 获取列名集合
            /// </summary>
            /// <param name="name">列名前缀</param>
            /// <returns></returns>
            internal static string[] GetColumnNames(string name)
            {
                string[]   names;
                HashString nameKey = name;

                if (columnNames.TryGetValue(ref nameKey, out names))
                {
                    return(names);
                }
                LeftArray <string> nameList = new LeftArray <string>(verifyFields.Length);

                foreach (Field field in verifyFields)
                {
                    if (field.IsSqlColumn)
                    {
                        ColumnGroup.Verifyer.GetColumnNames(field.FieldInfo.FieldType)(ref nameList, name + "_" + field.FieldInfo.Name);
                    }
                    else
                    {
                        nameList.Add(name + "_" + field.FieldInfo.Name);
                    }
                }
                columnNames.Set(ref nameKey, names = nameList.ToArray());
                return(names);
            }
Exemplo n.º 3
0
            static Verifyer()
            {
                if (attribute != null && custom == null && Fields != null)
                {
                    LeftArray <Field> verifyFields = Fields.getFind(value => value.IsVerify);
                    if (verifyFields.Length != 0)
                    {
                        columnNames = new AutoCSer.Threading.LockEquatableLastDictionary <HashString, string[]>();
                        int index = 0;
                        Verifyer.verifyFields = verifyFields.ToArray();
#if NOJIT
                        fields = new sqlColumn.verifyDynamicMethod.field[verifyFields.length];
                        foreach (AutoCSer.code.cSharp.sqlModel.fieldInfo member in verify.verifyFields)
                        {
                            fields[index++].Set(member);
                        }
#else
                        ColumnGroup.Verifyer dynamicMethod = new ColumnGroup.Verifyer(typeof(valueType), attribute);
                        foreach (Field member in Verifyer.verifyFields)
                        {
                            dynamicMethod.Push(member, index++);
                        }
                        verifyer = (Func <valueType, Table, string[], bool>)dynamicMethod.Create <Func <valueType, Table, string[], bool> >();
#endif
                        AutoCSer.Pub.ClearCaches += clearCache;
                    }
                }
            }
Exemplo n.º 4
0
 /// <summary>
 /// 根据类型获取自定义属性函数信息集合
 /// </summary>
 /// <param name="type">对象类型</param>
 /// <returns>自定义属性函数信息集合</returns>
 public static                                                                       AttributeMethod[] Get(Type type)
 {
     AttributeMethod[] values;
     if (methods.TryGetValue(type, out values))
     {
         return(values);
     }
     Monitor.Enter(createLock);
     try
     {
         if (methods.TryGetValue(type, out values))
         {
             return(values);
         }
         LeftArray <AttributeMethod> array = default(LeftArray <AttributeMethod>);
         foreach (MethodInfo method in type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy))
         {
             object[] attributes = method.GetCustomAttributes(true);
             if (attributes.Length != 0)
             {
                 array.Add(new AttributeMethod {
                     Method = method, attributes = attributes
                 });
             }
         }
         methods.Set(type, values = array.ToArray());
     }
     finally { Monitor.Exit(createLock); }
     return(values);
 }
Exemplo n.º 5
0
 /// <summary>
 /// 安装入口
 /// </summary>
 /// <param name="parameter">安装参数</param>
 /// <returns>是否安装成功</returns>
 public bool Run(ProjectParameter parameter)
 {
     if (parameter != null)
     {
         if (parameter.IsAutoCSerCodeGenerator || parameter.IsCustomCodeGenerator)
         {
             LeftArray <Definition> definitions = (parameter.IsCustomCodeGenerator ? parameter.Assembly : ProjectParameter.CurrentAssembly).GetTypes().getArray(type => new Definition {
                 Type = type, Auto = type.customAttribute <GeneratorAttribute>(), Parameter = parameter
             })
                                                  .getFind(type => type.Auto != null && type.Auto.IsTemplate)// && type.Auto.DependType == typeof(cSharper)
                                                  .Sort((left, right) => string.CompareOrdinal(left.Type.FullName, right.Type.FullName));
             LeftArray <string> codes = new LeftArray <string>(definitions.Length);
             foreach (Definition definition in definitions)
             {
                 codes.Add(definition.ToString());
                 if (Messages.IsError)
                 {
                     return(false);
                 }
             }
             string fileName = parameter.ProjectPath + @"{AutoCSer}.CSharper.cs";
             if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.ToArray()) + Coder.FileEndCode))
             {
                 Messages.Add(fileName + " 被修改");
                 throw new Exception();
             }
         }
         return(true);
     }
     return(false);
 }
Exemplo n.º 6
0
            /// <summary>
            /// 获取列名集合
            /// </summary>
            /// <param name="name">列名前缀</param>
            /// <returns></returns>
            public unsafe static string[] GetColumnNames(string name)
            {
                string[]   names;
                HashString nameKey = name;

                if (columnNames.TryGetValue(nameKey, out names))
                {
                    return(names);
                }
                LeftArray <string> nameList = new LeftArray <string>(Fields.Length);

                foreach (Field field in Fields)
                {
                    if (field.IsSqlColumn)
                    {
                        ((ColumnGroup.Verifyer.GetName)AutoCSer.Sql.Metadata.GenericType.Get(field.FieldInfo.FieldType).UpdaterGetColumnNamesMethod)(ref nameList, name + "_" + field.FieldInfo.Name);
                    }
                    else
                    {
                        nameList.Add(name + "_" + field.FieldInfo.Name);
                    }
                }
                columnNames.Set(nameKey, names = nameList.ToArray());
                return(names);
            }
Exemplo n.º 7
0
 /// <summary>
 /// 获取成员名称与类型集合
 /// </summary>
 /// <param name="name">列名前缀</param>
 /// <returns></returns>
 internal static KeyValue <string, Type>[] GetDataColumns(string name)
 {
     if (custom != null)
     {
         return(custom.GetDataColumns(name));
     }
     if (Fields != null)
     {
         KeyValue <string, Type>[] values;
         HashString nameKey = name;
         if (dataColumns.TryGetValue(nameKey, out values))
         {
             return(values);
         }
         LeftArray <KeyValue <string, Type> > columns = new LeftArray <KeyValue <string, Type> >(Fields.Length);
         foreach (Field field in Fields)
         {
             if (field.IsSqlColumn)
             {
                 ((Func <string, KeyValue <string, Type>[]>)AutoCSer.Sql.Metadata.GenericType.Get(field.DataType).GetDataColumnsMethod)(name + "_" + field.FieldInfo.Name);
             }
             else
             {
                 columns.Add(new KeyValue <string, Type>(name + "_" + field.FieldInfo.Name, field.DataType));
             }
         }
         values = columns.ToArray();
         dataColumns.Set(nameKey, values);
         return(values);
     }
     return(null);
 }
Exemplo n.º 8
0
 /// <summary>
 /// 安装下一个类型
 /// </summary>
 protected override void nextCreate()
 {
     if (!Type.Type.IsInterface)
     {
         LeftArray <MemberExpression> members = default(LeftArray <MemberExpression>);
         nodeTypeNames.Clear();
         bool isMember = true;
         foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Net.RemoteExpression.MemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.Instance, true, false))
         {
             if (!member.IsIgnore && member.CanGet)
             {
                 AutoCSer.Net.RemoteExpression.MemberAttribute attribute = member.GetAttribute <AutoCSer.Net.RemoteExpression.MemberAttribute>(false);
                 isMember &= addMember(ref members, new MemberExpression {
                     Attribute = attribute, Member = member, IntputParameters = member.IsField ? NullValue <ExpressionParameter> .Array : ExpressionParameter.Get(MethodParameter.Get(((PropertyInfo)member.Member).GetGetMethod(true), NullValue <Type> .Array))
                 });
             }
         }
         Members = members.ToArray();
         LeftArray <MethodExpression> methods = default(LeftArray <MethodExpression>);
         foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Net.RemoteExpression.MemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.Instance, false, true, false))
         {
             if (!member.IsIgnore)
             {
                 AutoCSer.Net.RemoteExpression.MemberAttribute attribute = member.GetAttribute <AutoCSer.Net.RemoteExpression.MemberAttribute>(false);
                 isMember &= addMember(ref methods, new MethodExpression {
                     Attribute = attribute, Method = member, IntputParameters = ExpressionParameter.Get(member.Parameters)
                 });
             }
         }
         Methods = methods.ToArray();
         LeftArray <StaticMemberExpression> staticMembers = default(LeftArray <StaticMemberExpression>);
         foreach (MemberIndex member in MemberIndex.GetStaticMembers <AutoCSer.Net.RemoteExpression.MemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.Static, true, false))
         {
             if (!member.IsIgnore && member.CanGet)
             {
                 AutoCSer.Net.RemoteExpression.MemberAttribute attribute = member.GetAttribute <AutoCSer.Net.RemoteExpression.MemberAttribute>(false);
                 isMember &= addMember(ref staticMembers, new StaticMemberExpression {
                     Attribute = attribute, Member = member, IntputParameters = NullValue <ExpressionParameter> .Array
                 });
             }
         }
         StaticMembers = staticMembers.ToArray();
         LeftArray <StaticMethodExpression> staticMethods = default(LeftArray <StaticMethodExpression>);
         foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Net.RemoteExpression.MemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.Static, false, true, false))
         {
             if (!member.IsIgnore)
             {
                 AutoCSer.Net.RemoteExpression.MemberAttribute attribute = member.GetAttribute <AutoCSer.Net.RemoteExpression.MemberAttribute>(false);
                 isMember &= addMember(ref staticMethods, new StaticMethodExpression {
                     Attribute = attribute, Method = member, IntputParameters = ExpressionParameter.Get(member.Parameters)
                 });
             }
         }
         StaticMethods = staticMethods.ToArray();
         if (isMember && (Members.Length | Methods.Length | StaticMemberCount) != 0)
         {
             create(true);
         }
     }
 }
Exemplo n.º 9
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected override void nextCreate()
            {
                LeftArray <RemoteMethod> remoteMethods = new LeftArray <RemoteMethod>();

                foreach (MethodIndex method in MethodIndex.GetMethods <AutoCSer.Net.TcpStaticServer.MethodAttribute>(Type, AutoCSer.Metadata.MemberFilters.Static, false, true, false))
                {
                    if (!method.Method.IsGenericMethodDefinition)
                    {
                        AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = method.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                        if (remoteAttribute != null)
                        {
                            MethodParameter[] parameters = method.Parameters;
                            if (parameters.Length >= 1 && parameters[0].ParameterType == Type.Type)
                            {
                                remoteMethods.Add(new RemoteMethod {
                                    Type = Type, ProjectParameter = AutoParameter, Method = method, MethodParameters = parameters, Attribute = remoteAttribute
                                });
                            }
                        }
                    }
                }
                RemoteMethods = remoteMethods.ToArray();

                setRemoteMemberCache();

                if ((RemoteMethods.Length | RemoteMembers.Length | RemoteCaches.Length) != 0)
                {
                    create(true);
                }
            }
Exemplo n.º 10
0
        /// <summary>
        /// 创建二进制数据反序列化
        /// </summary>
        /// <param name="attribute"></param>
        /// <returns></returns>
        internal TypeDeSerializer <valueType> CreateOnly(BinarySerializeAttribute attribute)
        {
            DeSerializeVersionField[] fieldArray = this.fields;
            LeftArray <FieldSize>     fixedFields = new LeftArray <FieldSize>(fieldArray.Length - noSerializeMemberCount), fields = new LeftArray <FieldSize>(fieldArray.Length - noSerializeMemberCount);
            LeftArray <AutoCSer.Metadata.FieldIndex> jsonFields = new LeftArray <AutoCSer.Metadata.FieldIndex>(0);
            int fixedSize = 0;

            AutoCSer.Algorithm.QuickSort.Sort(fieldArray, DeSerializeVersionField.MemberNameSort, 0, fieldArray.Length);
            if (attribute.GetIsMemberMap)
            {
                int memberIndex = 0;
                LeftArray <DeSerializeVersionField> newFields = new LeftArray <DeSerializeVersionField>(fieldArray.Length);
                foreach (DeSerializeVersionField field in fieldArray)
                {
                    if (field.Attribute != null)
                    {
                        if (field.Field.MemberIndex == memberIndex)
                        {
                            newFields.Add(field);
                        }
                        else
                        {
                            newFields.Add(field.Copy(memberIndex));
                        }
                    }
                    ++memberIndex;
                }
                fieldArray = newFields.ToArray();
            }
            else if (noSerializeMemberCount != 0)
            {
                fieldArray = fieldArray.getFindArray(value => value.Attribute != null);
            }
            foreach (DeSerializeVersionField field in fieldArray)
            {
                BinarySerializeMemberAttribute memberAttribute = field.Attribute;
                if (memberAttribute.GetIsJson)
                {
                    jsonFields.Add(field.Field);
                }
                else
                {
                    FieldSize value = new FieldSize(field.Field);
                    if (value.FixedSize == 0)
                    {
                        fields.Add(value);
                    }
                    else
                    {
                        fixedFields.Add(value);
                        fixedSize += value.FixedSize;
                    }
                }
            }
            int memberCountVerify;
            Fields <FieldSize> fieldSizes = new Fields <FieldSize>(ref fixedFields, ref fields, ref jsonFields, fixedSize, attribute.GetIsJson, out memberCountVerify);

            return(DeSerializer = new TypeDeSerializer <valueType>(GlobalVersion, ref fieldSizes, memberCountVerify));
        }
Exemplo n.º 11
0
            /// <summary>
            /// 安装完成处理
            /// </summary>
            protected override void onCreated()
            {
                int methodIndex = methods.Length;

                ViewMethods = new WebView.Generator {
                    AutoParameter = AutoParameter
                }.GetTypeAttributes()
                .getFind(value => typeof(AutoCSer.WebView.View <>).isAssignableFromGenericDefinition(value.Key) ? (value.Value == null || value.Value.IsAjax) : (value.Value != null && value.Value.IsAjax))
                .GetArray(value => new ViewMethod
                {
                    MethodIndex       = methodIndex++,
                    WebViewMethodType = value.Key,
                    Attribute         = value.Value ?? AutoCSer.WebView.View.DefaultAttribute,
                    CallName          = new WebView.Generator.ViewType {
                        Type = value.Key, Attribute = value.Value ?? AutoCSer.WebView.View.DefaultAttribute, DefaultNamespace = AutoParameter.DefaultNamespace + ".", IgnoreCase = AutoParameter.WebConfig.IgnoreCase
                    }.CallName,
                    IsAwaitMethod = WebView.Generator.AjaxAwaitMethodTypes.Contains(value.Key)
                });
                if (methodIndex != 0)
                {
                    LeftArray <KeyValuePair <string, int> > names = (Methods = methods.ToArray()).getArray(value => value.CallName)
                                                                    .concat(ViewMethods.getArray(value => value.CallName))
                                                                    .groupCount(value => value)
                                                                    .getFind(value => value.Value != 1);
                    if (names.Length == 0)
                    {
                        IsPubError = false;
                        ParameterBuilder parameterBuilder = new ParameterBuilder();
                        foreach (AjaxMethod method in Methods)
                        {
                            if (!IsPubError)
                            {
                                IsPubError = method.CallName == AutoCSer.WebView.AjaxBase.PubErrorCallName;
                            }
                            parameterBuilder.Add(method);
                        }
                        ParameterTypes = parameterBuilder.Get();
                        MethodCount    = Methods.Length + ViewMethods.Length + (IsPubError ? 0 : 1);
                        _code_.Length  = 0;
                        create(false);
                        Coder.Add("namespace " + AutoParameter.DefaultNamespace + @"
{
" + _code_.ToString() + @"
}");
                        typeScript.OnCreated();
                    }
                    else
                    {
                        Messages.Add(@"AJAX调用名称冲突:
" + names.JoinString(@"
", value => value.Key + "[" + value.Value.toString() + "]"));
                    }
                }
            }
Exemplo n.º 12
0
        /// <summary>
        /// 获取服务端推送信息
        /// </summary>
        /// <param name="onPush"></param>
        /// <returns></returns>
        public AutoCSer.Net.TcpServer.KeepCallback[] GetCustomPush(Action <CustomPushResult> onPush)
        {
            LeftArray <AutoCSer.Net.TcpServer.KeepCallback> keepCallbacks = new LeftArray <AutoCSer.Net.TcpServer.KeepCallback>(clients.Count);

            foreach (KeyValuePair <HashString, TcpClient> tcpClient in clients)
            {
                keepCallbacks.Add(tcpClient.Value.TcpInternalClient.customPush(customData => onPush(new CustomPushResult {
                    ServerName = tcpClient.Key.String, Data = customData
                })));
            }
            return(keepCallbacks.ToArray());
        }
Exemplo n.º 13
0
        /// <summary>
        /// 创建JS脚本文件目录信息
        /// </summary>
        /// <param name="directoryInfo"></param>
        /// <param name="isBoot"></param>
        /// <param name="lastWriteTime"></param>
        /// <returns></returns>
        private static Directory js(DirectoryInfo directoryInfo, bool isBoot, DateTime lastWriteTime)
        {
            Directory directory = new Directory();

            DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
            if (directoryInfos.Length != 0)
            {
                LeftArray <Directory> directorys = new LeftArray <Directory>(directoryInfos.Length);
                foreach (DirectoryInfo nextDirectoryInfo in directoryInfos)
                {
                    if (!isBoot || string.Compare(nextDirectoryInfo.Name, "js", true) != 0)
                    {
                        Directory nextDirectory = js(nextDirectoryInfo, false, lastWriteTime);
                        if (nextDirectory.Name != null)
                        {
                            directorys.Add(nextDirectory);
                        }
                    }
                }
                if (directorys.Length != 0)
                {
                    directory.Directorys = directorys.ToArray();
                }
            }
            FileInfo[] files = directoryInfo.GetFiles("*.js");
            if (files.Length != 0)
            {
                LeftArray <FileTime> fileTimes = new LeftArray <FileTime>(files.Length);
                foreach (FileInfo file in files)
                {
                    if (file.LastWriteTimeUtc > lastWriteTime && !file.Name.EndsWith(".page.js", StringComparison.Ordinal))
                    {
                        fileTimes.Add(new FileTime(file));
                    }
                }
                if (fileTimes.Length != 0)
                {
                    directory.Files = fileTimes.ToArray();
                }
            }
            if (directory.Files != null || directory.Directorys != null)
            {
                directory.Name = directoryInfo.Name;
            }
            return(directory);
        }
Exemplo n.º 14
0
            /// <summary>
            /// 设置远程缓存成员集合
            /// </summary>
            protected void setRemoteMemberCache()
            {
                LeftArray <RemoteMember> remoteMembers = new LeftArray <RemoteMember>();

                foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Sql.RemoteMemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstanceProperty, true, false))
                {
                    if (member.CanGet)
                    {
                        AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                        if (remoteAttribute != null)
                        {
                            if (member.IsField || ((PropertyInfo)member.Member).GetIndexParameters().Length == 0)
                            {
                                remoteMembers.Add(new RemoteMember {
                                    Member = member, Attribute = remoteAttribute
                                });
                            }
                        }
                    }
                }
                foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Sql.RemoteMemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstance, false, true, false))
                {
                    if (!member.Method.IsGenericMethodDefinition)
                    {
                        AutoCSer.Sql.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Sql.RemoteMemberAttribute>(false);
                        if (remoteAttribute != null)
                        {
                            remoteMembers.Add(new RemoteMember {
                                Method = member, Attribute = remoteAttribute
                            });
                        }
                    }
                }
                RemoteMembers = remoteMembers.ToArray();

                RemoteCacheBuilder cacheBuilder = new RemoteCacheBuilder();

                foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Sql.RemoteMemberCacheAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstance, true, false))
                {
                    cacheBuilder.Push(member);
                }
                RemoteCaches = cacheBuilder.Caches.ToArray();
            }
Exemplo n.º 15
0
        /// <summary>
        /// 创建JS脚本文件目录信息
        /// </summary>
        /// <param name="directoryInfo"></param>
        /// <param name="lastWriteTime"></param>
        /// <param name="fileNames"></param>
        /// <returns></returns>
        private static Directory js(DirectoryInfo directoryInfo, DateTime lastWriteTime, string[] fileNames)
        {
            Directory            directory = new Directory();
            LeftArray <FileTime> fileTimes = new LeftArray <FileTime>(fileNames.Length);
            string path = directoryInfo.fullName();

            foreach (string fileName in fileNames)
            {
                FileInfo file = new FileInfo(path + fileName);
                if (file.Exists && file.LastWriteTimeUtc > lastWriteTime)
                {
                    fileTimes.Add(new FileTime(file));
                }
            }
            if (fileTimes.Length != 0)
            {
                directory.Files = fileTimes.ToArray();
                directory.Name  = directoryInfo.Name;
            }
            return(directory);
        }
Exemplo n.º 16
0
            /// <summary>
            /// 安装完成处理
            /// </summary>
            protected override void onCreated()
            {
                if (methods.Length != 0)
                {
                    CallMethods = Methods = methods.ToArray();
                    int methodIndex = 0;
                    ParameterBuilder parameterBuilder = new ParameterBuilder();
                    foreach (CallMethod method in Methods)
                    {
                        method.MethodIndex = methodIndex++;
                        parameterBuilder.Add(method);
                    }
                    ParameterTypes = parameterBuilder.Get();

                    _code_.Length = 0;
                    create(false);
                    Coder.Add("namespace " + AutoParameter.DefaultNamespace + @"
{
" + _code_.ToString() + @"
}");
                }
            }
Exemplo n.º 17
0
                /// <summary>
                /// 获取成员集合
                /// </summary>
                /// <param name="type"></param>
                /// <returns></returns>
                private static cache getCache(Type type)
                {
                    cache members;

                    if (!memberCache.TryGetValue(type, out members))
                    {
                        LeftArray <RemoteLink> remoteMembers = new LeftArray <RemoteLink>(0);
                        foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(type, AutoCSer.Metadata.MemberFilters.Instance, true, false))
                        {
                            if (member.CanGet)
                            {
                                AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null)
                                {
                                    remoteMembers.Add(new RemoteLink {
                                        Member = member, PropertyParameters = member.IsField ? EmptyArray <MethodParameter> .Array : MethodParameter.Get(((PropertyInfo)member.Member).GetGetMethod(true), EmptyArray <Type> .Array), Attribute = remoteAttribute
                                    });
                                }
                            }
                        }
                        foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(type, AutoCSer.Metadata.MemberFilters.Instance, false, true, false))
                        {
                            if (!member.Method.IsGenericMethodDefinition)
                            {
                                AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null)
                                {
                                    remoteMembers.Add(new RemoteLink {
                                        Method = member, Attribute = remoteAttribute
                                    });
                                }
                            }
                        }
                        memberCache.Add(type, members = new cache {
                            Members = remoteMembers.ToArray(), Caches = MemberIndex.GetMembers <AutoCSer.Net.TcpStaticServer.RemoteLinkAttribute>(type, AutoCSer.Metadata.MemberFilters.Instance, true, false)
                        });
                    }
                    return(members);
                }
Exemplo n.º 18
0
        /// <summary>
        /// 安装入口
        /// </summary>
        /// <param name="parameter">安装参数</param>
        /// <returns>是否安装成功</returns>
        public bool Run(ProjectParameter parameter)
        {
            if (parameter != null)
            {
                if (parameter.IsAutoCSerCodeGenerator || parameter.IsCustomCodeGenerator)
                {
                    LeftArray <Definition> definitions = (parameter.IsCustomCodeGenerator ? parameter.Assembly : ProjectParameter.CurrentAssembly).GetTypes().getArray(type => new Definition {
                        Type = type, Auto = type.customAttribute <GeneratorAttribute>(), Parameter = parameter
                    })
                                                         .getFind(type => type.Auto != null && type.Auto.IsTemplate)// && type.Auto.DependType == typeof(cSharper)
                                                         .Sort((left, right) => string.CompareOrdinal(left.Type.FullName, right.Type.FullName));
                    LeftArray <string> codes = new LeftArray <string>(definitions.Length);
                    foreach (Definition definition in definitions)
                    {
                        codes.Add(definition.ToString());
                        if (Messages.IsError)
                        {
                            return(false);
                        }
                    }
#if DotNetStandard
                    string path = new System.IO.FileInfo(parameter.AssemblyPath).Directory.fullName();
                    copyDotNetCoreJson(path, "AutoCSer.CodeGenerator.deps.json");
                    copyDotNetCoreJson(path, "AutoCSer.CodeGenerator.runtimeconfig.dev.json");
                    copyDotNetCoreJson(path, "AutoCSer.CodeGenerator.runtimeconfig.json");
#endif
                    string fileName = parameter.ProjectPath + @"{AutoCSer}.CSharper.cs";
                    if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.ToArray()) + Coder.FileEndCode))
                    {
                        Messages.Error(fileName + " 被修改");
                        return(false);
                    }
                }
                return(true);
            }
            return(false);
        }
Exemplo n.º 19
0
                /// <summary>
                /// 添加远程缓存成员
                /// </summary>
                /// <param name="member"></param>
                internal void Push(MemberIndex member)
                {
                    members.Add(new RemoteLinkMember {
                        Member = member, Attribute = member.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteLinkAttribute>(false), Index = members.Length
                    });
                    cache cache = getCache(member.MemberSystemType);

                    if (cache.Members.Length != 0)
                    {
                        RemoteLinkMember[] memberArray = members.ToArray();
                        foreach (RemoteLink nextMember in cache.Members)
                        {
                            Caches.Add(new RemoteLink {
                                Members = memberArray, Method = nextMember.Method, Member = nextMember.Member, PropertyParameters = nextMember.PropertyParameters, Attribute = nextMember.Attribute
                            });
                        }
                    }
                    foreach (MemberIndex nextMember in cache.Caches)
                    {
                        bool isMember = true;
                        foreach (RemoteLinkMember cacheMember in members)
                        {
                            if (cacheMember.Member.MemberSystemType == nextMember.MemberSystemType)
                            {
                                Messages.Message("远程调用链类型循环引用 " + members.JoinString(" . ", value => value.Member.MemberType.FullName + " " + value.Member.MemberName) + " . " + nextMember.MemberType.FullName + " " + nextMember.MemberName);
                                isMember = false;
                                break;
                            }
                        }
                        if (isMember)
                        {
                            Push(nextMember);
                        }
                    }
                    --members.Length;
                }
Exemplo n.º 20
0
        /// <summary>
        /// 创建JS脚本文件类库目录信息
        /// </summary>
        /// <param name="directoryInfo"></param>
        /// <param name="lastWriteTime"></param>
        /// <returns></returns>
        private static Directory loadJs(DirectoryInfo directoryInfo, DateTime lastWriteTime)
        {
            DirectoryInfo jsDirectory = new DirectoryInfo(directoryInfo.fullName() + "js");
            Directory     directory   = new Directory();

            if (jsDirectory.Exists)
            {
                DirectoryInfo[] directoryInfos = jsDirectory.GetDirectories();
                if (directoryInfos.Length != 0)
                {
                    LeftArray <Directory> directorys = new LeftArray <Directory>(directoryInfos.Length);
                    foreach (DirectoryInfo nextDirectoryInfo in directoryInfos)
                    {
                        Directory nextDirectory;
                        switch (nextDirectoryInfo.Name)
                        {
                        case "ace": nextDirectory = js(nextDirectoryInfo, lastWriteTime, new string[] { "ace.js" }); break;

                        case "mathJax": nextDirectory = js(nextDirectoryInfo, lastWriteTime, new string[] { "MathJax.js" }); break;

                        case "highcharts": nextDirectory = js(nextDirectoryInfo, false, lastWriteTime); break;

                        default: AutoCSer.Log.Pub.Log.add(AutoCSer.Log.LogType.Error, "未知的js文件夹 " + nextDirectoryInfo.fullName()); nextDirectory = new Directory(); break;
                        }
                        if (nextDirectory.Name != null)
                        {
                            directorys.Add(nextDirectory);
                        }
                    }
                    if (directorys.Length != 0)
                    {
                        directory.Directorys = directorys.ToArray();
                    }
                }
                FileInfo[] files = jsDirectory.GetFiles("*.js");
                if (files.Length != 0)
                {
                    LeftArray <FileTime> fileTimes = new LeftArray <FileTime>(files.Length);
                    FileTime             loadFileTime = new FileTime(), loadPageFileTime = new FileTime();
                    foreach (FileInfo file in files)
                    {
                        if (file.LastWriteTimeUtc > lastWriteTime)
                        {
                            if (file.Name == "load.js")
                            {
                                loadFileTime = new FileTime(file);
                            }
                            else if (file.Name == "loadPage.js")
                            {
                                loadPageFileTime = new FileTime(file);
                            }
                            else
                            {
                                fileTimes.Add(new FileTime(file));
                            }
                        }
                    }
                    if (loadFileTime.FileName != null)
                    {
                        fileTimes.Add(loadFileTime);
                    }
                    if (loadPageFileTime.FileName != null)
                    {
                        fileTimes.Add(loadPageFileTime);
                    }
                    if (fileTimes.Length != 0)
                    {
                        directory.Files = fileTimes.ToArray();
                    }
                }
                if (directory.Files != null || directory.Directorys != null)
                {
                    directory.Name = jsDirectory.Name;
                    directory      = new Directory {
                        Name = directoryInfo.Name, Directorys = new Directory[] { directory }
                    };
                }
            }
            return(directory);
        }
Exemplo n.º 21
0
        /// <summary>
        /// 客户端创建目录信息
        /// </summary>
        /// <param name="directoryInfo"></param>
        /// <param name="lastWriteTime"></param>
        /// <param name="searchPatterns"></param>
        /// <returns></returns>
        private static Directory create(DirectoryInfo directoryInfo, DateTime lastWriteTime, string[] searchPatterns)
        {
            Directory directory = new Directory();

            DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
            if (directoryInfos.Length != 0)
            {
                LeftArray <Directory> directorys = new LeftArray <Directory>(directoryInfos.Length);
                foreach (DirectoryInfo nextDirectoryInfo in directoryInfos)
                {
                    Directory nextDirectory = create(nextDirectoryInfo, lastWriteTime, searchPatterns);
                    if (nextDirectory.Name != null)
                    {
                        directorys.Add(nextDirectory);
                    }
                }
                if (directorys.Length != 0)
                {
                    directory.Directorys = directorys.ToArray();
                }
            }
            if (searchPatterns == null)
            {
                FileInfo[] files = directoryInfo.GetFiles();
                if (files.Length != 0)
                {
                    LeftArray <FileTime> fileTimes = new LeftArray <FileTime>(files.Length);
                    foreach (FileInfo file in files)
                    {
                        if (file.LastWriteTimeUtc > lastWriteTime)
                        {
                            fileTimes.Add(new FileTime(file));
                        }
                    }
                    if (fileTimes.Length != 0)
                    {
                        directory.Files = fileTimes.ToArray();
                    }
                }
            }
            else
            {
                LeftArray <FileTime> fileTimes = new LeftArray <FileTime>();
                foreach (string searchPattern in searchPatterns)
                {
                    foreach (FileInfo file in directoryInfo.GetFiles(searchPattern))
                    {
                        if (file.LastWriteTimeUtc > lastWriteTime)
                        {
                            fileTimes.Add(new FileTime(file));
                        }
                    }
                }
                if (fileTimes.Length != 0)
                {
                    directory.Files = fileTimes.ToArray();
                }
            }
            if (directory.Files != null || directory.Directorys != null)
            {
                directory.Name = directoryInfo.Name;
            }
            return(directory);
        }
Exemplo n.º 22
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected override void nextCreate()
            {
                MemberIndex             identity = Identity = null;
                int                     isIdentityCase = SqlStreamTypeCount = NowTimeArraySize = 0;
                LeftArray <MemberIndex> members = default(LeftArray <MemberIndex>), primaryKeys = default(LeftArray <MemberIndex>), indexMembers = default(LeftArray <MemberIndex>);
                LeftArray <CountMember> counterMembers = default(LeftArray <CountMember>);
                LeftArray <MemberIndex> nowTimeMembers = default(LeftArray <MemberIndex>);
                LeftArray <LogMember>   logMembers     = new LeftArray <LogMember>();
                LeftArray <string>      strings        = default(LeftArray <string>);

                IsLogProxyMember = false;
                foreach (MemberIndex member in MemberIndex.GetMembers(Type, Attribute.MemberFilters))
                {
                    if (!member.IsIgnore)
                    {
                        AutoCSer.Sql.MemberAttribute attribute = member.GetAttribute <AutoCSer.Sql.MemberAttribute>(false);
                        bool isMember = attribute == null || attribute.IsSetup;
                        if (Attribute.LogServerName != null)
                        {
                            AutoCSer.Sql.LogAttribute logAttribute = member.GetAttribute <AutoCSer.Sql.LogAttribute>(false);
                            if (logAttribute != null)
                            {
                                LogMember logMember = new LogMember {
                                    Member = member, Attribute = logAttribute, MemberAttribute = attribute
                                };
                                logMembers.Add(logMember);
                                if (logMember.IsProxy)
                                {
                                    IsLogProxyMember = true;
                                }
                                if (!logAttribute.IsMember)
                                {
                                    isMember = false;
                                }
                            }
                        }
                        if (isMember)
                        {
                            members.Add(member);
                            if (attribute != null)
                            {
                                if (attribute.IsMemberIndex)
                                {
                                    indexMembers.Add(member);
                                }
                                if (attribute.IsNowTime && member.MemberSystemType == typeof(DateTime))
                                {
                                    nowTimeMembers.Add(member);
                                    if (member.MemberIndex >= NowTimeArraySize)
                                    {
                                        NowTimeArraySize = member.MemberIndex + 1;
                                    }
                                }
                                if (attribute.PrimaryKeyIndex != 0)
                                {
                                    primaryKeys.Add(member);
                                }
                                if (attribute.IsIdentity)
                                {
                                    Identity = member;
                                }
                            }
                            if (Identity == null)
                            {
                                if (isIdentityCase == 0 && member.MemberName == AutoCSer.Sql.Field.IdentityName)
                                {
                                    identity       = member;
                                    isIdentityCase = 1;
                                }
                                else if (identity == null && member.MemberName.Length == AutoCSer.Sql.Field.IdentityName.Length && member.MemberName.ToLower() == AutoCSer.Sql.Field.IdentityName)
                                {
                                    identity = member;
                                }
                            }
                            AutoCSer.Sql.CountAttribute countAttribute = member.GetAttribute <AutoCSer.Sql.CountAttribute>(false);
                            if (countAttribute != null)
                            {
                                counterMembers.Add(new CountMember {
                                    Member = member, Attribute = countAttribute
                                });
                            }
                            if (member.MemberSystemType == typeof(string) && (attribute == null || (attribute.MaxStringLength == 0 && !attribute.IsIgnoreMaxStringLength)))
                            {
                                strings.Add(member.MemberName);
                            }
                        }
                    }
                }
                if (Identity == null)
                {
                    Identity = identity;
                }
                if (Attribute.LogServerName == null)
                {
                    LogMembers = NullValue <LogMember> .Array;
                }
                else
                {
                    LogMembers = logMembers.ToArray();
                    if (!Attribute.IsDefaultSerialize && Attribute.IsLogMemberMap)
                    {
                        AutoCSer.BinarySerialize.SerializeAttribute dataSerialize = Type.Type.customAttribute <AutoCSer.BinarySerialize.SerializeAttribute>();
                        if (dataSerialize != null && !dataSerialize.IsMemberMap)
                        {
                            Messages.Message("数据库日志流处理类型 " + Type.FullName + " 序列化不支持成员位图");
                        }
                    }
                    foreach (LogMember member in LogMembers)
                    {
                        if (member.Attribute.CountType != null)
                        {
                            ++SqlStreamTypeCount;
                        }
                    }
                }
                CounterMembers = counterMembers.ToArray();
                NowTimeMembers = nowTimeMembers.ToArray();
                if (strings.Length != 0)
                {
                    Messages.Message(Type.FullName + " 字符串字段缺少最大长度限制 " + string.Join(",", strings.ToArray()));
                }
                WebPaths.Length = 0;
                ListArray <WebPathType> types;

                if (webPathTypes == null)
                {
                    webPathTypes = new Dictionary <Type, ListArray <WebPathType> >();
                    foreach (Type nextType in AutoParameter.Types)
                    {
                        AutoCSer.WebView.PathAttribute webPath = nextType.customAttribute <AutoCSer.WebView.PathAttribute>();
                        if (webPath != null && webPath.Type != null && webPath.MemberName != null)
                        {
                            FieldInfo[] fields = nextType.GetFields(BindingFlags.Instance | BindingFlags.Public);
                            if (fields.Length != 0)
                            {
                                if (!webPathTypes.TryGetValue(webPath.Type, out types))
                                {
                                    webPathTypes.Add(webPath.Type, types = new ListArray <WebPathType>());
                                }
                                int memberIndex = fields.Length;
                                types.Add(new WebPathType {
                                    MemberType = nextType, Attribute = webPath, Members = fields.getArray(value => new MemberIndex(value, --memberIndex))
                                });
                            }
                        }
                    }
                }
                if (webPathTypes.TryGetValue(Type, out types))
                {
                    foreach (WebPathType webPath in types)
                    {
                        MemberIndex[] fields = webPath.CheckMembers(ref members);
                        if (fields != null)
                        {
                            WebPaths.Add(new WebPathType {
                                MemberType = webPath.MemberType, Attribute = webPath.Attribute, Members = fields
                            });
                        }
                    }
                }
                dataPrimaryKey.Run(Type, PrimaryKeys = primaryKeys.ToArray());
                if (Attribute.IsUpdateMemberMap)
                {
                    if (Identity == null)
                    {
                        UpdateMembers = members.GetFindArray(value => Array.IndexOf(PrimaryKeys, value) < 0);
                    }
                    else
                    {
                        UpdateMembers = members.GetFindArray(value => value != Identity);
                    }
                    if (indexMembers.Length != 0)
                    {
                        indexMembers.Remove(value => Array.IndexOf(UpdateMembers, value) >= 0);
                    }
                    if (indexMembers.Length == 0)
                    {
                        indexMembers.Set(UpdateMembers);
                    }
                    else
                    {
                        indexMembers.Add(UpdateMembers);
                    }
                }
                else
                {
                    UpdateMembers = NullValue <MemberIndex> .Array;
                }
                IndexMembers = indexMembers.ToArray();
                create(true);
            }
Exemplo n.º 23
0
            /// <summary>
            /// 安装完成处理
            /// </summary>
            protected unsafe override void onCreated()
            {
                StringArray           clientCallCode = new StringArray();
                LeftArray <TcpMethod> methods        = new LeftArray <TcpMethod>();

                TcpMethod[]      methodIndexs;
                ParameterBuilder parameterBuilder = new ParameterBuilder();
                int staticMethodIndex             = 0;

                foreach (Server server in servers.Values)
                {
                    if (server.IsMethod)
                    {
                        IsAllType = false;
                        TcpServerAttributeType = server.AttributeType == null || server.AttributeType.Type == null ? null : server.AttributeType.FullName;
                        ServiceAttribute       = server.Attribute;
                        foreach (ServerType serverType in server.Types)
                        {
                            methods.Add(serverType.Methods);
                        }
                        methodIndexs   = methods.ToArray();
                        methods.Length = 0;
                        methodIndexs   = TcpMethod.CheckIdentity(methodIndexs, getRememberIdentityName(), method => method.Method.MethodKeyFullName);
                        if (methodIndexs == null)
                        {
                            return;
                        }
                        int index = 0;
                        IsVerifyMethod = IsCallQueue = false;
                        parameterBuilder.Clear(ServiceAttribute.IsSimpleSerialize);
                        foreach (TcpMethod method in methodIndexs)
                        {
                            method.MethodIndex       = index++;
                            method.StaticMethodIndex = ++staticMethodIndex;
                            if (!method.IsNullMethod)
                            {
                                if (IsVerifyMethod)
                                {
                                    method.Attribute.IsVerifyMethod = false;
                                }
                                else if (method.IsVerifyMethod)
                                {
                                    IsVerifyMethod = true;
                                    if (method.MethodType == server.AttributeType && server.IsTimeVerify)
                                    {
                                        TimeVerifyMethod = method;
                                    }
                                }
                                parameterBuilder.Add(method);

                                IsCallQueue |= method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.Queue;
                            }
                        }
                        ParameterTypes = parameterBuilder.Get();
                        foreach (ServerType serverType in server.Types)
                        {
                            if (serverType.Methods.Length != 0)
                            {
                                Type = serverType.Type;
                                //TimeVerifyType = Type == server.AttributeType && server.IsTimeVerify ? Type : ExtensionType.Null;
                                Attribute    = serverType.Attribute ?? server.Attribute;
                                MethodIndexs = serverType.Methods.ToArray();
                                CSharpTypeDefinition definition = new CSharpTypeDefinition(Type, true, false);
                                _code_.Length = 0;
                                create(false);
                                Coder.Add(definition.Start + _partCodes_["SERVERCALL"] + definition.End);
                                if (ServiceAttribute.IsSegmentation)
                                {
                                    clientCallCode.Add(definition.Start + _partCodes_["CLIENTCALL"] + definition.End);
                                }
                                else
                                {
                                    Coder.Add(definition.Start + _partCodes_["CLIENTCALL"] + definition.End);
                                }
                            }
                        }
                        Type           = server.AttributeType;
                        Attribute      = server.Attribute;
                        IsAllType      = true;
                        MethodIndexs   = methodIndexs;
                        methods.Length = 0;
                        _code_.Length  = 0;
                        create(false);
                        Coder.Add(@"
namespace " + AutoParameter.DefaultNamespace + "." + serverPart + @"
{
" + _partCodes_["SERVER"] + @"
}");
                        string clientCode = @"
namespace " + AutoParameter.DefaultNamespace + "." + SimpleClientPart + @"
{
" + _partCodes_["CLIENT"] + @"
}";
                        if (ServiceAttribute.IsSegmentation)
                        {
                            clientCallCode.Add(clientCode);
                            string fileName = AutoParameter.ProjectPath + "{" + AutoParameter.DefaultNamespace + "}.TcpStaticSimpleServer." + ServiceAttribute.ServerName + ".Client.cs";
                            clientCode = Coder.WarningCode + clientCallCode.ToString() + Coder.FileEndCode;
                            if (Coder.WriteFile(fileName, clientCode))
                            {
                                if (ServiceAttribute.ClientSegmentationCopyPath != null)
                                {
                                    string copyFileName = ServiceAttribute.ClientSegmentationCopyPath + "{" + AutoParameter.DefaultNamespace + "}.TcpStaticSimpleServer." + ServiceAttribute.ServerName + ".Client.cs";
                                    if (Coder.WriteFile(copyFileName, clientCode))
                                    {
                                        Messages.Message(copyFileName + " 被修改");
                                    }
                                }
                                Messages.Message(fileName + " 被修改");
                            }
                            clientCallCode.Length = 0;
                        }
                        else
                        {
                            Coder.Add(clientCode);
                        }
                    }
                }
            }
Exemplo n.º 24
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected unsafe override void nextCreate()
            {
                if (Type.Type.IsClass && !Type.Type.IsAbstract)
                {
                    LeftArray <TcpMethod> methodArray = new LeftArray <TcpMethod>(Metadata.MethodIndex.GetMethods <AutoCSer.Net.TcpServer.MethodAttribute>(Type, Attribute.GetMemberFilters, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute)
                                                                                  .getFind(value => !value.Method.IsGenericMethod)
                                                                                  .getArray(value => new TcpMethod
                    {
                        Method           = value,
                        MethodType       = Type,
                        ServiceAttribute = Attribute
                    }));
                    foreach (MemberIndexInfo member in MemberIndexGroup.Get <AutoCSer.Net.TcpServer.MethodAttribute>(Type, Attribute.GetMemberFilters, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute))
                    {
                        if (member.IsField)
                        {
                            FieldInfo field     = (FieldInfo)member.Member;
                            TcpMethod getMethod = new TcpMethod
                            {
                                Method           = new Metadata.MethodIndex(field, true),
                                MemberIndex      = member,
                                MethodType       = Type,
                                ServiceAttribute = Attribute
                            };
                            if (!getMethod.Attribute.IsOnlyGetMember)
                            {
                                getMethod.SetMethod = new TcpMethod {
                                    Method = new MethodIndex(field, false), MemberIndex = member, MethodType = Type, ServiceAttribute = Attribute
                                };
                            }
                            methodArray.Add(getMethod);
                            if (getMethod.SetMethod != null)
                            {
                                methodArray.Add(getMethod.SetMethod);
                            }
                        }
                        else if (member.CanGet)
                        {
                            PropertyInfo property  = (PropertyInfo)member.Member;
                            TcpMethod    getMethod = new TcpMethod
                            {
                                Method           = new MethodIndex(property, true),
                                MemberIndex      = member,
                                MethodType       = Type,
                                ServiceAttribute = Attribute
                            };
                            if (member.CanSet && !getMethod.Attribute.IsOnlyGetMember)
                            {
                                getMethod.SetMethod = new TcpMethod {
                                    Method = new MethodIndex(property, false), MemberIndex = member, MethodType = Type, ServiceAttribute = Attribute
                                };
                            }
                            methodArray.Add(getMethod);
                            if (getMethod.SetMethod != null)
                            {
                                methodArray.Add(getMethod.SetMethod);
                            }
                        }
                    }
                    MethodIndexs = methodArray.ToArray();
                    MethodIndexs = TcpMethod.CheckIdentity(MethodIndexs, Attribute.CommandIdentityEnmuType, getRememberIdentityName(Attribute.CommandIdentityEnmuType == null ? Attribute.GenericType ?? Type : null), method => method.Method.MethodKeyFullName);
                    if (MethodIndexs == null)
                    {
                        return;
                    }
                    int methodIndex = CallQueueCount = 0;
                    IsVerifyMethod  = false;
                    IsCallQueueLink = ServiceAttribute.GetRemoteExpressionServerTask == Net.TcpServer.ServerTaskType.QueueLink;
                    if (ServiceAttribute.GetRemoteExpressionServerTask == Net.TcpServer.ServerTaskType.Queue || ServiceAttribute.GetRemoteExpressionServerTask == Net.TcpServer.ServerTaskType.QueueLink)
                    {
                        CallQueueCount = (int)ServiceAttribute.GetRemoteExpressionCallQueueIndex + 1;
                    }
                    ParameterBuilder parameterBuilder = new ParameterBuilder {
                        IsSimpleSerialize = Attribute.IsSimpleSerialize
                    };
                    QueueTypeBuilder queueTypeBuilder = new QueueTypeBuilder();
                    foreach (TcpMethod method in MethodIndexs)
                    {
                        method.MethodIndex = methodIndex++;
                        if (!method.IsNullMethod)
                        {
                            if (IsVerifyMethod)
                            {
                                method.Attribute.IsVerifyMethod = false;
                            }
                            else if (method.IsVerifyMethod)
                            {
                                IsVerifyMethod            = true;
                                IsSynchronousVerifyMethod = method.Attribute.ServerTaskType == AutoCSer.Net.TcpServer.ServerTaskType.Synchronous && !method.IsAsynchronousCallback;
                                //method.Attribute.ServerTaskType = Net.TcpServer.ServerTaskType.Synchronous;
                            }
                            parameterBuilder.Add(method);
                            queueTypeBuilder.Add(method);

                            IsCallQueueLink |= method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.QueueLink;
                            if (method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.Queue || method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.QueueLink)
                            {
                                CallQueueCount = Math.Max((int)method.Attribute.GetServerQueueIndex + 1, CallQueueCount);
                            }
                            MaxTimeoutSeconds = Math.Max(MaxTimeoutSeconds, method.Attribute.GetClientTimeoutSeconds);
                            //if (method.IsAsynchronousCallback && method.Attribute.ServerTaskType != Net.TcpServer.ServerTaskType.Synchronous)
                            //{
                            //    Messages.Message("异步函数警告" + method.MemberFullName);
                            //}
                        }
                    }
                    ParameterTypes       = parameterBuilder.Get();
                    ServerCallQueueTypes = queueTypeBuilder.Get();
                    //TcpMethod[] methodIndexs = MethodIndexs.getFindArray(value => !value.IsNullMethod);
                    if (ServiceAttribute.GetIsSegmentation)
                    {
                        IsClientCode        = false;
                        create(IsServerCode = true);
                        CSharpTypeDefinition definition = new CSharpTypeDefinition(Type, IsClientCode = true, false, Type.Type.Namespace + ".TcpClient");
                        _code_.Length = 0;
                        _code_.Add(definition.Start);
                        create(IsServerCode = false);
                        _code_.Add(definition.End);
                        string fileName   = AutoParameter.ProjectPath + "{" + AutoParameter.DefaultNamespace + "}.TcpInternalServer." + ServerName + ".Client.cs";
                        string clientCode = Coder.WarningCode + _code_.ToString() + Coder.FileEndCode;
                        if (Coder.WriteFile(fileName, clientCode))
                        {
                            if (ServiceAttribute.ClientSegmentationCopyPath != null)
                            {
                                string copyFileName = ServiceAttribute.ClientSegmentationCopyPath + "{" + AutoParameter.DefaultNamespace + "}.TcpInternalServer." + ServerName + ".Client.cs";
                                if (Coder.WriteFile(copyFileName, clientCode))
                                {
                                    Messages.Message(copyFileName + " 被修改");
                                }
                            }
                            Messages.Message(fileName + " 被修改");
                        }
                    }
                    else
                    {
                        create(IsServerCode = IsClientCode = true);
                    }
                }
            }
Exemplo n.º 25
0
        /// <summary>
        /// 根据表格名称获取表格信息
        /// </summary>
        /// <param name="connection">SQL连接</param>
        /// <param name="tableName">表格名称</param>
        /// <returns>表格信息</returns>
        internal override TableColumnCollection GetTable(DbConnection connection, string tableName)
        {
            if (isTable(connection, tableName))
            {
                using (DbCommand command = getCommand(connection, @"describe `" + tableName + @"`;
show index from `" + tableName + @"`;", CommandType.Text))
                    using (DbDataReader reader = command.ExecuteReader(CommandBehavior.Default))
                    {
                        Column identity = null;
                        Dictionary <HashString, Column> columns = DictionaryCreator.CreateHashString <Column>();
                        LeftArray <Column> primaryKeys          = default(LeftArray <Column>);
                        Dictionary <HashString, ListArray <IndexColumn> > indexs = null;
                        while (reader.Read())
                        {
                            string key          = (string)reader["Key"];
                            object defaultValue = reader["Default"];
                            Column column       = new Column
                            {
                                Name         = (string)reader["Field"],
                                DefaultValue = defaultValue == DBNull.Value ? null : (string)defaultValue,
                                IsNull       = (string)reader["Null"] == "YES",
                            };
                            column.DbType = DbType.FormatDbType((string)reader["Type"], out column.Size);
                            columns.Add(column.Name, column);
                            if (key == "PRI")
                            {
                                primaryKeys.Add(column);
                            }
                        }
                        if (reader.NextResult())
                        {
                            indexs = DictionaryCreator.CreateHashString <ListArray <IndexColumn> >();
                            ListArray <IndexColumn> indexColumns;
                            while (reader.Read())
                            {
                                string      name        = (string)reader["Key_name"];
                                IndexColumn indexColumn = new IndexColumn
                                {
                                    Column = columns[(string)reader["Column_name"]],
                                    Index  = (int)(long)reader["Seq_in_index"],
                                    IsNull = (string)reader["Null"] == "YES"
                                };
                                HashString nameKey = name;
                                if (!indexs.TryGetValue(nameKey, out indexColumns))
                                {
                                    indexs.Add(nameKey, indexColumns = new ListArray <IndexColumn>());
                                    indexColumns.Add(indexColumn);
                                    indexColumn.Type = (long)reader["Non_unique"] == 0 ? ColumnCollectionType.UniqueIndex : ColumnCollectionType.Index;
                                }
                                else
                                {
                                    indexColumns.Add(indexColumn);
                                }
                            }
                        }
                        return(new TableColumnCollection
                        {
                            Columns = new ColumnCollection
                            {
                                Name = tableName,
                                Columns = columns.Values.getArray(),
                                Type = ColumnCollectionType.None
                            },
                            Identity = identity,
                            PrimaryKey = primaryKeys.Length == 0 ? null : new ColumnCollection {
                                Type = ColumnCollectionType.PrimaryKey, Columns = primaryKeys.ToArray()
                            },
                            Indexs = indexs.getArray(index => new ColumnCollection
                            {
                                Name = index.Key.ToString(),
                                Type = index.Value[0].Type,
                                Columns = index.Value.ToLeftArray().GetSort(value => value.Index).getArray(column => column.Column)
                            })
                        });
                    }
            }
            return(null);
        }
Exemplo n.º 26
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected override void nextCreate()
            {
                Type modelType;

                AutoCSer.Sql.ModelAttribute modelAttribute = Type.Type.customAttribute <AutoCSer.Sql.ModelAttribute>(out modelType);
                if (modelAttribute != null)
                {
                    AutoCSer.Net.TcpStaticServer.ServerAttribute serverAttribute = AutoCSer.Metadata.TypeAttribute.GetAttribute <AutoCSer.Net.TcpStaticServer.ServerAttribute>(Type, false);
                    if (serverAttribute != null && serverAttribute.ServerName != null && !serverAttribute.IsRemoteLinkType && serverAttribute.IsRemoteLink && (RemoteLinkType = TcpStaticServer.Generator.GetRemoteLinkType(Type)) != null)
                    {
                        LeftArray <TcpStaticServer.Generator.RemoteMethod> remoteMethods = new LeftArray <TcpStaticServer.Generator.RemoteMethod>(0);
                        foreach (MethodIndex method in MethodIndex.GetMethods <AutoCSer.Net.TcpStaticServer.MethodAttribute>(Type, serverAttribute.GetMemberFilters, false, serverAttribute.IsAttribute, serverAttribute.IsBaseTypeAttribute))
                        {
                            if (!method.Method.IsGenericMethodDefinition)
                            {
                                AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute remoteAttribute = method.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null && !remoteAttribute.IsClientRemoteMember)
                                {
                                    MethodParameter[] parameters = method.Parameters;
                                    if (parameters.Length >= 1 && parameters[0].ParameterType == RemoteLinkType.ParameterType)
                                    {
                                        remoteMethods.Add(new TcpStaticServer.Generator.RemoteMethod {
                                            Type = Type, Method = method, MethodParameters = parameters, Attribute = remoteAttribute
                                        });
                                    }
                                }
                            }
                        }

                        LeftArray <SqlModel.Generator.LogMember> logMembers = new LeftArray <SqlModel.Generator.LogMember>(0);
                        foreach (MemberIndex member in MemberIndex.GetMembers(modelType, modelAttribute.MemberFilters))
                        {
                            if (!member.IsIgnore)
                            {
                                AutoCSer.Sql.MemberAttribute attribute = member.GetAttribute <AutoCSer.Sql.MemberAttribute>(false);
                                if (modelAttribute.LogServerName != null)
                                {
                                    AutoCSer.Sql.LogAttribute logAttribute = member.GetAttribute <AutoCSer.Sql.LogAttribute>(false);
                                    if (logAttribute != null)
                                    {
                                        SqlModel.Generator.LogMember logMember = new SqlModel.Generator.LogMember {
                                            Member = member, Attribute = logAttribute, MemberAttribute = attribute
                                        };
                                        if (modelAttribute.LogServerName != null && logMember.IsProxy)
                                        {
                                            logMembers.Add(logMember);
                                            foreach (TcpStaticServer.Generator.RemoteMethod remoteMethod in remoteMethods)
                                            {
                                                if (remoteMethod.Attribute.MemberName == member.MemberName)
                                                {
                                                    remoteMethod.Member = member;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        RemoteMethods = remoteMethods.GetFindArray(value => value.Member != null);
                        LogMembers    = logMembers.Length != 0 && (modelAttribute.CacheType != AutoCSer.Sql.Cache.Whole.Event.Type.Unknown && modelAttribute.CacheType != AutoCSer.Sql.Cache.Whole.Event.Type.CreateMemberKey) ? logMembers.ToArray() : EmptyArray <SqlModel.Generator.LogMember> .Array;
                        if ((LogMembers.Length | RemoteMethods.Length) != 0)
                        {
                            //create(true);
                            IsRemoteMember = RemoteMethods.Length != 0 && TcpStaticServer.Generator.RemoteMemberTypes.Add(Type);
                            CSharpTypeDefinition definition = new CSharpTypeDefinition(Type, true, false);
                            _code_.Length = 0;
                            create(false);
                            Coder.Add(definition.Start + _partCodes_["SERVER"] + definition.End);
                            TcpStaticServer.Generator.AddClientCode(new TcpStaticServer.Generator.ClientCode {
                                Type = Type, Attribute = serverAttribute, Code = definition.Start + _partCodes_["CLIENT"] + definition.End, SegmentationCode = definition.Start + _partCodes_["CLIENTCALL"] + definition.End
                            });
                        }
                    }
                }
            }
Exemplo n.º 27
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected override void nextCreate()
            {
                if ((Attribute.IsAbstract || Type.Type.IsSealed || !Type.Type.IsAbstract) && !Type.Type.IsInterface)
                {
                    defaultServerName = Attribute.ServerName;
                    defaultServer     = null;
                    defaultType       = null;
                    if (defaultServerName != null)
                    {
                        HashString nameKey = defaultServerName;
                        if (!servers.TryGetValue(nameKey, out defaultServer))
                        {
                            servers.Add(nameKey, defaultServer = new Server());
                        }
                        defaultServer.Attribute.Name        = defaultServerName;
                        defaultServer.Types.Add(defaultType = new ServerType {
                            Type = Type, Attribute = Attribute
                        });
                        if (Attribute.IsServer)
                        {
                            defaultServer.AttributeType = Type;
                            defaultServer.Attribute.CopyFrom(Attribute);
                        }
                    }
                    RemoteLinkType remoteLinkType = null;
                    if (Attribute.ServerName != null)
                    {
                        if (Attribute.IsRemoteLinkType)
                        {
                            remoteLinkType = new RemoteLinkType {
                                Type = Type, ParameterType = Type
                            }
                        }
                        ;
                        else if (Attribute.IsRemoteLink)
                        {
                            remoteLinkType = GetRemoteLinkType(Type);
                        }
                    }
                    LeftArray <RemoteMethod> remoteMethods = new LeftArray <RemoteMethod>(0);
                    foreach (MethodIndex method in MethodIndex.GetMethods <AutoCSer.Net.TcpStaticServer.MethodAttribute>(Type, Attribute.GetMemberFilters, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute))
                    {
                        next(new TcpMethod {
                            Method = method, MethodType = Type
                        });
                        if (remoteLinkType != null && !method.Method.IsGenericMethodDefinition)
                        {
                            AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute remoteAttribute = method.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(false);
                            if (remoteAttribute != null && remoteAttribute.IsClientRemoteMember)
                            {
                                MethodParameter[] parameters = method.Parameters;
                                if (parameters.Length >= 1 && parameters[0].ParameterType.Type == remoteLinkType.ParameterType)
                                {
                                    remoteMethods.Add(new RemoteMethod {
                                        Type = Type, Method = method, MethodParameters = parameters, Attribute = remoteAttribute
                                    });
                                }
                            }
                        }
                    }
                    if (remoteLinkType != null)
                    {
                        remoteLinkType.RemoteMethods = remoteMethods.ToArray();

                        LeftArray <RemoteMember> remoteMembers = new LeftArray <RemoteMember>(0);
                        foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstanceProperty, true, false))
                        {
                            if (member.CanGet)
                            {
                                AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null)
                                {
                                    if (member.IsField || ((PropertyInfo)member.Member).GetIndexParameters().Length == 0)
                                    {
                                        remoteMembers.Add(new RemoteMember {
                                            Member = member, Attribute = remoteAttribute
                                        });
                                    }
                                }
                            }
                        }
                        foreach (MethodIndex member in MethodIndex.GetMethods <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstance, false, true, false))
                        {
                            if (!member.Method.IsGenericMethodDefinition)
                            {
                                AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute remoteAttribute = member.GetSetupAttribute <AutoCSer.Net.TcpStaticServer.RemoteMemberAttribute>(false);
                                if (remoteAttribute != null)
                                {
                                    remoteMembers.Add(new RemoteMember {
                                        Method = member, Attribute = remoteAttribute
                                    });
                                }
                            }
                        }
                        remoteLinkType.RemoteMembers = remoteMembers.ToArray();

                        RemoteLinkBuilder cacheBuilder = new RemoteLinkBuilder();
                        foreach (MemberIndex member in MemberIndex.GetMembers <AutoCSer.Net.TcpStaticServer.RemoteLinkAttribute>(Type, AutoCSer.Metadata.MemberFilters.NonPublicInstance, true, false))
                        {
                            cacheBuilder.Push(member);
                        }
                        remoteLinkType.RemoteLinks = cacheBuilder.Caches.ToArray();

                        if (remoteLinkType.IsRemoteLink)
                        {
                            defaultServer.RemoteLinkTypes.Add(remoteLinkType);
                        }
                    }
                    if (!Type.Type.IsGenericType)
                    {
                        foreach (MemberIndexInfo member in StaticMemberIndexGroup.Get <AutoCSer.Net.TcpStaticServer.MethodAttribute>(Type, Attribute.GetMemberFilters, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute))
                        {
                            if (member.IsField)
                            {
                                FieldInfo field     = (FieldInfo)member.Member;
                                TcpMethod getMethod = new TcpMethod
                                {
                                    Method      = new Metadata.MethodIndex(field, true),
                                    MemberIndex = member,
                                    MethodType  = Type
                                };
                                if (!getMethod.Attribute.IsOnlyGetMember)
                                {
                                    getMethod.SetMethod = new TcpMethod {
                                        Method = new Metadata.MethodIndex(field, false), MemberIndex = member, MethodType = Type
                                    };
                                }
                                next(getMethod);
                                if (getMethod.SetMethod != null)
                                {
                                    next(getMethod.SetMethod);
                                }
                            }
                            else if (member.CanGet)
                            {
                                PropertyInfo property  = (PropertyInfo)member.Member;
                                TcpMethod    getMethod = new TcpMethod
                                {
                                    Method      = new Metadata.MethodIndex(property, true),
                                    MemberIndex = member,
                                    MethodType  = Type
                                };
                                if (member.CanSet && !getMethod.Attribute.IsOnlyGetMember)
                                {
                                    getMethod.SetMethod = new TcpMethod {
                                        Method = new Metadata.MethodIndex(property, false), MemberIndex = member, MethodType = Type
                                    };
                                }
                                next(getMethod);
                                if (getMethod.SetMethod != null)
                                {
                                    next(getMethod.SetMethod);
                                }
                            }
                        }
                    }
                    serverTypes.Empty();
                }
            }
Exemplo n.º 28
0
 /// <summary>
 /// 获取分组数据成员位图
 /// </summary>
 /// <param name="group">分组</param>
 /// <returns>分组数据成员位图</returns>
 private static MemberMap <valueType> getGroupMemberMap(int group)
 {
     if (groupMemberMaps == null)
     {
         LeftArray <KeyValue <MemberMap <valueType>, int> > memberMaps = new LeftArray <KeyValue <MemberMap <valueType>, int> >();
         memberMaps.Add(new KeyValue <MemberMap <valueType>, int>(MemberMap, 0));
         Monitor.Enter(groupMemberMapLock);
         if (groupMemberMaps == null)
         {
             try
             {
                 foreach (Field field in Fields)
                 {
                     if (field.DataMember.Group != 0)
                     {
                         int index = memberMaps.Length;
                         foreach (KeyValue <MemberMap <valueType>, int> memberMap in memberMaps.Array)
                         {
                             if (memberMap.Value == field.DataMember.Group || --index == 0)
                             {
                                 break;
                             }
                         }
                         if (index == 0)
                         {
                             MemberMap <valueType> memberMap = new MemberMap <valueType>();
                             memberMaps.Add(new KeyValue <MemberMap <valueType>, int>(memberMap, field.DataMember.Group));
                             memberMap.SetMember(field.MemberMapIndex);
                         }
                         else
                         {
                             memberMaps.Array[memberMaps.Length - index].Key.SetMember(field.MemberMapIndex);
                         }
                     }
                 }
                 if (memberMaps.Length != 1)
                 {
                     MemberMap <valueType> memberMap = memberMaps.Array[0].Key = new MemberMap <valueType>();
                     foreach (Field field in Fields)
                     {
                         if (field.DataMember.Group == 0)
                         {
                             memberMap.SetMember(field.MemberMapIndex);
                         }
                     }
                 }
                 groupMemberMaps = memberMaps.ToArray();
             }
             finally { Monitor.Exit(groupMemberMapLock); }
         }
         else
         {
             Monitor.Exit(groupMemberMapLock);
         }
     }
     foreach (KeyValue <MemberMap <valueType>, int> memberMap in groupMemberMaps)
     {
         if (memberMap.Value == group)
         {
             return(memberMap.Key);
         }
     }
     AutoCSer.Log.Pub.Log.add(AutoCSer.Log.LogType.Error, typeof(valueType).fullName() + " 缺少缓存分组 " + group.toString());
     return(null);
 }
Exemplo n.º 29
0
 /// <summary>
 /// 安装下一个类型
 /// </summary>
 protected unsafe override void nextCreate()
 {
     if (Type.Type.IsClass && !Type.Type.IsAbstract)
     {
         LeftArray <TcpMethod> methodArray = new LeftArray <TcpMethod>(Metadata.MethodIndex.GetMethods <AutoCSer.Net.TcpStreamServer.MethodAttribute>(Type, Attribute.MemberFilters, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute)
                                                                       .getFind(value => !value.Method.IsGenericMethod)
                                                                       .getArray(value => new TcpMethod
         {
             Method           = value,
             MethodType       = Type,
             ServiceAttribute = Attribute
         }));
         foreach (MemberIndexInfo member in MemberIndexGroup.Get <AutoCSer.Net.TcpStreamServer.MethodAttribute>(Type, Attribute.MemberFilters, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute))
         {
             if (member.IsField)
             {
                 FieldInfo field     = (FieldInfo)member.Member;
                 TcpMethod getMethod = new TcpMethod
                 {
                     Method           = new Metadata.MethodIndex(field, true),
                     MemberIndex      = member,
                     MethodType       = Type,
                     ServiceAttribute = Attribute
                 };
                 if (!getMethod.Attribute.IsOnlyGetMember)
                 {
                     getMethod.SetMethod = new TcpMethod {
                         Method = new MethodIndex(field, false), MemberIndex = member, MethodType = Type, ServiceAttribute = Attribute
                     };
                 }
                 methodArray.Add(getMethod);
                 if (getMethod.SetMethod != null)
                 {
                     methodArray.Add(getMethod.SetMethod);
                 }
             }
             else if (member.CanGet)
             {
                 PropertyInfo property  = (PropertyInfo)member.Member;
                 TcpMethod    getMethod = new TcpMethod
                 {
                     Method           = new MethodIndex(property, true),
                     MemberIndex      = member,
                     MethodType       = Type,
                     ServiceAttribute = Attribute
                 };
                 if (member.CanSet && !getMethod.Attribute.IsOnlyGetMember)
                 {
                     getMethod.SetMethod = new TcpMethod {
                         Method = new MethodIndex(property, false), MemberIndex = member, MethodType = Type, ServiceAttribute = Attribute
                     };
                 }
                 methodArray.Add(getMethod);
                 if (getMethod.SetMethod != null)
                 {
                     methodArray.Add(getMethod.SetMethod);
                 }
             }
         }
         MethodIndexs = methodArray.ToArray();
         MethodIndexs = TcpMethod.CheckIdentity(MethodIndexs, getRememberIdentityName(Attribute.GenericType ?? Type), method => method.Method.MethodKeyFullName);
         if (MethodIndexs == null)
         {
             return;
         }
         int methodIndex = 0;
         IsVerifyMethod = false;
         ParameterBuilder parameterBuilder = new ParameterBuilder {
             IsSimpleSerialize = Attribute.IsSimpleSerialize
         };
         foreach (TcpMethod method in MethodIndexs)
         {
             method.MethodIndex = methodIndex++;
             if (!method.IsNullMethod)
             {
                 if (IsVerifyMethod)
                 {
                     method.Attribute.IsVerifyMethod = false;
                 }
                 else if (method.IsVerifyMethod)
                 {
                     IsVerifyMethod = true;
                 }
                 parameterBuilder.Add(method);
             }
         }
         ParameterTypes = parameterBuilder.Get();
         //TcpMethod[] methodIndexs = MethodIndexs.getFindArray(value => !value.IsNullMethod);
         if (ServiceAttribute.IsSegmentation)
         {
             IsClientCode        = false;
             create(IsServerCode = true);
             CSharpTypeDefinition definition = new CSharpTypeDefinition(Type, IsClientCode = true, false, Type.Type.Namespace + ".TcpStreamClient");
             _code_.Length = 0;
             _code_.Add(definition.Start);
             create(IsServerCode = false);
             _code_.Add(definition.End);
             string fileName   = AutoParameter.ProjectPath + "{" + AutoParameter.DefaultNamespace + "}.TcpInternalStreamServer." + ServerName + ".Client.cs";
             string clientCode = Coder.WarningCode + _code_.ToString() + Coder.FileEndCode;
             if (Coder.WriteFile(fileName, clientCode))
             {
                 if (ServiceAttribute.ClientSegmentationCopyPath != null)
                 {
                     string copyFileName = ServiceAttribute.ClientSegmentationCopyPath + "{" + AutoParameter.DefaultNamespace + "}.TcpInternalStreamServer." + ServerName + ".Client.cs";
                     if (Coder.WriteFile(copyFileName, clientCode))
                     {
                         Messages.Message(copyFileName + " 被修改");
                     }
                 }
                 Messages.Message(fileName + " 被修改");
             }
         }
         else
         {
             create(IsServerCode = IsClientCode = true);
         }
     }
 }
Exemplo n.º 30
0
            /// <summary>
            /// 安装完成处理
            /// </summary>
            protected unsafe override void onCreated()
            {
                foreach (ClientCode code in clientCodes.Values)
                {
                    Server server;
                    if (servers.TryGetValue(code.Attribute.ServerName, out server))
                    {
                        if (server.Attribute.GetIsSegmentation)
                        {
                            server.ClientCodes.Add(code.SegmentationCode);
                        }
                        else
                        {
                            Coder.Add(code.Code);
                        }
                    }
                }
                if (clientCodes.Count != 0)
                {
                    clientCodes = DictionaryCreator.CreateOnly <Type, ClientCode>();
                }

                StringArray           clientCallCode = new StringArray();
                LeftArray <TcpMethod> methods        = new LeftArray <TcpMethod>(0);

                TcpMethod[]      methodIndexs;
                ParameterBuilder parameterBuilder = new ParameterBuilder();
                int staticMethodIndex             = 0;

                foreach (Server server in servers.Values)
                {
                    if (server.IsMethod || server.RemoteLinkTypes.Length != 0 || server.ClientCodes.Length != 0)
                    {
                        Attribute = server.Attribute;
                        TcpServerAttributeType = server.AttributeType == null || server.AttributeType.Type == null ? null : server.AttributeType.FullName;

                        Part = PartType.RemoteLink;
                        foreach (RemoteLinkType remoteLinkType in server.RemoteLinkTypes)
                        {
                            if (remoteLinkType.IsRemoteLink)
                            {
                                Type = remoteLinkType.Type;
                                CurrentRemoteLinkType         = remoteLinkType;
                                remoteLinkType.IsRemoteMember = remoteLinkType.RemoteMethods.Length != 0 && RemoteMemberTypes.Add(Type);
                                CSharpTypeDefinition definition = new CSharpTypeDefinition(Type, true, false);
                                _code_.Length = 0;
                                create(false);
                                Coder.Add(definition.Start + _partCodes_["SERVERREMOTE"] + definition.End);
                                if (ServiceAttribute.GetIsSegmentation)
                                {
                                    clientCallCode.Add(definition.Start + _partCodes_["CLIENTREMOTE"] + definition.End);
                                }
                                else
                                {
                                    Coder.Add(definition.Start + _partCodes_["CLIENTREMOTE"] + definition.End);
                                }
                            }
                        }
                        string clientCode = null;
                        if (server.IsMethod)
                        {
                            Part = PartType.CallType;
                            foreach (ServerType serverType in server.Types)
                            {
                                methods.Add(serverType.Methods);
                            }
                            methodIndexs   = methods.ToArray();
                            methods.Length = 0;
                            methodIndexs   = TcpMethod.CheckIdentity(methodIndexs, null, getRememberIdentityName(), method => method.Method.MethodKeyFullName);
                            if (methodIndexs == null)
                            {
                                return;
                            }
                            int index = CallQueueCount = 0;
                            IsVerifyMethod  = false;
                            IsCallQueueLink = ServiceAttribute.GetRemoteExpressionServerTask == Net.TcpServer.ServerTaskType.QueueLink;
                            if (ServiceAttribute.GetRemoteExpressionServerTask == Net.TcpServer.ServerTaskType.Queue || ServiceAttribute.GetRemoteExpressionServerTask == Net.TcpServer.ServerTaskType.QueueLink)
                            {
                                CallQueueCount = (int)ServiceAttribute.GetRemoteExpressionCallQueueIndex + 1;
                            }
                            parameterBuilder.Clear(ServiceAttribute.IsSimpleSerialize);
                            QueueTypeBuilder queueTypeBuilder = new QueueTypeBuilder();
                            foreach (TcpMethod method in methodIndexs)
                            {
                                method.MethodIndex       = index++;
                                method.StaticMethodIndex = ++staticMethodIndex;
                                if (!method.IsNullMethod)
                                {
                                    if (IsVerifyMethod)
                                    {
                                        method.Attribute.IsVerifyMethod = false;
                                    }
                                    else if (method.IsVerifyMethod)
                                    {
                                        IsVerifyMethod            = true;
                                        IsSynchronousVerifyMethod = method.Attribute.ServerTaskType == AutoCSer.Net.TcpServer.ServerTaskType.Synchronous && !method.IsAsynchronousCallback;
                                        if (method.MethodType == server.AttributeType && server.IsTimeVerify)
                                        {
                                            TimeVerifyMethod = method;
                                        }
                                        //method.Attribute.ServerTaskType = Net.TcpServer.ServerTaskType.Synchronous;
                                    }
                                    parameterBuilder.Add(method);
                                    queueTypeBuilder.Add(method);

                                    IsCallQueueLink |= method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.QueueLink;
                                    if (method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.Queue || method.Attribute.ServerTaskType == Net.TcpServer.ServerTaskType.QueueLink)
                                    {
                                        CallQueueCount = Math.Max((int)method.Attribute.GetServerQueueIndex + 1, CallQueueCount);
                                    }
                                    MaxTimeoutSeconds = Math.Max(MaxTimeoutSeconds, method.Attribute.GetClientTimeoutSeconds);

                                    //if (method.IsAsynchronousCallback && method.Attribute.ServerTaskType != Net.TcpServer.ServerTaskType.Synchronous)
                                    //{
                                    //    Messages.Message("异步函数警告" + method.MemberFullName);
                                    //}
                                }
                            }
                            ParameterTypes       = parameterBuilder.Get();
                            ServerCallQueueTypes = queueTypeBuilder.Get();
                            foreach (ServerType serverType in server.Types)
                            {
                                if (serverType.Methods.Array.Length != 0)
                                {
                                    Type = serverType.Type;
                                    //TimeVerifyType = Type == server.AttributeType && server.IsTimeVerify ? Type : ExtensionType.Null;
                                    Attribute    = serverType.Attribute ?? server.Attribute;
                                    MethodIndexs = serverType.Methods.Array.ToArray();
                                    CSharpTypeDefinition definition = new CSharpTypeDefinition(Type, true, false);
                                    _code_.Length = 0;
                                    create(false);
                                    Coder.Add(definition.Start + _partCodes_["SERVERCALL"] + definition.End);
                                    if (ServiceAttribute.GetIsSegmentation)
                                    {
                                        clientCallCode.Add(definition.Start + _partCodes_["CLIENTCALL"] + definition.End);
                                    }
                                    else
                                    {
                                        Coder.Add(definition.Start + _partCodes_["CLIENTCALL"] + definition.End);
                                    }
                                }
                            }

                            Part           = PartType.ServerType;
                            Type           = server.AttributeType;
                            Attribute      = server.Attribute;
                            MethodIndexs   = methodIndexs;
                            methods.Length = 0;
                            _code_.Length  = 0;
                            create(false);
                            Coder.Add(@"
namespace " + AutoParameter.DefaultNamespace + "." + serverPart + @"
{
" + _partCodes_["SERVER"] + @"
}");
                            clientCode = @"
namespace " + AutoParameter.DefaultNamespace + "." + ClientPart + @"
{
" + _partCodes_["CLIENT"] + @"
}";
                        }
                        if (ServiceAttribute.GetIsSegmentation)
                        {
                            if (clientCode != null)
                            {
                                clientCallCode.Add(clientCode);
                            }
                            clientCallCode.Append(ref server.ClientCodes);
                            string fileName = AutoParameter.ProjectPath + "{" + AutoParameter.DefaultNamespace + "}.TcpStaticServer." + ServiceAttribute.ServerName + ".Client.cs";
                            clientCode = Coder.WarningCode + clientCallCode.ToString() + Coder.FileEndCode;
                            if (Coder.WriteFile(fileName, clientCode))
                            {
                                if (ServiceAttribute.ClientSegmentationCopyPath != null)
                                {
                                    string copyFileName = ServiceAttribute.ClientSegmentationCopyPath + "{" + AutoParameter.DefaultNamespace + "}.TcpStaticServer." + ServiceAttribute.ServerName + ".Client.cs";
                                    if (Coder.WriteFile(copyFileName, clientCode))
                                    {
                                        Messages.Message(copyFileName + " 被修改");
                                    }
                                }
                                Messages.Message(fileName + " 被修改");
                            }
                            clientCallCode.Length = 0;
                        }
                        else if (clientCode != null)
                        {
                            Coder.Add(clientCode);
                        }
                    }
                }
            }