More efficient prefs serialization over net messages.

This commit is contained in:
Pieter-Jan Briers
2020-07-30 23:40:14 +02:00
parent a994f6389a
commit 2ba86c6476
2 changed files with 19 additions and 16 deletions

View File

@@ -7,7 +7,7 @@ namespace Content.Shared.Preferences
/// Information needed for character setup. /// Information needed for character setup.
/// </summary> /// </summary>
[Serializable, NetSerializable] [Serializable, NetSerializable]
public class GameSettings public sealed class GameSettings
{ {
private int _maxCharacterSlots; private int _maxCharacterSlots;

View File

@@ -29,16 +29,16 @@ namespace Content.Shared.Preferences
public override void ReadFromBuffer(NetIncomingMessage buffer) public override void ReadFromBuffer(NetIncomingMessage buffer)
{ {
var serializer = IoCManager.Resolve<IRobustSerializer>(); var serializer = IoCManager.Resolve<IRobustSerializer>();
var length = buffer.ReadInt32(); var length = buffer.ReadVariableInt32();
using (var stream = buffer.ReadAsStream(length)) using (var stream = buffer.ReadAsStream(length))
{ {
Preferences = serializer.Deserialize<PlayerPreferences>(stream); serializer.DeserializeDirect(stream, out Preferences);
} }
length = buffer.ReadInt32(); length = buffer.ReadVariableInt32();
using (var stream = buffer.ReadAsStream(length)) using (var stream = buffer.ReadAsStream(length))
{ {
Settings = serializer.Deserialize<GameSettings>(stream); serializer.DeserializeDirect(stream, out Settings);
} }
} }
@@ -47,15 +47,17 @@ namespace Content.Shared.Preferences
var serializer = IoCManager.Resolve<IRobustSerializer>(); var serializer = IoCManager.Resolve<IRobustSerializer>();
using (var stream = new MemoryStream()) using (var stream = new MemoryStream())
{ {
serializer.Serialize(stream, Preferences); serializer.SerializeDirect(stream, Preferences);
buffer.Write((int)stream.Length); buffer.WriteVariableInt32((int)stream.Length);
buffer.Write(stream.ToArray()); stream.TryGetBuffer(out var segment);
buffer.Write(segment);
} }
using (var stream = new MemoryStream()) using (var stream = new MemoryStream())
{ {
serializer.Serialize(stream, Settings); serializer.SerializeDirect(stream, Settings);
buffer.Write((int)stream.Length); buffer.WriteVariableInt32((int)stream.Length);
buffer.Write(stream.ToArray()); stream.TryGetBuffer(out var segment);
buffer.Write(segment);
} }
} }
} }
@@ -78,12 +80,12 @@ namespace Content.Shared.Preferences
public override void ReadFromBuffer(NetIncomingMessage buffer) public override void ReadFromBuffer(NetIncomingMessage buffer)
{ {
SelectedCharacterIndex = buffer.ReadInt32(); SelectedCharacterIndex = buffer.ReadVariableInt32();
} }
public override void WriteToBuffer(NetOutgoingMessage buffer) public override void WriteToBuffer(NetOutgoingMessage buffer)
{ {
buffer.Write(SelectedCharacterIndex); buffer.WriteVariableInt32(SelectedCharacterIndex);
} }
} }
@@ -108,7 +110,7 @@ namespace Content.Shared.Preferences
{ {
Slot = buffer.ReadInt32(); Slot = buffer.ReadInt32();
var serializer = IoCManager.Resolve<IRobustSerializer>(); var serializer = IoCManager.Resolve<IRobustSerializer>();
var length = buffer.ReadInt32(); var length = buffer.ReadVariableInt32();
using var stream = buffer.ReadAsStream(length); using var stream = buffer.ReadAsStream(length);
Profile = serializer.Deserialize<ICharacterProfile>(stream); Profile = serializer.Deserialize<ICharacterProfile>(stream);
} }
@@ -120,8 +122,9 @@ namespace Content.Shared.Preferences
using (var stream = new MemoryStream()) using (var stream = new MemoryStream())
{ {
serializer.Serialize(stream, Profile); serializer.Serialize(stream, Profile);
buffer.Write((int)stream.Length); buffer.WriteVariableInt32((int)stream.Length);
buffer.Write(stream.ToArray()); stream.TryGetBuffer(out var segment);
buffer.Write(segment);
} }
} }
} }