JsonTableGenerater.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. namespace etoy
  2. {
  3. class RuleCenterField
  4. {
  5. public string name;
  6. public string type;
  7. public int len = int.MinValue;
  8. }
  9. class JsonTableGenerater : IGenerater
  10. {
  11. private readonly JsonWriter _writer;
  12. private Dictionary<string, RuleCenterField> _fieldMap;
  13. private void TableRowsGenerate(Table table)
  14. {
  15. var fieldInfos = table.FieldInfos;
  16. for (int i = 0, len = fieldInfos.Length; i < len; i++)
  17. {
  18. var field = fieldInfos[i];
  19. if (!field.IsServerField) continue;
  20. var fieldData = new RuleCenterField();
  21. fieldData.name = field.FieldName;
  22. fieldData.type = RuleCenterUtil.ToRuleCenterType(field.FieldType, field.IsRepeated);
  23. _fieldMap.Add(field.FieldName, fieldData);
  24. }
  25. _writer.OnRows(table.Rows, _fieldMap);
  26. }
  27. private void TableGenerate(Table table)
  28. {
  29. _fieldMap.Clear();
  30. _writer.Bracket().Indent().NewLine();
  31. {
  32. _writer.AppendKey(RuleCenterJsonStructureDefine.Table_Name).Append(table.Name);
  33. _writer.Dot().NewLine();
  34. TableRowsGenerate(table);
  35. _writer.Dot().NewLine();
  36. _writer.OnFields(_fieldMap);
  37. }
  38. _writer.Dedent().NewLine().EndBracket();
  39. }
  40. public void Generate(Context context)
  41. {
  42. _fieldMap = new Dictionary<string, RuleCenterField>();
  43. var tables = context.Blackboard.Tables.FindAll(table => table.TableTag.HasFlag(TableTag.Server));
  44. _writer.EnumeratorToJson(tables, tables.Count, Loop);
  45. void Loop(int _, Table table)
  46. {
  47. if (table.TableTag.HasFlag(TableTag.Server))
  48. {
  49. _writer.NewLine();
  50. TableGenerate(table);
  51. }
  52. }
  53. }
  54. public JsonTableGenerater(JsonWriter writer)
  55. {
  56. _writer = writer;
  57. }
  58. }
  59. }