Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 48b252004f20b4e28a4025ef8d0237fe
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 1b2fcaa08dc7f4bb5a6a3bc089a01b85
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"name": "Unity.Multiplayer.MLAPI.EditorTests",
|
||||
"references": [
|
||||
"Unity.Multiplayer.MLAPI.Runtime"
|
||||
],
|
||||
"optionalUnityReferences": [
|
||||
"TestAssemblies"
|
||||
],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": []
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 072b82e2b7c1dcf439827d3fbc4f52a1
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Add table
Add a link
Reference in a new issue