Skip to content

feat: INetworkMessage #1187

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 64 commits into from
Sep 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
2fa0f6d
FastBufferWriter implemented and tested (still need to add and update…
ShadauxCat Aug 17, 2021
c36b3af
A few additional tests to cover the last missed cases I can think of …
ShadauxCat Aug 17, 2021
5ac5ef9
FastBufferReader + tests
ShadauxCat Aug 18, 2021
4776737
- More tests
ShadauxCat Aug 19, 2021
f245150
- Removed NativeArray from FastBufferReader and FastBufferWriter, rep…
ShadauxCat Aug 19, 2021
fc944c4
Added utility ref struct "Ref<T>" to more generically support wrappin…
ShadauxCat Aug 19, 2021
cb95862
BufferSerializer and tests.
ShadauxCat Aug 23, 2021
a3e0abc
Removed unnecessary comment.
ShadauxCat Aug 23, 2021
ea31f10
XMLDocs + cleanup for PR
ShadauxCat Aug 24, 2021
057c1fc
Merge branch 'develop' into feature/fast_buffer_reader_writer
ShadauxCat Aug 24, 2021
63309e2
Replaced possibly unaligned memory access with UnsafeUtility.MemCpy..…
ShadauxCat Aug 24, 2021
e9b9305
Resurrected BytewiseUtil.FastCopyBytes as a faster alternative to Uns…
ShadauxCat Aug 24, 2021
aa56440
Reverting an accidental change.
ShadauxCat Aug 24, 2021
fabb3b8
Removed files that got accidentally duplicated from before the rename.
ShadauxCat Aug 24, 2021
3a2a50b
Standards fixes
ShadauxCat Aug 24, 2021
58db1bd
Removed accidentally added files.
ShadauxCat Aug 24, 2021
c827339
Added BuildInfo.json to the .gitignore so I stop accidentally checkin…
ShadauxCat Aug 24, 2021
f8bfb2f
Addressed most of the review feedback. Still need to do a little more…
ShadauxCat Aug 26, 2021
9816b50
standards.py --fix
ShadauxCat Aug 26, 2021
a576552
standards.py --fix
ShadauxCat Aug 26, 2021
5193e39
Fixed incorrect namespaces.
ShadauxCat Aug 26, 2021
119ee2f
-Fixed a couple of issues where growing a FastBufferWriter wouldn't w…
ShadauxCat Aug 26, 2021
7fb2d53
Fix a test failure and better implementation of large growths
ShadauxCat Aug 27, 2021
8ee4610
- Removed RefArray
ShadauxCat Aug 31, 2021
808f28a
First INetworkMessage WIP - not hooked up to anything yet.
ShadauxCat Aug 31, 2021
81c3dc3
Killed DelayUtil.
ShadauxCat Sep 1, 2021
8dfa959
Merge branch 'develop' into wip/inetworkmessage
ShadauxCat Sep 7, 2021
b24d1a7
Hooked up MessagingSystem and converted ConnectionRequestMessage and …
ShadauxCat Sep 8, 2021
441d933
More converted messages
ShadauxCat Sep 10, 2021
1436cf8
Finished converting all messages over and removed all the now-dead code.
ShadauxCat Sep 14, 2021
90f41be
Removed IMessageHandler as it's no longer needed after DelayUtil went…
ShadauxCat Sep 14, 2021
2957095
Fixed tests.
ShadauxCat Sep 14, 2021
7a21615
standards.py --fix
ShadauxCat Sep 14, 2021
1e8761b
Corrected some incorrect xmldocs.
ShadauxCat Sep 14, 2021
89e66e8
-Added some tests for serializing RPC parameters using FastBufferRead…
ShadauxCat Sep 15, 2021
7f95934
Fixed missing send queue information for the server on StartClient().
ShadauxCat Sep 15, 2021
c788567
Added ILPP compile-time check for INetworkMessage Receive() function.
ShadauxCat Sep 15, 2021
eb26475
Missed the meta file.
ShadauxCat Sep 15, 2021
d2a2635
Changed generic function lookup in ILPP to use Cecil instead of relyi…
ShadauxCat Sep 15, 2021
3d176ee
Changed scene management delivery type to ReliableFragmentedSequenced…
ShadauxCat Sep 15, 2021
b190a20
Merge branch 'develop' into wip/inetworkmessage
ShadauxCat Sep 15, 2021
fa848a4
Fixed DontDestroyWithOwner throwing an exception on disconnect, fixed…
ShadauxCat Sep 15, 2021
00c6f71
- Removed DynamicUnmanagedArray in favor of NativeList
ShadauxCat Sep 15, 2021
73a1e1f
standards.py --fix, plus some adjustments based on over-the-zoom-shou…
ShadauxCat Sep 15, 2021
e4db745
Not sure how standards.py --fix missed this the first time.
ShadauxCat Sep 16, 2021
73b2071
increasing timeout in hopes it fixes test failure.
ShadauxCat Sep 16, 2021
3b71334
Merge branch 'develop' into feature/inetworkmessage
ShadauxCat Sep 16, 2021
f23af57
Restored ClientConnected on the ServerClientId in StartClient... seem…
ShadauxCat Sep 16, 2021
0d065be
Cherrypick from fast buffer reader/writer branch to fix accidentally …
ShadauxCat Sep 16, 2021
e8b59c9
Applied much review feedback.
ShadauxCat Sep 16, 2021
1aaeb80
Fixed snapshot stuff and also an outdated comment.
ShadauxCat Sep 16, 2021
a5f54d7
More feedback.
ShadauxCat Sep 16, 2021
afbff24
Fix standards check.
ShadauxCat Sep 16, 2021
44ee3be
Fixed an edge case where the temp serialize buffer could be too large…
ShadauxCat Sep 16, 2021
3662881
Fixed metrics tests.
ShadauxCat Sep 16, 2021
87ea6e4
standards.py --fix
ShadauxCat Sep 17, 2021
ab652f5
Renamed IBufferSerializerImplementation to IReaderWriter
ShadauxCat Sep 17, 2021
7088113
Ok... actually renamed IBufferSerializerImplementation to IReaderWrit…
ShadauxCat Sep 17, 2021
9c45ef1
Missed a meta file
ShadauxCat Sep 17, 2021
d095d4a
Fixed missing OnAfterSendMessage hook when sending to localhost.
ShadauxCat Sep 17, 2021
4a5a85c
Take 3 at a rename.
ShadauxCat Sep 17, 2021
c51c3f2
Merge branch 'develop' into feature/inetworkmessage
ShadauxCat Sep 17, 2021
e1c3b6a
standards.py --fix
ShadauxCat Sep 17, 2021
868745c
Merge branch 'develop' into feature/inetworkmessage
ShadauxCat Sep 17, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 50 additions & 50 deletions com.unity.netcode.gameobjects/Components/NetworkAnimator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public bool SetTrigger(int key)
return TriggerParameters.Add(key);
}

