/// <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); } } } }
/// <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"] + @" }"); } }