Winify – Blame information for rev 8

Subversion Repositories:
Rev:
Rev Author Line No. Line
4 office 1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Xml;
7 using System.Xml.Schema;
8 using System.Xml.Serialization;
9  
8 office 10 namespace Winify.Servers.Serialization
4 office 11 {
12 public static class ServersSerialization
13 {
14 #region Public Enums, Properties and Fields
15  
16 /// <summary>
17 /// Cached XML serializer for the configuration.
18 /// </summary>
8 office 19 public static XmlSerializer XmlSerializer { get; } = new XmlSerializer(typeof(global::Servers.Servers));
4 office 20  
21 #endregion
22  
23 #region Public Methods
24  
8 office 25 public static async Task<ServersSerializationState> Deserialize(string file)
4 office 26 {
27 var validationEventArgs = new List<ValidationEventArgs>();
28  
29 void XmlReaderSettingsValidationEventHandler(object sender, ValidationEventArgs e)
30 {
31 validationEventArgs.Add(e);
32 }
33  
8 office 34 global::Servers.Servers servers;
4 office 35  
36 var settings = new XmlReaderSettings();
37  
38 try
39 {
40 settings.Async = true;
41 settings.DtdProcessing = DtdProcessing.Parse;
42 settings.ValidationType = ValidationType.Schema;
43  
44 settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
45 XmlSchemaValidationFlags.ProcessSchemaLocation |
46 XmlSchemaValidationFlags.ReportValidationWarnings |
47 XmlSchemaValidationFlags.ProcessIdentityConstraints;
48  
49 settings.Schemas = new XmlSchemaSet();
50  
51 settings.ValidationEventHandler += XmlReaderSettingsValidationEventHandler;
52  
53 settings.Schemas.Add("urn:winify-servers-schema", "Servers.xsd");
54  
55 using (var fileStream =
56 new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
57 {
58 using (var xmlReader = XmlReader.Create(fileStream,
59 settings))
60 {
61 var stringBuilder = new StringBuilder();
62  
63 using (var stringWriter = new StringWriter(stringBuilder))
64 {
65 while (await xmlReader.ReadAsync())
66 {
67 await stringWriter.WriteAsync(await xmlReader.ReadOuterXmlAsync());
68 }
69 }
70  
71 using (var stringReader = new StringReader(stringBuilder.ToString()))
72 {
73 servers =
8 office 74 (global::Servers.Servers) XmlSerializer
4 office 75 .Deserialize(stringReader);
76 }
77 }
78 }
79 }
80 catch (Exception ex)
81 {
8 office 82 return new ServersSerializationFailure(ex, validationEventArgs);
4 office 83 }
84 finally
85 {
86 settings.ValidationEventHandler -=
87 XmlReaderSettingsValidationEventHandler;
88 }
89  
8 office 90 return new ServersSerializationSuccess(servers, validationEventArgs);
4 office 91 }
92  
8 office 93 public static async Task<ServersSerializationState> Serialize(global::Servers.Servers servers, string file)
4 office 94 {
95 try
96 {
97 using (var memoryStream = new MemoryStream())
98 {
99 using (var xmlWriter =
100 XmlWriter.Create(memoryStream,
101 new XmlWriterSettings
102 {
103 Async = true,
104 Indent = true,
105 IndentChars = " ",
106 OmitXmlDeclaration = false
107 }))
108 {
109 await xmlWriter.WriteDocTypeAsync("Servers",
110 null,
111 null,
112 "<!ATTLIST Servers xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>");
113  
114 XmlSerializer.Serialize(xmlWriter, servers);
115  
116 using (var fileStream =
117 new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
118 {
119 memoryStream.Position = 0L;
120  
121 await memoryStream.CopyToAsync(fileStream);
122 }
123 }
124 }
125 }
126 catch (Exception ex)
127 {
8 office 128 return new ServersSerializationFailure(ex);
4 office 129 }
130  
8 office 131 return new ServersSerializationSuccess();
4 office 132 }
133  
8 office 134 public static async Task<ServersSerializationState> Serialize(global::Servers.Servers servers,
135 MemoryStream outputStream)
4 office 136 {
137 try
138 {
139 using (var memoryStream = new MemoryStream())
140 {
141 using (var xmlWriter =
142 XmlWriter.Create(memoryStream,
143 new XmlWriterSettings
144 {
145 Async = true,
146 Indent = true,
147 IndentChars = " ",
148 OmitXmlDeclaration = false
149 }))
150 {
151 await xmlWriter.WriteDocTypeAsync("Servers",
152 null,
153 null,
154 "<!ATTLIST Servers xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>");
155  
156 XmlSerializer.Serialize(xmlWriter, servers);
157  
158 memoryStream.Position = 0L;
159  
160 await memoryStream.CopyToAsync(outputStream);
161 }
162 }
163 }
164 catch (Exception ex)
165 {
8 office 166 return new ServersSerializationFailure(ex);
4 office 167 }
168  
8 office 169 return new ServersSerializationSuccess();
4 office 170 }
171  
172 #endregion
173 }
174 }