public void NetworkSerialize(NetworkSerializer serializer)
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
SerializeIntParameters(serializer);
SerializeFloatParameters(serializer);
Expand All @@ -85,28 +85,28 @@ public void NetworkSerialize(NetworkSerializer serializer)
SerializeAnimatorLayerStates(serializer);
}

private void SerializeAnimatorLayerStates(NetworkSerializer serializer)
private void SerializeAnimatorLayerStates<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
int layerCount = serializer.IsReading ? 0 : LayerStates.Length;
serializer.Serialize(ref layerCount);
int layerCount = serializer.IsReader ? 0 : LayerStates.Length;
serializer.SerializeValue(ref layerCount);

if (serializer.IsReading && LayerStates.Length != layerCount)
if (serializer.IsReader && LayerStates.Length != layerCount)
{
LayerStates = new LayerState[layerCount];
}

for (int paramIndex = 0; paramIndex < layerCount; paramIndex++)
{
var stateHash = serializer.IsReading ? 0 : LayerStates[paramIndex].StateHash;
serializer.Serialize(ref stateHash);
var stateHash = serializer.IsReader ? 0 : LayerStates[paramIndex].StateHash;
serializer.SerializeValue(ref stateHash);

var layerWeight = serializer.IsReading ? 0 : LayerStates[paramIndex].LayerWeight;
serializer.Serialize(ref layerWeight);
var layerWeight = serializer.IsReader ? 0 : LayerStates[paramIndex].LayerWeight;
serializer.SerializeValue(ref layerWeight);

var normalizedStateTime = serializer.IsReading ? 0 : LayerStates[paramIndex].NormalizedStateTime;
serializer.Serialize(ref normalizedStateTime);
var normalizedStateTime = serializer.IsReader ? 0 : LayerStates[paramIndex].NormalizedStateTime;
serializer.SerializeValue(ref normalizedStateTime);

if (serializer.IsReading)
if (serializer.IsReader)
{
LayerStates[paramIndex] = new LayerState()
{
Expand All @@ -118,103 +118,103 @@ private void SerializeAnimatorLayerStates(NetworkSerializer serializer)
}
}

private void SerializeTriggerParameters(NetworkSerializer serializer)
private void SerializeTriggerParameters<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
int paramCount = serializer.IsReading ? 0 : TriggerParameters.Count;
serializer.Serialize(ref paramCount);
int paramCount = serializer.IsReader ? 0 : TriggerParameters.Count;
serializer.SerializeValue(ref paramCount);

var paramArray = serializer.IsReading ? new int[paramCount] : TriggerParameters.ToArray();
var paramArray = serializer.IsReader ? new int[paramCount] : TriggerParameters.ToArray();
for (int i = 0; i < paramCount; i++)
{
var paramId = serializer.IsReading ? 0 : paramArray[i];
serializer.Serialize(ref paramId);
var paramId = serializer.IsReader ? 0 : paramArray[i];
serializer.SerializeValue(ref paramId);

if (serializer.IsReading)
if (serializer.IsReader)
{
paramArray[i] = paramId;
}
}

if (serializer.IsReading)
if (serializer.IsReader)
{
TriggerParameters = new HashSet<int>(paramArray);
}
}

