public void Example_WriteJsonUsingICodedOutputStream() { TestXmlMessage message = TestXmlMessage.CreateBuilder() .SetValid(true) .Build(); using (TextWriter output = new StringWriter()) { ICodedOutputStream writer = JsonFormatWriter.CreateInstance(output); writer.WriteMessageStart(); //manually begin the message, output is '{' writer.Flush(); Assert.AreEqual("{", output.ToString()); ICodedOutputStream stream = writer; message.WriteTo(stream); //write the message normally writer.Flush(); Assert.AreEqual(@"{""valid"":true", output.ToString()); writer.WriteMessageEnd(); //manually write the end message '}' Assert.AreEqual(@"{""valid"":true}", output.ToString()); } }
public void TestMessageMissingExtensions() { TestXmlMessage original = TestXmlMessage.CreateBuilder() .SetValid(true) .SetText("text") .SetExtension(UnittestExtrasXmltest.ExtensionText, " extension text value ! ") .SetExtension(UnittestExtrasXmltest.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build()) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 100) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 101) .AddExtension(UnittestExtrasXmltest.ExtensionNumber, 102) .SetExtension(UnittestExtrasXmltest.ExtensionEnum, EnumOptions.ONE) .Build(); TestXmlMessage message = original.ToBuilder() .ClearExtension(UnittestExtrasXmltest.ExtensionText) .ClearExtension(UnittestExtrasXmltest.ExtensionMessage) .ClearExtension(UnittestExtrasXmltest.ExtensionNumber) .ClearExtension(UnittestExtrasXmltest.ExtensionEnum) .Build(); JsonFormatWriter writer = JsonFormatWriter.CreateInstance(); writer.WriteMessage(original); Content = writer.ToString(); IMessageLite copy = JsonFormatReader.CreateInstance(Content) .Merge(message.CreateBuilderForType()).Build(); Assert.AreNotEqual(original, message); Assert.AreNotEqual(original, copy); Assert.AreEqual(message, copy); }
public void TestNestedMessageArray() { JsonFormatWriter writer = JsonFormatWriter.CreateInstance(); using (writer.StartArray()) { using (writer.StartArray()) { writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build()); writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build()); } using (writer.StartArray()) writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build()); } string json = writer.ToString(); JsonFormatReader reader = JsonFormatReader.CreateInstance(json); TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); int ordinal = 0; foreach (JsonFormatReader r in reader.EnumerateArray()) { foreach (JsonFormatReader r2 in r.EnumerateArray()) { r2.Merge(builder); Assert.AreEqual(++ordinal, builder.Number); } } Assert.AreEqual(3, ordinal); Assert.AreEqual(3, builder.TextlinesCount); }
protected override object SerializeMessage <TMessage, TBuilder>(TMessage message) { StringWriter sw = new StringWriter(); JsonFormatWriter.CreateInstance(sw) .WriteMessage(message); return(sw.ToString()); }
/// <summary> /// Serializes the message to JSON text. This is a trivial wrapper /// around Serialization.JsonFormatWriter.WriteMessage. /// </summary> public static string ToJson( #if !NOEXTENSIONS this #endif IMessageLite message) { JsonFormatWriter w = JsonFormatWriter.CreateInstance(); w.WriteMessage(message); return(w.ToString()); }
public void TestReadWriteJsonWithoutRoot() { TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder(); TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build(); string Json; using (StringWriter sw = new StringWriter()) { ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw); message.WriteTo(output); output.Flush(); Json = sw.ToString(); } Assert.AreEqual(@"""text"":""abc"",""number"":123", Json); ICodedInputStream input = JsonFormatReader.CreateInstance(Json); TestXmlMessage copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build(); Assert.AreEqual(message, copy); }
protected void FormatterAssert <TMessage>(TMessage message, params string[] expecting) where TMessage : IMessageLite { StringWriter sw = new StringWriter(); JsonFormatWriter.CreateInstance(sw).WriteMessage(message); Content = sw.ToString(); ExtensionRegistry registry = ExtensionRegistry.CreateInstance(); UnittestExtrasXmltest.RegisterAllExtensions(registry); IMessageLite copy = JsonFormatReader.CreateInstance(Content) .Merge(message.WeakCreateBuilderForType(), registry).WeakBuild(); Assert.AreEqual(typeof(TMessage), copy.GetType()); Assert.AreEqual(message, copy); foreach (string expect in expecting) { Assert.IsTrue(Content.IndexOf(expect) >= 0); } }
public void TestJsonFormatted() { TestXmlMessage message = TestXmlMessage.CreateBuilder() .SetValid(true) .SetNumber(0x1010) .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()) .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE)) .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE).AddOptions(EnumOptions.TWO)) .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().SetBinary(ByteString.CopyFromUtf8("abc"))) .Build(); StringWriter sw = new StringWriter(); JsonFormatWriter.CreateInstance(sw).Formatted() .WriteMessage(message); string json = sw.ToString(); TestXmlMessage copy = JsonFormatReader.CreateInstance(json) .Merge(TestXmlMessage.CreateBuilder()).Build(); Assert.AreEqual(message, copy); }
// Thank you Unity for invoke "support" private void SaveServerManualWithoutInvoke(object sender, DoWorkEventArgs e) { try { //s.DoSave(ref builder); SaveScene(ref builder); SaveInstances(ref builder); timestamp2.Stop(); timestamp3 = SystemTimestamp.Restart; fsave = builder.Build(); timestamp3.Stop(); int num = fsave.SceneObjectCount + fsave.InstanceObjectCount; if (save.friendly) { using (FileStream stream = File.Open(path + ".json", FileMode.Create, FileAccess.Write)) { JsonFormatWriter writer = JsonFormatWriter.CreateInstance(stream); writer.Formatted(); writer.WriteMessage(fsave); } } SystemTimestamp timestamp5 = timestamp4 = SystemTimestamp.Restart; using (FileStream stream2 = File.Open(path + ".new", FileMode.Create, FileAccess.Write)) { fsave.WriteTo(stream2); stream2.Flush(); } timestamp4.Stop(); if (File.Exists(path + ".old." + (SaveCopies + 1))) { File.Delete(path + ".old." + (SaveCopies + 1)); } for (int i = SaveCopies; i >= 0; i--) { if (File.Exists(path + ".old." + i)) { File.Move(path + ".old." + i, path + ".old." + (i + 1)); } } if (File.Exists(path)) { File.Move(path, path + ".old.0"); } if (File.Exists(path + ".new")) { File.Move(path + ".new", path); } timestamp5.Stop(); restart.Stop(); if (Hooks.IsShuttingDown) { ServerIsSaving = false; Logger.Log(string.Concat(new object[] { " Saved ", num, " Object(s). Took ", restart.ElapsedSeconds, " seconds." })); return; } Loom.QueueOnMainThread(() => { if (save.profile) { object[] args = new object[] { num, timestamp2.ElapsedSeconds, timestamp2.ElapsedSeconds / restart.ElapsedSeconds, timestamp3.ElapsedSeconds, timestamp3.ElapsedSeconds / restart.ElapsedSeconds, timestamp4.ElapsedSeconds, timestamp4.ElapsedSeconds / restart.ElapsedSeconds, timestamp5.ElapsedSeconds, timestamp5.ElapsedSeconds / restart.ElapsedSeconds, restart.ElapsedSeconds, restart.ElapsedSeconds / restart.ElapsedSeconds }; Logger.Log(string.Format( " Saved {0} Object(s) [times below are in elapsed seconds]\r\n Logic:\t{1,-16:0.000000}\t{2,7:0.00%}\r\n Build:\t{3,-16:0.000000}\t{4,7:0.00%}\r\n Stream:\t{5,-16:0.000000}\t{6,7:0.00%}\r\n All IO:\t{7,-16:0.000000}\t{8,7:0.00%}\r\n Total:\t{9,-16:0.000000}\t{10,7:0.00%}", args)); } else { Logger.Log(string.Concat(new object[] { " Saved ", num, " Object(s). Took ", restart.ElapsedSeconds, " seconds." })); } Hooks.OnServerSaveEvent(num, restart.ElapsedSeconds); ServerIsSaving = false; LastSaveTime = DateTime.Now; // Process the unprocessed hashset values here without causing HashSet modified error. List <ServerSave> RemovableKeys = new List <ServerSave>(); foreach (ServerSave x in UnProcessedSaves.Keys) { try { if (UnProcessedSaves.ContainsKey(x)) { byte value = UnProcessedSaves[x]; if (value == 1) { if (ServerSaveManager.Instances.registers.Add(x)) { ServerSaveManager.Instances.ordered.Add(x); } ServerSaveManager.Instances.ordered.Add(x); } else { if (ServerSaveManager.Instances.registers.Remove(x)) { ServerSaveManager.Instances.ordered.Remove(x); } } RemovableKeys.Add(x); } } catch (KeyNotFoundException ex) { Logger.LogError("[RegisterHook KeyNotFoundException] " + ex); } catch (Exception ex) { Logger.LogError("[RegisterHook Error] " + ex); } } foreach (var x in RemovableKeys) { UnProcessedSaves.Remove(x); } }); } catch (Exception ex) { Logger.LogError("[ServerSaveHandler Error 0x2] " + ex); ServerIsSaving = false; LastSaveTime = DateTime.Now; NextServerSaveTime = LastSaveTime.AddMinutes(ServerSaveTime); if (StopServerOnSaveFail) { Logger.LogWarning("[Fougerite WorldSave] We have caught an error. Killing server as requested."); Process.GetCurrentProcess().Kill(); } } }
/// <summary> /// Runs a single test. Error messages are displayed to Console.Error, and the return value indicates /// general success/failure. /// </summary> public static bool RunTest(string typeName, string file, byte[] inputData) { WriteLine("Benchmarking {0} with file {1}", typeName, file); IMessage defaultMessage; try { defaultMessage = MessageUtil.GetDefaultMessage(typeName); } catch (ArgumentException e) { Console.Error.WriteLine(e.Message); return(false); } try { ExtensionRegistry registry = ExtensionRegistry.Empty; inputData = inputData ?? File.ReadAllBytes(file); MemoryStream inputStream = new MemoryStream(inputData); ByteString inputString = ByteString.CopyFrom(inputData); IMessage sampleMessage = defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(inputString, registry).WeakBuild(); IDictionary <string, object> dictionary = null; byte[] jsonBytes = null, xmlBytes = null; /*no pun intended, well... maybe for xml*/ if (OtherFormats) { using (MemoryStream temp = new MemoryStream()) { XmlFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage); xmlBytes = temp.ToArray(); } using (MemoryStream temp = new MemoryStream()) { JsonFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage); jsonBytes = temp.ToArray(); } dictionary = new Dictionary <string, object>(StringComparer.Ordinal); new DictionaryWriter(dictionary).WriteMessage(sampleMessage); } //Serializers if (!FastTest) { RunBenchmark("Serialize to byte string", inputData.Length, () => sampleMessage.ToByteString()); } RunBenchmark("Serialize to byte array", inputData.Length, () => sampleMessage.ToByteArray()); if (!FastTest) { RunBenchmark("Serialize to memory stream", inputData.Length, () => sampleMessage.WriteTo(new MemoryStream())); } if (OtherFormats) { RunBenchmark("Serialize to xml", xmlBytes.Length, () => { XmlFormatWriter.CreateInstance(new MemoryStream(), Encoding.UTF8).WriteMessage(sampleMessage); }); RunBenchmark("Serialize to json", jsonBytes.Length, () => { JsonFormatWriter.CreateInstance().WriteMessage(sampleMessage); }); RunBenchmark("Serialize to json via xml", jsonBytes.Length, () => XmlFormatWriter.CreateInstance( JsonReaderWriterFactory.CreateJsonWriter(new MemoryStream(), Encoding.UTF8)) .SetOptions(XmlWriterOptions.OutputJsonTypes) .WriteMessage(sampleMessage) ); RunBenchmark("Serialize to dictionary", sampleMessage.SerializedSize, () => new DictionaryWriter().WriteMessage(sampleMessage)); } //Deserializers if (!FastTest) { RunBenchmark("Deserialize from byte string", inputData.Length, () => defaultMessage.WeakCreateBuilderForType() .WeakMergeFrom(inputString, registry) .WeakBuild() ); } RunBenchmark("Deserialize from byte array", inputData.Length, () => defaultMessage.WeakCreateBuilderForType() .WeakMergeFrom(CodedInputStream.CreateInstance(inputData), registry) .WeakBuild() ); if (!FastTest) { RunBenchmark("Deserialize from memory stream", inputData.Length, () => { inputStream.Position = 0; defaultMessage.WeakCreateBuilderForType().WeakMergeFrom( CodedInputStream.CreateInstance(inputStream), registry) .WeakBuild(); }); } if (OtherFormats) { RunBenchmark("Deserialize from xml", xmlBytes.Length, () => XmlFormatReader.CreateInstance(xmlBytes).Merge( defaultMessage.WeakCreateBuilderForType()).WeakBuild()); RunBenchmark("Deserialize from json", jsonBytes.Length, () => JsonFormatReader.CreateInstance(jsonBytes).Merge( defaultMessage.WeakCreateBuilderForType()).WeakBuild()); RunBenchmark("Deserialize from json via xml", jsonBytes.Length, () => XmlFormatReader.CreateInstance(JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max)) .SetOptions(XmlReaderOptions.ReadNestedArrays).Merge( defaultMessage.WeakCreateBuilderForType()).WeakBuild()); RunBenchmark("Deserialize from dictionary", sampleMessage.SerializedSize, () => new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()). WeakBuild()); } WriteLine(String.Empty); return(true); } catch (Exception e) { Console.Error.WriteLine("Error: {0}", e.Message); Console.Error.WriteLine(); Console.Error.WriteLine("Detailed exception information: {0}", e); return(false); } }