Пример #1
0
 public static string ToConvertRecord(DefTable table, Record record, string converType)
 {
     switch (converType)
     {
         case "convert_json":
         {
             // data_json与data_json2格式区别在于
             // data_json的map格式是 [[key1,value1],[] ..]
             // data_json2的map格式是 { key1:value1, ...}
             var ss = new MemoryStream();
             var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
             {
                 Indented = true,
                 SkipValidation = false,
                 Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
             });
             record.Data.Apply(JsonConvertor.Ins, jsonWriter);
             jsonWriter.Flush();
             return System.Text.Encoding.UTF8.GetString(DataUtil.StreamToBytes(ss));
         }
         case "convert_lua":
         {
             return LuaConvertor.Ins.ExportRecord(table, record);
         }
         default:
         {
             throw new ArgumentException($"not support datatype:{converType}");
         }
     }
 }
Пример #2
0
        public static object ToOutputData(DefTable table, List <Record> records, string dataType)
        {
            switch (dataType)
            {
            case "data_bin":
            {
                var buf = ThreadLocalTemporalByteBufPool.Alloc(1024 * 1024);
                BinaryExportor.Ins.WriteList(table, records, buf);
                var bytes = buf.CopyData();
                ThreadLocalTemporalByteBufPool.Free(buf);
                return(bytes);
            }

            case "data_json":
            case "data_json2":
            {
                // data_json与data_json2格式区别在于
                // data_json的map格式是 [[key1,value1],[] ..]
                // data_json2的map格式是 { key1:value1, ...}
                var ss         = new MemoryStream();
                var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
                    {
                        Indented       = !table.Assembly.OutputCompactJson,
                        SkipValidation = false,
                        Encoder        = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
                    });
                if (dataType == "data_json")
                {
                    JsonExportor.Ins.WriteAsArray(records, jsonWriter);
                }
                else
                {
                    Json2Exportor.Ins.WriteAsObject(table, records, jsonWriter);
                }
                jsonWriter.Flush();
                return(DataUtil.StreamToBytes(ss));
            }

            case "data_lua":
            {
                var content = new StringBuilder();

                switch (table.Mode)
                {
                case ETableMode.ONE:
                {
                    LuaExportor.Ins.ExportTableSingleton(table, records[0], content);
                    break;
                }

                case ETableMode.MAP:
                {
                    LuaExportor.Ins.ExportTableMap(table, records, content);
                    break;
                }

                case ETableMode.LIST:
                {
                    LuaExportor.Ins.ExportTableList(table, records, content);
                    break;
                }

                default:
                {
                    throw new NotSupportedException();
                }
                }
                return(string.Join('\n', content));
            }

            case "data_protobuf_bin":
            {
                var ms = new MemoryStream();
                ProtobufBinExportor.Ins.WriteList(table, records, ms);
                return(DataUtil.StreamToBytes(ms));
            }

            case "data_protobuf_json":
            {
                var ss         = new MemoryStream();
                var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
                    {
                        Indented       = !table.Assembly.OutputCompactJson,
                        SkipValidation = false,
                        Encoder        = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
                    });
                ProtobufJsonExportor.Ins.WriteAsTable(records, jsonWriter);
                jsonWriter.Flush();
                return(DataUtil.StreamToBytes(ss));
            }

            case "data_msgpack":
            {
                var ms     = new System.Buffers.ArrayBufferWriter <byte>();
                var writer = new MessagePackWriter(ms);
                MsgPackExportor.Ins.WriteList(table, records, ref writer);
                writer.Flush();
                return(ms.WrittenSpan.ToArray());
            }

            case "data_flatbuffers_json":
            {
                var ss         = new MemoryStream();
                var jsonWriter = new Utf8JsonWriter(ss, new JsonWriterOptions()
                    {
                        Indented       = !table.Assembly.OutputCompactJson,
                        SkipValidation = false,
                        Encoder        = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All),
                    });
                FlatBuffersJsonExportor.Ins.WriteAsTable(records, jsonWriter);
                jsonWriter.Flush();
                return(DataUtil.StreamToBytes(ss));
            }

            //case "data_erlang":
            //{
            //    var content = new StringBuilder();
            //    switch (table.Mode)
            //    {
            //        case ETableMode.ONE:
            //        {
            //            ErlangExport.Ins.ExportTableSingleton(table, records[0], content);
            //            break;
            //        }
            //        case ETableMode.MAP:
            //        {
            //            ErlangExport.Ins.ExportTableMap(table, records, content);
            //            break;
            //        }
            //        default:
            //        {
            //            throw new NotSupportedException();
            //        }
            //    }
            //    return content.ToString();
            //}
            default:
            {
                throw new ArgumentException($"not support datatype:{dataType}");
            }
            }
        }