1
2
3
4
5
6 using System;
7 using System.IO;
8 using System.Net.Sockets;
9
10 namespace System.Xml
11 {
12 [nodiscard]
13 public Result<bool> SendDocument(TcpSocket& socket, Document* document)
14 {
15 StringWriter writer;
16 System.Text.CodeFormatter formatter(writer);
17 formatter.SetIndentSize(1);
18 auto writeResult = document->Write(formatter);
19 if (writeResult.Error())
20 {
21 return Result<bool>(ErrorId(writeResult.GetErrorId()));
22 }
23 string s = writer.GetString();
24 auto sendResult = SendString(socket, s);
25 if (sendResult.Error())
26 {
27 return Result<bool>(ErrorId(sendResult.GetErrorId()));
28 }
29 return Result<bool>(true);
30 }
31
32 [nodiscard]
33 public Result<UniquePtr<Document>> ReceiveDocument(TcpSocket& socket, System.Lex.FileMap& fileMap, int& documentCount)
34 {
35 auto receiveResult = ReceiveString(socket);
36 if (receiveResult.Error())
37 {
38 return Result<UniquePtr<Document>>(ErrorId(receiveResult.GetErrorId()));
39 }
40 string s = Rvalue(receiveResult.Value());
41 string systemId = "socket." + ToString(documentCount++);
42 return ParseXmlDocumentContent(s, systemId, fileMap);
43 }