Skip to content

Commit 1ac77ef

Browse files
scorteanucosminMrBlue
authored andcommitted
Update serializer to avoid using leaveOpen option
1 parent ff44e7e commit 1ac77ef

3 files changed

Lines changed: 18 additions & 23 deletions

File tree

src/Common/Constants.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
using System.Text.RegularExpressions;
1+
using System.Text;
2+
using System.Text.RegularExpressions;
23

34
namespace Oxide.CSharp.Common
45
{
56
internal static class Constants
67
{
78
internal static readonly Serializer Serializer = new();
9+
internal static readonly UTF8Encoding CompilerEncoding = new(false);
810

911
internal const string CompilerDownloadUrl = "https://downloads.oxidemod.com/artifacts/Oxide.Compiler/{0}/";
1012
internal const string CompilerBasicArguments = "-unsafe true --setting:Force true -ms true";

src/CompilerStream/MessageBrokerService.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,14 @@ private async Task WorkerAsync(CancellationToken cancellationToken)
9191
private void WriteMessage(CompilerMessage message)
9292
{
9393
byte[] headerBuffer = ArrayPool<byte>.Shared.Take(sizeof(int));
94+
95+
using MemoryStream memoryStream = new();
96+
using StreamWriter streamWriter = new(memoryStream, Constants.CompilerEncoding, DefaultMaxBufferSize);
9497
try
9598
{
96-
using MemoryStream memoryStream = new();
97-
Constants.Serializer.SerializeToStream(memoryStream, message, DefaultMaxBufferSize);
99+
Constants.Serializer.GetJsonSerializer().Serialize(streamWriter, message);
98100

99101
int length = (int)memoryStream.Length;
100-
101102
length.WriteBigEndian(headerBuffer);
102103

103104
_pipeServer.Write(headerBuffer, 0, sizeof(int));
@@ -109,6 +110,7 @@ private void WriteMessage(CompilerMessage message)
109110
}
110111
finally
111112
{
113+
streamWriter.Flush();
112114
ArrayPool<byte>.Shared.Return(headerBuffer);
113115
}
114116
}

src/Serializer.cs

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,34 @@
11
extern alias References;
22
using System.IO;
3-
using System.Text;
3+
using Oxide.CSharp.Common;
44
using References::Newtonsoft.Json;
55

66
namespace Oxide.CSharp;
77

8-
public class Serializer
8+
internal class Serializer
99
{
1010
private readonly JsonSerializer _jsonSerializer;
11-
private readonly UTF8Encoding _encoding;
1211

13-
public Serializer()
12+
internal Serializer()
1413
{
1514
_jsonSerializer = new JsonSerializer();
16-
_encoding = new UTF8Encoding(false);
1715
}
1816

19-
public void SerializeToStream<T>(MemoryStream memoryStream, T type, int bufferSize) where T : class
20-
{
21-
using StreamWriter streamWriter = new(memoryStream, _encoding, bufferSize, leaveOpen: true);
22-
23-
_jsonSerializer.Serialize(streamWriter, type);
24-
25-
streamWriter.Flush();
26-
}
27-
28-
public byte[] Serialize<T>(T type) where T : class
17+
internal byte[] Serialize<T>(T type) where T : class
2918
{
3019
using MemoryStream memoryStream = new();
31-
using StreamWriter streamWriter = new(memoryStream, _encoding);
20+
using StreamWriter streamWriter = new(memoryStream, Constants.CompilerEncoding);
3221
_jsonSerializer.Serialize(streamWriter, type);
3322
streamWriter.Flush();
3423
return memoryStream.ToArray();
3524
}
3625

37-
public T Deserialize<T>(byte[] data) where T : class
26+
internal T? Deserialize<T>(byte[] data) where T : class
3827
{
3928
using MemoryStream memoryStream = new(data);
40-
using StreamReader streamReader = new(memoryStream, _encoding);
41-
return (T)_jsonSerializer.Deserialize(streamReader, typeof(T));
29+
using StreamReader streamReader = new(memoryStream, Constants.CompilerEncoding);
30+
return (T?)_jsonSerializer.Deserialize(streamReader, typeof(T));
4231
}
32+
33+
internal JsonSerializer GetJsonSerializer() => _jsonSerializer;
4334
}

0 commit comments

Comments
 (0)