namespace etoy { class RuleCenterField { public string name; public string type; public int len = int.MinValue; } class JsonTableGenerater : IGenerater { private readonly JsonWriter _writer; private Dictionary _fieldMap; private void TableRowsGenerate(Table table) { var fieldInfos = table.FieldInfos; for (int i = 0, len = fieldInfos.Length; i < len; i++) { var field = fieldInfos[i]; if (!field.IsServerField) continue; var fieldData = new RuleCenterField(); fieldData.name = field.FieldName; fieldData.type = RuleCenterUtil.ToRuleCenterType(field.FieldType, field.IsRepeated); _fieldMap.Add(field.FieldName, fieldData); } _writer.OnRows(table.Rows, _fieldMap); } private void TableGenerate(Table table) { _fieldMap.Clear(); _writer.Bracket().Indent().NewLine(); { _writer.AppendKey(RuleCenterJsonStructureDefine.Table_Name).Append(table.Name); _writer.Dot().NewLine(); TableRowsGenerate(table); _writer.Dot().NewLine(); _writer.OnFields(_fieldMap); } _writer.Dedent().NewLine().EndBracket(); } public void Generate(Context context) { _fieldMap = new Dictionary(); var tables = context.Blackboard.Tables.FindAll(table => table.TableTag.HasFlag(TableTag.Server)); _writer.EnumeratorToJson(tables, tables.Count, Loop); void Loop(int _, Table table) { if (table.TableTag.HasFlag(TableTag.Server)) { _writer.NewLine(); TableGenerate(table); } } } public JsonTableGenerater(JsonWriter writer) { _writer = writer; } } }