Beispiel #1
0
    /// <summary>
    /// 将所有数据包生成lua
    /// </summary>
    /// <param name="dataList"></param>
    /// <returns></returns>
    public static string GetSprotoToLua(List <ProtoDataBase> dataList)
    {
        StringBuilder results = new StringBuilder();

        results.Append(scriptName + "={}\n");
        GetSprotoAllType(dataList);
        foreach (ProtoDataBase protoData in dataList)
        {
            if (protoData is ProtoPackData)
            {
                string packName = scriptName + "." + protoData.name;
                results.Append(string.Format("-------------------------------{0}模块-----------------------------------\n", packName));
                ProtoPackData packData = protoData as ProtoPackData;
                results.Append(GetSprotoPackAllInfoToLua(packData));
                results.Append(packName + " = {}\n\n");
                results.Append(GetSprotoInfoToLua(packData.infos, protoData.name));
            }
            else if (protoData is ProtoInfoData)
            {
                results.Append(string.Format("-------------------------------{0}对象-----------------------------------\n", protoData.name));
                var infoData = protoData as ProtoInfoData;
                results.Append(GetSprotoInfoToLua(new List <ProtoInfoData> {
                    infoData
                }));
            }
        }
        return(results.ToString());
    }
Beispiel #2
0
 /// <summary>
 /// 缓存所有类型
 /// </summary>
 /// <param name="dataList"></param>
 public static void GetSprotoAllType(List <ProtoDataBase> dataList)
 {
     allType = new Dictionary <string, string>();
     foreach (ProtoDataBase protoData in dataList)
     {
         if (protoData is ProtoPackData)
         {
             string        packName = scriptName + "." + protoData.name;
             ProtoPackData data     = protoData as ProtoPackData;
             foreach (ProtoInfoData info in data.infos)
             {
                 string infoPackName = packName + "." + info.name;
                 string key          = protoData.name + "." + info.name;
                 if (!allType.ContainsKey(key))
                 {
                     allType.Add(key, infoPackName);
                 }
             }
         }
         else if (protoData is ProtoInfoData)
         {
             string packName = scriptName + "." + protoData.name;
             if (!allType.ContainsKey(protoData.name))
             {
                 allType.Add(protoData.name, packName);
             }
         }
     }
 }
Beispiel #3
0
    /// <summary>
    /// 获取协议包所有注释
    /// </summary>
    /// <returns></returns>
    public static string GetSprotoPackAllInfoToLua(ProtoPackData packData)
    {
        StringBuilder results  = new StringBuilder();
        string        packName = scriptName + "." + packData.name;

        results.Append(string.Format("---@type {0} \n", packName));
        return(results.ToString());
    }
Beispiel #4
0
    /// <summary>
    /// 获取协议包所有注释
    /// </summary>
    /// <returns></returns>
    public static string GetSprotoPackAllInfoToLuaApi(ProtoPackData packData)
    {
        StringBuilder results  = new StringBuilder();
        string        packName = scriptName + "." + packData.name;

        results.Append(string.Format("---@class {0}\n", packName));
        foreach (ProtoInfoData info in packData.infos)
        {
            results.Append(string.Format("---@field {0} {1} \n", info.name, packName + "." + info.name));
        }
        results.Append("\n\n\n");
        return(results.ToString());
    }
Beispiel #5
0
    /// <summary>
    /// 通过文件路径将sproto转换成数据类
    /// </summary>
    /// <param name="filePath"></param>
    /// <returns></returns>
    public static List <ProtoDataBase> SprotoToDataByFile(string filePath)
    {
        var content = string.Empty;

        string[]      arr  = File.ReadAllLines(@filePath);
        List <string> list = new List <string>();

        foreach (var s in arr)
        {
            //1 移除一些非法的行
            if (s.Trim().StartsWith("#") || s.Trim() == "")
            {
                continue;
            }
            string str = s;
            if (str.Contains("#"))
            {
                str = str.Split('#')[0].TrimEnd();
            }
            list.Add(str);
            content += str + "\r\n";
        }
        List <ProtoDataBase> protoList = new List <ProtoDataBase>();
        //Console.WriteLine(content);
        var word = GetStrContent(content);

        Console.WriteLine(word.Count);
        foreach (var s in word)
        {
            int count = 0;
            foreach (char c in s)
            {
                if (c.Equals('{'))
                {
                    count++;
                }
            }
            if (count > 1)
            {
                //是协议包
                ProtoPackData pack = new ProtoPackData();
                pack.name  = GetProtoName(s);
                pack.infos = new List <ProtoInfoData>();
                var word2 = GetStrContent(s);
                foreach (var s2 in word2)
                {
                    ProtoInfoData info = new ProtoInfoData();
                    info.name       = GetProtoName(s2);
                    info.parameters = GetParameters(s2);
                    pack.infos.Add(info);
                }
                protoList.Add(pack);
            }
            else
            {
                ProtoInfoData info = new ProtoInfoData();
                info.name       = GetProtoName(s);
                info.parameters = GetParameters(s);
                protoList.Add(info);
            }
        }
        return(protoList);
    }