Пример #1
0
    public static void Export(ProtoManager pm)
    {
        ProtoModuleData server = pm.apiReader.modules.GetValueByKey("test");
        ProtoModuleData client = pm.apiReader.modules.GetValueByKey("ClientGM");

        ExportModule(server, true, Setting.Options.jsonServerGM);
        ExportModule(client, false, Setting.Options.jsonClientGM);
    }
Пример #2
0
    private void Read(string path)
    {
        Console.WriteLine(path);
        string   jsonTxt  = File.ReadAllText(path);
        JsonData jsonData = JsonMapper.ToObject(jsonTxt);

        foreach (var key in jsonData.Keys)
        {
            ProtoModuleData module = new ProtoModuleData();
            module.name = key;
            this.modules.Add(module.name, module);


            JsonData jModule = jsonData[key];

            foreach (var mKey in jModule.Keys)
            {
                ProtoMessageData msg = new ProtoMessageData();
                msg.name = mKey;
                module.AddMsg(msg);
                JsonData jMsg = jModule[mKey];
                JsonData jReq = jMsg["<req>"];
                JsonData jRes = jMsg["<res>"];

                foreach (var fieldKey in jReq.Keys)
                {
                    string fieldName = fieldKey.ToString();
                    msg.req.Add(fieldName, jReq[fieldName].ToString());
                }

                foreach (var fieldKey in jRes.Keys)
                {
                    string fieldName = fieldKey.ToString();
                    msg.res.Add(fieldName, jRes[fieldName].ToString());
                }
            }
        }


        ReadNote(jsonTxt);
    }
    private static void ExportModule(ProtoModuleData data)
    {
        List <object[]> funCodeList = new List <object[]>();

        List <ProtoMessageData> msgValues = data.msgs.Values;

        foreach (var msgData in msgValues)
        {
            string code = GenerateFunCode(msgData);
            msgData.req.code = code;
            funCodeList.Add(new object[] { code });
        }

        string path    = string.Format(TsPathOut.ApiSender, data.name);
        string content = "";

        if (!File.Exists(path))
        {
            TemplateSystem template = new TemplateSystem(tplContent);
            template.AddVariable("classNote", data.cnname);
            template.AddVariable("className", data.moduleSenderClassName);
            template.AddVariable("name", data.name);
            template.AddVariable("funCodeList", funCodeList.ToArray());
            content = template.Parse();
            PathHelper.CheckPath(path);
            File.WriteAllText(path, content);
        }
        else
        {
            List <string> addCodeList = new List <string>();
            string        code        = File.ReadAllText(path);

            foreach (var msgData in msgValues)
            {
                string pattern = $@"{msgData.name}\s*\([\s\S]*?\)\s*{{";
                Regex  regex   = new Regex(pattern);
                //Console.WriteLine();
                //Console.WriteLine();
                //Console.WriteLine(pattern);
                //Console.WriteLine(regex.IsMatch(code));
                if (!regex.IsMatch(code))
                {
                    addCodeList.Add(msgData.req.code);
                }

                //int i = 0;
                //MatchCollection mc = regex.Matches(code);
                //foreach (var v in mc)
                //{
                //    Console.WriteLine(i + "  " + v.ToString());
                //    i++;
                //}
            }

            if (addCodeList.Count > 0)
            {
                string pattern = @"}\s*}";
                Regex  regex   = new Regex(pattern, RegexOptions.RightToLeft);
                code = regex.Replace(code, String.Join("", addCodeList) + "\n\t}\n}", 1);

                File.WriteAllText(path, code);
            }
        }
    }
Пример #4
0
    private static void ExportModule(ProtoModuleData data, bool isReq, string path)
    {
        Dictionary <string, JsonData> preCmdDict = new Dictionary <string, JsonData>();
        JsonData preJD = null;

        if (File.Exists(path))
        {
            preJD = JsonMapper.ToObject(File.ReadAllText(path));
            foreach (JsonData preCmd in preJD)
            {
                preCmdDict.Add(preCmd["name"].ToString(), preCmd);
            }
        }

        List <ProtoMessageData> msgs = data.msgs.Values;

        JsonData jd = new JsonData();

        jd.SetJsonType(JsonType.Array);
        foreach (ProtoMessageData msg in msgs)
        {
            JsonData cmd = new JsonData();
            cmd.SetJsonType(JsonType.Object);
            cmd["cnname"] = msg.cnname;
            cmd["name"]   = msg.name;
            JsonData cmdData = new JsonData();
            cmdData.SetJsonType(JsonType.Object);
            Dictionary <string, FieldData> fields;
            if (isReq)
            {
                fields = msg.req.fields;
            }
            else
            {
                fields = msg.res.fields;
            }

            foreach (var kvp in fields)
            {
                FieldData field = kvp.Value;

                JsonData val = null;
                if (preCmdDict.ContainsKey(msg.name) &&
                    preCmdDict[msg.name].ContainsKey("data") &&
                    preCmdDict[msg.name]["data"].ContainsKey(field.fieldName))
                {
                    val = preCmdDict[msg.name]["data"][field.fieldName];
                }

                if (val == null)
                {
                    switch (field.tsType)
                    {
                    case "string":
                        val = new JsonData("1");
                        break;

                    case "number":
                        val = new JsonData(1);
                        break;

                    case "boolean":
                        val = new JsonData(true);
                        break;

                    case "string[]":
                        val = new JsonData();
                        val.SetJsonType(JsonType.Array);
                        val.Add("1");
                        break;

                    case "number[]":
                        val = new JsonData();
                        val.SetJsonType(JsonType.Array);
                        val.Add(1);
                        break;

                    case "boolean[]":
                        val = new JsonData();
                        val.SetJsonType(JsonType.Array);
                        val.Add(true);
                        break;
                    }
                }

                cmdData[field.fieldName] = val;
            }
            cmd["data"] = cmdData;

            jd.Add(cmd);
        }


        string json = JsonMapper.ToJson(jd).ConvertJsonString();

        PathHelper.CheckPath(path);
        File.WriteAllText(path, json, Encoding.UTF8);
    }