Ejemplo n.º 1
0
            /// <summary>
            /// 安装完成处理
            /// </summary>
            protected unsafe override void onCreated()
            {
                stringBuilder      clientCallCode = new stringBuilder();
                list <methodIndex> methods        = new list <methodIndex>();

                methodIndex[] methodIndexs;
                foreach (server server in servers.Values)
                {
                    if (server.IsMethod)
                    {
                        IsAllType = false;
                        TcpServerAttributeType = server.AttributeType == null || server.AttributeType.Type == null ? null : server.AttributeType.FullName;
                        ServiceAttribute       = fastCSharp.config.pub.LoadConfig(server.TcpServer, server.TcpServer.ServiceName);
                        foreach (server.type serverType in server.Types)
                        {
                            methods.Add(serverType.Methods);
                        }
                        methodIndexs = methods.ToArray();
                        methods.Empty();
                        if (ServiceAttribute.IsIdentityCommand)
                        {
                            methodIndexs = methodIndex.CheckIdentity(methodIndexs, ServiceAttribute.IsRememberIdentityCommand ? getRememberIdentityName() : nullRememberIdentityName, method => method.Method.MethodKeyFullName);
                            if (methodIndexs == null)
                            {
                                return;
                            }
                        }
                        int index = 0;
                        foreach (methodIndex method in methodIndexs)
                        {
                            method.MethodIndex = index++;
                        }
                        foreach (server.type serverType in server.Types)
                        {
                            if (serverType.Methods.Count != 0)
                            {
                                type         = serverType.Type;
                                IsTimeVerify = type == server.AttributeType && server.IsTimeVerify;
                                Attribute    = serverType.Attribute ?? new code.cSharp.tcpCall();
                                MethodIndexs = serverType.Methods.ToArray();
                                definition.cSharp definition = new definition.cSharp(type, true, false);
                                _code_.Empty();
                                create(false);
                                fastCSharp.code.coder.Add(definition.Start + _partCodes_["SERVERCALL"] + definition.End);
                                if (ServiceAttribute.IsSegmentation)
                                {
                                    clientCallCode.Add(definition.Start + _partCodes_["CLIENTCALL"] + definition.End);
                                }
                                else
                                {
                                    fastCSharp.code.coder.Add(definition.Start + _partCodes_["CLIENTCALL"] + definition.End);
                                }
                            }
                        }
                        IsAllType    = true;
                        MethodIndexs = methodIndexs;
                        methodIndexs = methodIndexs.getFindArray(value => !value.IsNullMethod);
                        if (ServiceAttribute.IsHttpClient && !methodIndex.CheckHttpMethodName(methodIndexs))
                        {
                            return;
                        }
                        IsVerifyMethod = methodIndexs.any(value => value.IsVerifyMethod);
                        subArray <int> groupIds = methodIndexs.distinct(value => value.Attribute.GroupId);
                        groupIds.Remove(0);
                        MethodGroups = groupIds.GetArray(value => new methodGroup {
                            GroupId = value
                        });
                        MaxCommandLength = (ServiceAttribute.IsIdentityCommand ? sizeof(int) : methodIndexs.maxKey(value => (value.Method.MethodKeyFullName.Length + 3) & (int.MaxValue - 3), sizeof(int))) + sizeof(int) * 4 + sizeof(fastCSharp.net.tcp.commandServer.streamIdentity);
                        _code_.Empty();
                        create(false);
                        fastCSharp.code.coder.Add(@"
namespace " + AutoParameter.DefaultNamespace + "." + serverPart + @"
{
" + _partCodes_["SERVER"] + @"
}");
                        string clientCode = @"
namespace " + AutoParameter.DefaultNamespace + "." + clientPart + @"
{
" + _partCodes_["CLIENT"] + @"
}";
                        if (ServiceAttribute.IsIdentityCommand && ServiceAttribute.IsRememberIdentityCommand)
                        {
                            coder.AddRemember(@"
namespace " + AutoParameter.DefaultNamespace + @".tcpRemember
{
" + _partCodes_["REMEMBER"] + @"
}");
                        }
                        if (ServiceAttribute.IsSegmentation)
                        {
                            clientCallCode.Add(clientCode);
                            string fileName = AutoParameter.ProjectPath + "{" + AutoParameter.DefaultNamespace + "}.tcpCall." + ServiceAttribute.ServiceName + ".client.cs";
                            clientCode = fastCSharp.code.coder.WarningCode + clientCallCode.ToString() + fastCSharp.code.coder.FileEndCode;
                            if (fastCSharp.code.coder.WriteFile(fileName, clientCode))
                            {
                                if (ServiceAttribute.ClientSegmentationCopyPath != null)
                                {
                                    string copyFileName = ServiceAttribute.ClientSegmentationCopyPath + "{" + AutoParameter.DefaultNamespace + "}.tcpCall." + ServiceAttribute.ServiceName + ".client.cs";
                                    if (!fastCSharp.code.coder.WriteFile(copyFileName, clientCode))
                                    {
                                        fastCSharp.code.error.Add(copyFileName + " 写入失败");
                                    }
                                }
                                fastCSharp.code.error.Message(fileName + " 被修改");
                            }
                            clientCallCode.Empty();
                        }
                        else
                        {
                            fastCSharp.code.coder.Add(clientCode);
                        }
                    }
                }
            }
Ejemplo n.º 2
0
            /// <summary>
            /// 安装下一个类型
            /// </summary>
            protected unsafe override void nextCreate()
            {
                Attribute = fastCSharp.config.pub.LoadConfig(Attribute, Attribute.ServiceName);
                subArray <methodIndex> methodArray = code.methodInfo.GetMethods <fastCSharp.code.cSharp.tcpMethod>(type, Attribute.MemberFilter, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute, Attribute.IsInheritAttribute)
                                                     .getArray(value => new methodIndex
                {
                    Method           = value,
                    MethodType       = type,
                    ServiceAttribute = Attribute
                }).toSubArray();

                foreach (memberIndex member in code.memberIndexGroup.Get <fastCSharp.code.cSharp.tcpMethod>(type, Attribute.MemberFilter, false, Attribute.IsAttribute, Attribute.IsBaseTypeAttribute, Attribute.IsInheritAttribute))
                {
                    if (member.IsField)
                    {
                        FieldInfo   field     = (FieldInfo)member.Member;
                        methodIndex getMethod = new methodIndex
                        {
                            Method           = new methodInfo(field, true),
                            MemberIndex      = member,
                            MethodType       = type,
                            ServiceAttribute = Attribute
                        };
                        if (!getMethod.Attribute.IsOnlyGetMember)
                        {
                            getMethod.SetMethod = new methodIndex {
                                Method = new methodInfo(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;
                        methodIndex  getMethod = new methodIndex
                        {
                            Method           = new methodInfo(property, true),
                            MemberIndex      = member,
                            MethodType       = type,
                            ServiceAttribute = Attribute
                        };
                        if (member.CanSet && !getMethod.Attribute.IsOnlyGetMember)
                        {
                            getMethod.SetMethod = new methodIndex {
                                Method = new methodInfo(property, false), MemberIndex = member, MethodType = type, ServiceAttribute = Attribute
                            };
                        }
                        methodArray.Add(getMethod);
                        if (getMethod.SetMethod != null)
                        {
                            methodArray.Add(getMethod.SetMethod);
                        }
                    }
                }
                MethodIndexs = methodArray.ToArray();
                if (Attribute.IsIdentityCommand)
                {
                    MethodIndexs = methodIndex.CheckIdentity(MethodIndexs, Attribute.IsRememberIdentityCommand ? getRememberIdentityName() : nullRememberIdentityName, method => method.Method.MethodKeyFullName);
                    if (MethodIndexs == null)
                    {
                        return;
                    }
                    MaxCommandLength = sizeof(int) * 5 + sizeof(fastCSharp.net.tcp.commandServer.streamIdentity);
                }
                else
                {
                    MaxCommandLength = MethodIndexs.maxKey(value => (value.Method.MethodKeyFullName.Length + 3) & (int.MaxValue - 3), sizeof(int)) + sizeof(int) * 4 + sizeof(fastCSharp.net.tcp.commandServer.streamIdentity);
                }
                int index = 0;

                foreach (methodIndex method in MethodIndexs)
                {
                    method.MethodIndex = method.ParameterIndex = index++;
                }
                methodIndex[] methodIndexs = MethodIndexs.getFindArray(value => !value.IsNullMethod);
                if (ServiceAttribute.IsHttpClient && !methodIndex.CheckHttpMethodName(methodIndexs))
                {
                    return;
                }
                IsVerifyMethod = methodIndexs.any(value => value.IsVerifyMethod);
                subArray <int> groupIds = methodIndexs.distinct(value => value.Attribute.GroupId);

                groupIds.Remove(0);
                MethodGroups = groupIds.GetArray(value => new methodGroup {
                    GroupId = value
                });
                IsRemember = false;
                if (ServiceAttribute.IsSegmentation)
                {
                    IsClientCode        = false;
                    create(IsServerCode = true);
                    definition.cSharp definition = new definition.cSharp(type, IsClientCode = true, false, type.Type.Namespace + ".tcpClient");
                    _code_.Empty();
                    _code_.Add(definition.Start);
                    create(IsServerCode = false);
                    _code_.Add(definition.End);
                    string fileName   = AutoParameter.ProjectPath + "{" + AutoParameter.DefaultNamespace + "}.tcpServer." + Attribute.ServiceName + ".client.cs";
                    string clientCode = fastCSharp.code.coder.WarningCode + _code_.ToString() + fastCSharp.code.coder.FileEndCode;
                    if (fastCSharp.code.coder.WriteFile(fileName, clientCode))
                    {
                        if (ServiceAttribute.ClientSegmentationCopyPath != null)
                        {
                            string copyFileName = ServiceAttribute.ClientSegmentationCopyPath + "{" + AutoParameter.DefaultNamespace + "}.tcpServer." + Attribute.ServiceName + ".client.cs";
                            if (!fastCSharp.code.coder.WriteFile(copyFileName, clientCode))
                            {
                                fastCSharp.code.error.Add(copyFileName + " 写入失败");
                            }
                        }
                        fastCSharp.code.error.Message(fileName + " 被修改");
                    }
                }
                else
                {
                    create(IsServerCode = IsClientCode = true);
                }
                if (Attribute.IsIdentityCommand && Attribute.IsRememberIdentityCommand)
                {
                    IsRemember = true;
                    _code_.Empty();
                    create(IsServerCode = IsClientCode = false);
                    coder.AddRemember(@"
namespace " + AutoParameter.DefaultNamespace + @".tcpRemember
{
" + _partCodes_["REMEMBER"] + @"
}");
                }
            }