private void SendBufferServerRpc(byte[] buffer) { TestFailed = !NetworkManagerHelper.BuffersMatch(0, buffer.Length, buffer, m_SendBuffer.ToArray()); if (!TestFailed) { Debug.Log($"Tested buffer size of {m_SendBuffer.Count} -- OK"); } if (m_CurrentBufferSize == MaximumBufferSize) { m_CurrentBufferSize++; } else { //Increasse buffer size m_CurrentBufferSize = m_CurrentBufferSize << 1; } m_WaitForValidation = false; }
public void RpcQueueContainerClass() { // Create a testing rpcQueueContainer that doesn't get added to the network update loop so we don't try to send or process during the test var rpcQueueContainer = new RpcQueueContainer(NetworkManagerHelper.NetworkManagerObject, 0, true); // Make sure we set testing mode so we don't try to invoke RPCs rpcQueueContainer.SetTestingState(true); var maxRpcEntries = 8; var messageChunkSize = 2048; var preCalculatedBufferValues = new List <byte>(messageChunkSize); for (int i = 0; i < messageChunkSize; i++) { preCalculatedBufferValues.AddRange(BitConverter.GetBytes(UnityEngine.Random.Range(0, ulong.MaxValue))); } var indexOffset = 0; ulong senderNetworkId = 1; // Create fictitious list of clients to send to ulong[] psuedoClients = new ulong[] { 0 }; var randomGeneratedDataArray = preCalculatedBufferValues.ToArray(); var maximumOffsetValue = preCalculatedBufferValues.Count; // Testing outbound side of the RpcQueueContainer for (int i = 0; i < maxRpcEntries; i++) { // Increment our offset into our randomly generated data for next entry; indexOffset = (i * messageChunkSize) % maximumOffsetValue; var writer = rpcQueueContainer.BeginAddQueueItemToFrame(RpcQueueContainer.QueueItemType.ServerRpc, Time.realtimeSinceStartup, Transports.NetworkChannel.DefaultMessage, senderNetworkId, psuedoClients, RpcQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); writer.WriteByteArray(randomGeneratedDataArray, messageChunkSize); rpcQueueContainer.EndAddQueueItemToFrame(writer, RpcQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); } // Now verify the data by obtaining the RpcQueueHistoryFrame we just wrote to var currentFrame = rpcQueueContainer.GetLoopBackHistoryFrame(RpcQueueHistoryFrame.QueueFrameType.Outbound, NetworkUpdateStage.PostLateUpdate); // Reset our index offset indexOffset = 0; int queueEntryItemCount = 0; // Parse through the entries written to the current RpcQueueHistoryFrame var currentQueueItem = currentFrame.GetFirstQueueItem(); while (currentQueueItem.QueueItemType != RpcQueueContainer.QueueItemType.None) { // Check to make sure the wrapper information is accurate for the entry Assert.AreEqual(currentQueueItem.NetworkId, senderNetworkId); Assert.AreEqual(currentQueueItem.QueueItemType, RpcQueueContainer.QueueItemType.ServerRpc); Assert.AreEqual(currentQueueItem.UpdateStage, NetworkUpdateStage.PostLateUpdate); Assert.AreEqual(currentQueueItem.NetworkChannel, Transports.NetworkChannel.DefaultMessage); // Validate the data in the queue Assert.IsTrue(NetworkManagerHelper.BuffersMatch(currentQueueItem.MessageData.Offset, messageChunkSize, currentQueueItem.MessageData.Array, randomGeneratedDataArray)); // Prepare for next queue item queueEntryItemCount++; currentQueueItem = currentFrame.GetNextQueueItem(); } rpcQueueContainer.Dispose(); }