예제 #1
0
        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;
        }
예제 #2
0
        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();
        }