private void SerializeBoolParameters(NetworkSerializer serializer)
private void SerializeBoolParameters<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
int paramCount = serializer.IsReading ? 0 : BoolParameters.Count;
serializer.Serialize(ref paramCount);
int paramCount = serializer.IsReader ? 0 : BoolParameters.Count;
serializer.SerializeValue(ref paramCount);

var paramArray = serializer.IsReading ? new KeyValuePair<int, bool>[paramCount] : BoolParameters.ToArray();
var paramArray = serializer.IsReader ? new KeyValuePair<int, bool>[paramCount] : BoolParameters.ToArray();
for (int paramIndex = 0; paramIndex < paramCount; paramIndex++)
{
var paramId = serializer.IsReading ? 0 : paramArray[paramIndex].Key;
serializer.Serialize(ref paramId);
var paramId = serializer.IsReader ? 0 : paramArray[paramIndex].Key;
serializer.SerializeValue(ref paramId);

var paramBool = serializer.IsReading ? false : paramArray[paramIndex].Value;
serializer.Serialize(ref paramBool);
var paramBool = serializer.IsReader ? false : paramArray[paramIndex].Value;
serializer.SerializeValue(ref paramBool);

if (serializer.IsReading)
if (serializer.IsReader)
{
paramArray[paramIndex] = new KeyValuePair<int, bool>(paramId, paramBool);
}
}

if (serializer.IsReading)
if (serializer.IsReader)
{
BoolParameters = paramArray.ToDictionary(pair => pair.Key, pair => pair.Value);
}
}

private void SerializeFloatParameters(NetworkSerializer serializer)
private void SerializeFloatParameters<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
int paramCount = serializer.IsReading ? 0 : FloatParameters.Count;
serializer.Serialize(ref paramCount);
int paramCount = serializer.IsReader ? 0 : FloatParameters.Count;
serializer.SerializeValue(ref paramCount);

var paramArray = serializer.IsReading ? new KeyValuePair<int, float>[paramCount] : FloatParameters.ToArray();
var paramArray = serializer.IsReader ? new KeyValuePair<int, float>[paramCount] : FloatParameters.ToArray();
for (int paramIndex = 0; paramIndex < paramCount; paramIndex++)
{
var paramId = serializer.IsReading ? 0 : paramArray[paramIndex].Key;
serializer.Serialize(ref paramId);
var paramId = serializer.IsReader ? 0 : paramArray[paramIndex].Key;
serializer.SerializeValue(ref paramId);

var paramFloat = serializer.IsReading ? 0 : paramArray[paramIndex].Value;
serializer.Serialize(ref paramFloat);
var paramFloat = serializer.IsReader ? 0 : paramArray[paramIndex].Value;
serializer.SerializeValue(ref paramFloat);

if (serializer.IsReading)
if (serializer.IsReader)
{
paramArray[paramIndex] = new KeyValuePair<int, float>(paramId, paramFloat);
}
}

if (serializer.IsReading)
if (serializer.IsReader)
{
FloatParameters = paramArray.ToDictionary(pair => pair.Key, pair => pair.Value);
}
}

