Initial Commit

This commit is contained in:
Sebastian Cabrera 2021-08-02 05:44:37 -04:00
parent 53eb92e9af
commit 270ab7d11f
15341 changed files with 700234 additions and 0 deletions

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 48b252004f20b4e28a4025ef8d0237fe
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,129 @@
using System;
using System.Collections.Generic;
using System.Text;
using MLAPI.Messaging;
using MLAPI.Serialization;
using MLAPI.Transports;
using NUnit.Framework;
namespace MLAPI.EditorTests
{
public class RpcBatcherTests
{
[Test]
public void SendWithThreshold()
{
const int k_BatchThreshold = 256;
const int k_QueueItemCount = 128;
var sendBatcher = new RpcBatcher();
var sendStreamQueue = new Queue<NetworkBuffer>();
for (int i = 0; i < k_QueueItemCount; ++i)
{
var randomData = Encoding.ASCII.GetBytes(Guid.NewGuid().ToString());
var queueItem = new RpcFrameQueueItem
{
NetworkId = 123,
ClientNetworkIds = new ulong[] { 123 },
NetworkChannel = NetworkChannel.ChannelUnused + 123,
QueueItemType = i % 2 == 0 ? RpcQueueContainer.QueueItemType.ServerRpc : RpcQueueContainer.QueueItemType.ClientRpc,
MessageData = new ArraySegment<byte>(randomData, 0, randomData.Length)
};
sendBatcher.QueueItem(queueItem);
sendBatcher.SendItems(k_BatchThreshold,
(networkId, sendStream) =>
{
var queueStream = new NetworkBuffer();
sendStream.Buffer.CopyTo(queueStream);
sendStreamQueue.Enqueue(queueStream);
});
}
// batch the rest
sendBatcher.SendItems( /* thresholdBytes = */ 0,
(networkId, sendStream) =>
{
var queueStream = new NetworkBuffer();
sendStream.Buffer.CopyTo(queueStream);
sendStreamQueue.Enqueue(queueStream);
});
var recvBatcher = new RpcBatcher();
var recvItemCounter = 0;
foreach (var recvStream in sendStreamQueue)
{
recvStream.Position = 0;
// todo: revisit
// The following line is sub-optimal
// The stream returned by SendItems() includes:
// - 8 bits for the MLAPI message types.
// ReceiveItems expects those to have been stripped by the receive code.
// In order to replicate this behaviour, we'll read 8 bits before calling ReceiveItems()
recvStream.ReadByte();
recvBatcher.ReceiveItems(recvStream, (stream, type, id, time) => ++recvItemCounter, default, default, default);
}
Assert.AreEqual(k_QueueItemCount, recvItemCounter);
}
[Test]
public void SendWithoutThreshold()
{
const int k_BatchThreshold = 0;
const int k_QueueItemCount = 128;
var sendBatcher = new RpcBatcher();
var sendStreamQueue = new Queue<NetworkBuffer>();
for (int i = 0; i < k_QueueItemCount; ++i)
{
var randomData = Encoding.ASCII.GetBytes(Guid.NewGuid().ToString());
var queueItem = new RpcFrameQueueItem
{
NetworkId = 123,
ClientNetworkIds = new ulong[] { 123 },
NetworkChannel = NetworkChannel.ChannelUnused + 123,
QueueItemType = i % 2 == 0 ? RpcQueueContainer.QueueItemType.ServerRpc : RpcQueueContainer.QueueItemType.ClientRpc,
MessageData = new ArraySegment<byte>(randomData, 0, randomData.Length)
};
sendBatcher.QueueItem(queueItem);
sendBatcher.SendItems(k_BatchThreshold,
(networkId, sendStream) =>
{
var queueStream = new NetworkBuffer();
sendStream.Buffer.CopyTo(queueStream);
sendStreamQueue.Enqueue(queueStream);
});
}
// batch the rest
sendBatcher.SendItems( /* thresholdBytes = */ 0,
(networkId, sendStream) =>
{
var queueStream = new NetworkBuffer();
sendStream.Buffer.CopyTo(queueStream);
sendStreamQueue.Enqueue(queueStream);
});
var recvBatcher = new RpcBatcher();
var recvItemCounter = 0;
foreach (var recvStream in sendStreamQueue)
{
recvStream.Position = 0;
// todo: revisit
// The following line is sub-optimal
// The stream returned by SendItems() includes:
// - 8 bits for the MLAPI message types.
// ReceiveItems expects those to have been stripped by the receive code.
// In order to replicate this behaviour, we'll read 8 bits before calling ReceiveItems()
recvStream.ReadByte();
recvBatcher.ReceiveItems(recvStream, (stream, type, id, time) => ++recvItemCounter, default, default, default);
}
Assert.AreEqual(k_QueueItemCount, recvItemCounter);
}
}
}

View file

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1b2fcaa08dc7f4bb5a6a3bc089a01b85
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,13 @@
{
"name": "Unity.Multiplayer.MLAPI.EditorTests",
"references": [
"Unity.Multiplayer.MLAPI.Runtime"
],
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": []
}

View file

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 072b82e2b7c1dcf439827d3fbc4f52a1
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: