Example #1
0
    /// <summary>
    /// 消息中是否有某个字段的类型不存在
    /// </summary>
    /// <param name="messageStructure"></param>
    /// <param name="list"></param>
    /// <returns></returns>
    private static bool IsAnyFieldNotExistInMessageInternal(ProtocolControlCache_ProtoStructure.Message messageStructure, List <string> list = null)
    {
        if (messageStructure == null || messageStructure.Owner == null)
        {
            //消息不存在时返回false
            return(false);
        }
        if (list == null)
        {
            list = new List <string>();
        }
        string msgTypeStr = messageStructure.Owner.Package + "." + messageStructure.MessageName;

        if (list.Contains(msgTypeStr))
        {
            //已经检查过了,防止递归死循环
            return(false);
        }
        list.Add(msgTypeStr);
        for (int i = 0; i < messageStructure.Variables.Length; i++)
        {
            var variableTemp = messageStructure.Variables[i];
            if (!ServerTool_ProtocolControllerUtility.IsFieldExistInCSType(messageStructure.Owner.Package, messageStructure.MessageName, variableTemp.VariableName))
            {
                //若字段在C#类中不存在,则返回true
                return(true);
            }
            if (variableTemp.VType == ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Others)
            {
                var variableType = ServerTool_ProtocolController_GenerateLuaFromProto.GetVariableTypeInOthers(messageStructure.Owner, messageStructure, variableTemp);
                if (variableType.isEnumType || variableType.messageType == null)
                {
                    continue;
                }
                if (!ServerTool_ProtocolControllerUtility.IsCSTypeLoaded(variableType.typeString, out Type typeTemp))
                {
                    //若字段使用的类型未在C#中找到,则返回true
                    return(true);
                }
                if (IsAnyFieldNotExistInMessageInternal(variableType.messageType, list))
                {
                    //若字段使用的类型中也有字段未在C#中实现,则也返回true
                    return(true);
                }
            }
        }
        return(false);
    }
Example #2
0
    /// <summary>
    /// 在proto文件夹下批量将proto文件转为lua文件
    /// </summary>
    /// <param name="fileNames">需要生成的文件列表</param>
    /// <param name="protoFolder">proto文件夹</param>
    /// <param name="decodeLuaFolder">转换脚本的lua文件夹</param>
    /// <param name="adjustFolderPath">调整脚本的lua文件夹</param>
    /// <returns>生成了lua文件的proto文件名</returns>
    private List <string> GenerateLuaFilesFromProto(List <string> fileNames, string protoFolder, string decodeLuaFolder, string adjustFolderPath)
    {
        List <string> list = new List <string>();

        if (fileNames != null && !string.IsNullOrEmpty(protoFolder) && Directory.Exists(protoFolder) && !string.IsNullOrEmpty(decodeLuaFolder) && Directory.Exists(decodeLuaFolder))
        {
            ServerTool_ProtocolController_GenerateLuaFromProto generateLuaFromProto = new ServerTool_ProtocolController_GenerateLuaFromProto();
            for (int i = 0; i < fileNames.Count; i++)
            {
                if (generateLuaFromProto.DealProto(protoFolder + "/" + fileNames[i] + ".proto", decodeLuaFolder + "/" + fileNames[i] + ".lua", adjustFolderPath + "/" + fileNames[i] + "_adj.lua", true))
                {
                    list.Add(fileNames[i]);
                }
            }
        }
        return(list);
    }