private void SerializeIntParameters(NetworkSerializer serializer)
private void SerializeIntParameters<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
int paramCount = serializer.IsReading ? 0 : IntParameters.Count;
serializer.Serialize(ref paramCount);
int paramCount = serializer.IsReader ? 0 : IntParameters.Count;
serializer.SerializeValue(ref paramCount);

var paramArray = serializer.IsReading ? new KeyValuePair<int, int>[paramCount] : IntParameters.ToArray();
var paramArray = serializer.IsReader ? new KeyValuePair<int, int>[paramCount] : IntParameters.ToArray();

for (int paramIndex = 0; paramIndex < paramCount; paramIndex++)
{
var paramId = serializer.IsReading ? 0 : paramArray[paramIndex].Key;
serializer.Serialize(ref paramId);
var paramId = serializer.IsReader ? 0 : paramArray[paramIndex].Key;
serializer.SerializeValue(ref paramId);

var paramInt = serializer.IsReading ? 0 : paramArray[paramIndex].Value;
serializer.Serialize(ref paramInt);
var paramInt = serializer.IsReader ? 0 : paramArray[paramIndex].Value;
serializer.SerializeValue(ref paramInt);

if (serializer.IsReading)
if (serializer.IsReader)
{
paramArray[paramIndex] = new KeyValuePair<int, int>(paramId, paramInt);
}
}

if (serializer.IsReading)
if (serializer.IsReader)
{
IntParameters = paramArray.ToDictionary(pair => pair.Key, pair => pair.Value);
}
Expand Down
24 changes: 12 additions & 12 deletions com.unity.netcode.gameobjects/Components/NetworkTransform.cs
Original file line number Diff line number Diff line change
Expand Up @@ -169,57 +169,57 @@ public Vector3 Scale
}
}

public void NetworkSerialize(NetworkSerializer serializer)
public void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter
{
serializer.Serialize(ref SentTime);
serializer.SerializeValue(ref SentTime);
// InLocalSpace + HasXXX Bits
serializer.Serialize(ref Bitset);
serializer.SerializeValue(ref Bitset);
// Position Values
if (HasPositionX)
{
serializer.Serialize(ref PositionX);
serializer.SerializeValue(ref PositionX);
}

if (HasPositionY)
{
serializer.Serialize(ref PositionY);
serializer.SerializeValue(ref PositionY);
}

if (HasPositionZ)
{
serializer.Serialize(ref PositionZ);
serializer.SerializeValue(ref PositionZ);
}

// RotAngle Values
if (HasRotAngleX)
{
serializer.Serialize(ref RotAngleX);
serializer.SerializeValue(ref RotAngleX);
}

if (HasRotAngleY)
{
serializer.Serialize(ref RotAngleY);
serializer.SerializeValue(ref RotAngleY);
}

if (HasRotAngleZ)
{
serializer.Serialize(ref RotAngleZ);
serializer.SerializeValue(ref RotAngleZ);
}

// Scale Values
if (HasScaleX)
{
serializer.Serialize(ref ScaleX);
serializer.SerializeValue(ref ScaleX);
}

if (HasScaleY)
{
serializer.Serialize(ref ScaleY);
serializer.SerializeValue(ref ScaleY);
}

if (HasScaleZ)
{
serializer.Serialize(ref ScaleZ);
serializer.SerializeValue(ref ScaleZ);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ internal static class CodeGenHelpers
public const string RuntimeAssemblyName = "Unity.Netcode.Runtime";

public static readonly string NetworkBehaviour_FullName = typeof(NetworkBehaviour).FullName;
public static readonly string INetworkMessage_FullName = typeof(INetworkMessage).FullName;
public static readonly string ServerRpcAttribute_FullName = typeof(ServerRpcAttribute).FullName;
public static readonly string ClientRpcAttribute_FullName = typeof(ClientRpcAttribute).FullName;
public static readonly string ServerRpcParams_FullName = typeof(ServerRpcParams).FullName;
Expand Down Expand Up @@ -264,9 +265,9 @@ public static void AddError(this List<DiagnosticMessage> diagnostics, SequencePo
});
}

public static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compiledAssembly)
public static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compiledAssembly, out PostProcessorAssemblyResolver assemblyResolver)
{
var assemblyResolver = new PostProcessorAssemblyResolver(compiledAssembly);
assemblyResolver = new PostProcessorAssemblyResolver(compiledAssembly);
var readerParameters = new ReaderParameters
{
SymbolStream = new MemoryStream(compiledAssembly.InMemoryAssembly.PdbData),
Expand Down
Loading