Skip to content

Commit 7dce94a

Browse files
Merge pull request #398 from Unity-Technologies/feature/datastream_serialization
feat(serialization): Bringing over the DataStream class from UTP
2 parents a5737ea + 592faee commit 7dce94a

10 files changed

Lines changed: 920 additions & 4 deletions

com.unity.multiplayer.mlapi/Runtime/Serialization/DataStream.cs

Lines changed: 661 additions & 0 deletions
Large diffs are not rendered by default.

com.unity.multiplayer.mlapi/Runtime/Serialization/DataStream.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.unity.multiplayer.mlapi/Runtime/com.unity.multiplayer.mlapi.runtime.asmdef

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
{
22
"name": "Unity.Multiplayer.MLAPI.Runtime",
33
"rootNamespace": "MLAPI",
4-
"references": [],
4+
"references": [
5+
"GUID:e0cd26848372d4e5c891c569017e11f1"
6+
],
57
"includePlatforms": [],
68
"excludePlatforms": [],
7-
"allowUnsafeCode": false,
9+
"allowUnsafeCode": true,
810
"overrideReferences": false,
911
"precompiledReferences": [],
1012
"autoReferenced": true,

com.unity.multiplayer.mlapi/Tests.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.unity.multiplayer.mlapi/Tests/Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
using System;
2+
using NUnit.Framework;
3+
using Unity.Collections;
4+
using MLAPI.Serialization;
5+
6+
namespace MLAPI.Serialization.Tests
7+
{
8+
public class DataStreamTests
9+
{
10+
[Test]
11+
public void CreateStreamWithPartOfSourceByteArray()
12+
{
13+
byte[] byteArray =
14+
{
15+
(byte) 's', (byte) 'o', (byte) 'm', (byte) 'e',
16+
(byte) ' ', (byte) 'd', (byte) 'a', (byte) 't', (byte) 'a'
17+
};
18+
19+
DataStreamWriter dataStream;
20+
dataStream = new DataStreamWriter(4, Allocator.Temp);
21+
dataStream.WriteBytes(new NativeArray<byte>(byteArray, Allocator.Temp).GetSubArray(0, 4));
22+
Assert.AreEqual(dataStream.Length, 4);
23+
var reader = new DataStreamReader(dataStream.AsNativeArray());
24+
for (int i = 0; i < dataStream.Length; ++i)
25+
{
26+
Assert.AreEqual(byteArray[i], reader.ReadByte());
27+
}
28+
29+
Assert.Throws<ArgumentOutOfRangeException>(() => { reader.ReadByte(); });
30+
}
31+
32+
[Test]
33+
public void CreateStreamWithSourceByteArray()
34+
{
35+
byte[] byteArray = new byte[100];
36+
byteArray[0] = (byte) 'a';
37+
byteArray[1] = (byte) 'b';
38+
byteArray[2] = (byte) 'c';
39+
40+
DataStreamWriter dataStream;
41+
dataStream = new DataStreamWriter(byteArray.Length, Allocator.Temp);
42+
dataStream.WriteBytes(new NativeArray<byte>(byteArray, Allocator.Temp));
43+
var reader = new DataStreamReader(dataStream.AsNativeArray());
44+
for (int i = 0; i < byteArray.Length; ++i)
45+
{
46+
Assert.AreEqual(byteArray[i], reader.ReadByte());
47+
}
48+
}
49+
50+
[Test]
51+
public void ReadIntoExistingByteArray()
52+
{
53+
var byteArray = new NativeArray<byte>(100, Allocator.Temp);
54+
55+
DataStreamWriter dataStream;
56+
dataStream = new DataStreamWriter(3, Allocator.Temp);
57+
{
58+
dataStream.WriteByte((byte) 'a');
59+
dataStream.WriteByte((byte) 'b');
60+
dataStream.WriteByte((byte) 'c');
61+
var reader = new DataStreamReader(dataStream.AsNativeArray());
62+
reader.ReadBytes(byteArray.GetSubArray(0, dataStream.Length));
63+
reader = new DataStreamReader(dataStream.AsNativeArray());
64+
for (int i = 0; i < reader.Length; ++i)
65+
{
66+
Assert.AreEqual(byteArray[i], reader.ReadByte());
67+
}
68+
}
69+
}
70+
71+
[Test]
72+
public void ReadingDataFromStreamWithSliceOffset()
73+
{
74+
var dataStream = new DataStreamWriter(100, Allocator.Temp);
75+
dataStream.WriteByte((byte) 'a');
76+
dataStream.WriteByte((byte) 'b');
77+
dataStream.WriteByte((byte) 'c');
78+
dataStream.WriteByte((byte) 'd');
79+
dataStream.WriteByte((byte) 'e');
80+
dataStream.WriteByte((byte) 'f');
81+
var reader = new DataStreamReader(dataStream.AsNativeArray().GetSubArray(3, 3));
82+
Assert.AreEqual('d', reader.ReadByte());
83+
Assert.AreEqual('e', reader.ReadByte());
84+
Assert.AreEqual('f', reader.ReadByte());
85+
}
86+
87+
[Test]
88+
public void WriteOutOfBounds()
89+
{
90+
var dataStream = new DataStreamWriter(9, Allocator.Temp);
91+
Assert.IsTrue(dataStream.WriteInt(42));
92+
Assert.AreEqual(4, dataStream.Length);
93+
Assert.IsTrue(dataStream.WriteInt(42));
94+
Assert.AreEqual(8, dataStream.Length);
95+
Assert.IsFalse(dataStream.HasFailedWrites);
96+
Assert.IsFalse(dataStream.WriteInt(42));
97+
Assert.AreEqual(8, dataStream.Length);
98+
Assert.IsTrue(dataStream.HasFailedWrites);
99+
100+
Assert.IsFalse(dataStream.WriteShort(42));
101+
Assert.AreEqual(8, dataStream.Length);
102+
Assert.IsTrue(dataStream.HasFailedWrites);
103+
104+
Assert.IsTrue(dataStream.WriteByte(42));
105+
Assert.AreEqual(9, dataStream.Length);
106+
Assert.IsTrue(dataStream.HasFailedWrites);
107+
108+
Assert.IsFalse(dataStream.WriteByte(42));
109+
Assert.AreEqual(9, dataStream.Length);
110+
Assert.IsTrue(dataStream.HasFailedWrites);
111+
}
112+
113+
[Test]
114+
public void ReadWriteFixedString32()
115+
{
116+
var dataStream = new DataStreamWriter(300 * 4, Allocator.Temp);
117+
118+
var src = new FixedString32("This is a string");
119+
dataStream.WriteFixedString32(src);
120+
121+
//Assert.AreEqual(src.LengthInBytes+2, dataStream.Length);
122+
123+
var reader = new DataStreamReader(dataStream.AsNativeArray());
124+
var dst = reader.ReadFixedString32();
125+
Assert.AreEqual(src, dst);
126+
}
127+
128+
[Test]
129+
public void ReadWriteFixedString64()
130+
{
131+
var dataStream = new DataStreamWriter(300 * 4, Allocator.Temp);
132+
133+
var src = new FixedString64("This is a string");
134+
dataStream.WriteFixedString64(src);
135+
136+
//Assert.AreEqual(src.LengthInBytes+2, dataStream.Length);
137+
138+
var reader = new DataStreamReader(dataStream.AsNativeArray());
139+
var dst = reader.ReadFixedString64();
140+
Assert.AreEqual(src, dst);
141+
}
142+
143+
[Test]
144+
public void ReadWriteFixedString128()
145+
{
146+
var dataStream = new DataStreamWriter(300 * 4, Allocator.Temp);
147+
148+
var src = new FixedString128("This is a string");
149+
dataStream.WriteFixedString128(src);
150+
151+
//Assert.AreEqual(src.LengthInBytes+2, dataStream.Length);
152+
153+
var reader = new DataStreamReader(dataStream.AsNativeArray());
154+
var dst = reader.ReadFixedString128();
155+
Assert.AreEqual(src, dst);
156+
}
157+
158+
[Test]
159+
public void ReadWriteFixedString512()
160+
{
161+
var dataStream = new DataStreamWriter(300 * 4, Allocator.Temp);
162+
163+
var src = new FixedString512("This is a string");
164+
dataStream.WriteFixedString512(src);
165+
166+
//Assert.AreEqual(src.LengthInBytes+2, dataStream.Length);
167+
168+
var reader = new DataStreamReader(dataStream.AsNativeArray());
169+
var dst = reader.ReadFixedString512();
170+
Assert.AreEqual(src, dst);
171+
}
172+
173+
[Test]
174+
public void ReadWriteFixedString4096()
175+
{
176+
var dataStream = new DataStreamWriter(300 * 4, Allocator.Temp);
177+
178+
var src = new FixedString4096("This is a string");
179+
dataStream.WriteFixedString4096(src);
180+
181+
//Assert.AreEqual(src.LengthInBytes+2, dataStream.Length);
182+
183+
var reader = new DataStreamReader(dataStream.AsNativeArray());
184+
var dst = reader.ReadFixedString4096();
185+
Assert.AreEqual(src, dst);
186+
}
187+
188+
}
189+
}

com.unity.multiplayer.mlapi/Tests/Editor/DataStreamTests.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "Unity.Multiplayer.MLAPI.EditorTests",
3+
"references": [
4+
"Unity.Collections",
5+
"Unity.Mathematics",
6+
"Unity.Multiplayer.MLAPI.Runtime"
7+
],
8+
"optionalUnityReferences": [
9+
"TestAssemblies"
10+
],
11+
"includePlatforms": [
12+
"Editor"
13+
],
14+
"excludePlatforms": [],
15+
"allowUnsafeCode": true
16+
}

com.unity.multiplayer.mlapi/Tests/Editor/com.unity.mulitplayer.mlapi.editortest.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

com.unity.multiplayer.mlapi/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@
99
"unity"
1010
],
1111
"type": "library",
12-
"hideInEditor": false
13-
}
12+
"hideInEditor": false,
13+
"dependencies": {
14+
"com.unity.collections": "0.14.0-preview.16"
15+
}
16+
}

0 commit comments

Comments
 (0)