Example #3
0
    /// <summary>
    /// 生成lua类的提示
    /// </summary>
    /// <param name="proto"></param>
    /// <param name="msg"></param>
    /// <returns></returns>
    public static string GenerateLuaClassHint(ProtocolControlCache_ProtoStructure proto, ProtocolControlCache_ProtoStructure.Message msg)
    {
        if (msg == null)
        {
            return(string.Empty);
        }
        stringBuilderForLuaClassHint.Remove(0, stringBuilderForLuaClassHint.Length);
        stringBuilderForLuaClassHint.Append("---@class ");
        stringBuilderForLuaClassHint.Append(proto.Package);
        stringBuilderForLuaClassHint.Append(".");
        stringBuilderForLuaClassHint.Append(msg.MessageName);
        stringBuilderForLuaClassHint.Append("\r\n");
        stringBuilderForLuaClassHint.Append("---class properties");
        stringBuilderForLuaClassHint.Append("\r\n");
        for (int i = 0; i < msg.Variables.Length; i++)
        {
            var    variable = msg.Variables[i];
            string typeStr  = null;
            switch (variable.VType)
            {
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Bool:
                typeStr = "boolean";
                break;

            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Double:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Float:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Int32:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.UInt32:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Int64:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.UInt64:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.SInt32:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.SInt64:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Sing64:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Fixed32:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Fixed64:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.SFixed32:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.SFixed64:
                typeStr = "number";
                break;

            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.String:
            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Bytes:
                typeStr = "string";
                break;

            case ProtocolControlCache_ProtoStructure.VariableInMessage.VariableType.Others:
                ServerTool_ProtocolController_GenerateLuaFromProto.VariableTypeInOthers variableTypeInOthers = ServerTool_ProtocolController_GenerateLuaFromProto.GetVariableTypeInOthers(proto, msg, variable);
                if (variableTypeInOthers.isEnumType && variableTypeInOthers.enumType != null)
                {
                    typeStr = "number";
                }
                else
                {
                    typeStr = variableTypeInOthers.typeString;
                }
                break;

            default:
                break;
            }
            switch (variable.Modifier)
            {
            case ProtocolControlCache_ProtoStructure.VariableInMessage.ModifierType.Required:
                stringBuilderForLuaClassHint.Append("---@field public ");
                stringBuilderForLuaClassHint.Append(variable.VariableName);
                stringBuilderForLuaClassHint.Append(" ");
                stringBuilderForLuaClassHint.Append(typeStr);
                if (!string.IsNullOrEmpty(variable.DefaultValue))
                {
                    stringBuilderForLuaClassHint.Append(" [default = ");
                    stringBuilderForLuaClassHint.Append(variable.DefaultValue);
                    stringBuilderForLuaClassHint.Append("]");
                }
                if (!string.IsNullOrEmpty(variable.Comment))
                {
                    stringBuilderForLuaClassHint.Append(" ");
                    stringBuilderForLuaClassHint.Append(variable.Comment.Replace("\n", " ").Replace("\r", ""));
                }
                stringBuilderForLuaClassHint.Append("\r\n");
                break;

            case ProtocolControlCache_ProtoStructure.VariableInMessage.ModifierType.Optional:
                stringBuilderForLuaClassHint.Append("---@field public ");
                stringBuilderForLuaClassHint.Append(variable.VariableName);
                stringBuilderForLuaClassHint.Append(" ");
                stringBuilderForLuaClassHint.Append(typeStr);
                if (!string.IsNullOrEmpty(variable.DefaultValue))
                {
                    stringBuilderForLuaClassHint.Append(" [default = ");
                    stringBuilderForLuaClassHint.Append(variable.DefaultValue);
                    stringBuilderForLuaClassHint.Append("]");
                }
                if (!string.IsNullOrEmpty(variable.Comment))
                {
                    stringBuilderForLuaClassHint.Append(" ");
                    stringBuilderForLuaClassHint.Append(variable.Comment.Replace("\n", " ").Replace("\r", ""));
                }
                stringBuilderForLuaClassHint.Append("\r\n");
                stringBuilderForLuaClassHint.Append("---@field public ");
                stringBuilderForLuaClassHint.Append(variable.VariableName);
                stringBuilderForLuaClassHint.Append("Specified boolean");
                stringBuilderForLuaClassHint.Append("\r\n");
                break;

            case ProtocolControlCache_ProtoStructure.VariableInMessage.ModifierType.Repeated:
                stringBuilderForLuaClassHint.Append("---@field public ");
                stringBuilderForLuaClassHint.Append(variable.VariableName);
                stringBuilderForLuaClassHint.Append(" table<number, ");
                stringBuilderForLuaClassHint.Append(typeStr);
                stringBuilderForLuaClassHint.Append(">");
                if (!string.IsNullOrEmpty(variable.Comment))
                {
                    stringBuilderForLuaClassHint.Append(" ");
                    stringBuilderForLuaClassHint.Append(variable.Comment.Replace("\n", " ").Replace("\r", ""));
                }
                stringBuilderForLuaClassHint.Append("\r\n");
                break;

            case ProtocolControlCache_ProtoStructure.VariableInMessage.ModifierType.NULL:
                break;

            default:
                break;
            }
        }
        return(stringBuilderForLuaClassHint.ToString());
    }