public void MessageIsBitPacked([ValueSource(nameof(cases))] TestCase TestCase)
        {
            MyEnumByte value            = TestCase.value;
            int        expectedBitCount = TestCase.expectedBits;

            var inStruct = new BitPackStruct
            {
                myValue = value,
            };

            using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter())
            {
                // generic write, uses generated function that should include bitPacking
                writer.Write(inStruct);

                Assert.That(writer.BitPosition, Is.EqualTo(expectedBitCount));

                using (PooledNetworkReader reader = NetworkReaderPool.GetReader(writer.ToArraySegment()))
                {
                    var outStruct = reader.Read <BitPackStruct>();
                    Assert.That(reader.BitPosition, Is.EqualTo(expectedBitCount));

                    Assert.That(outStruct, Is.EqualTo(inStruct));
                }
            }
        }
        public IEnumerator RpcIsBitPacked([ValueSource(nameof(cases))] TestCase TestCase)
        {
            MyEnumByte value            = TestCase.value;
            int        expectedBitCount = TestCase.expectedBits;

            int called = 0;

            clientComponent.onRpc += (v) =>
            {
                called++;
                Assert.That(v, Is.EqualTo(value));
            };

            client.MessageHandler.UnregisterHandler <RpcMessage>();
            int payloadSize = 0;

            client.MessageHandler.RegisterHandler <RpcMessage>((player, msg) =>
            {
                // store value in variable because assert will throw and be catch by message wrapper
                payloadSize = msg.payload.Count;
                clientObjectManager.OnRpcMessage(msg);
            });

            serverComponent.RpcSomeFunction(value);
            yield return(null);

            yield return(null);

            Assert.That(called, Is.EqualTo(1));

            // this will round up to nearest 8
            int expectedPayLoadSize = (expectedBitCount + 7) / 8;

            Assert.That(payloadSize, Is.EqualTo(expectedPayLoadSize), $"expectedBitCount bits is %%PAYLOAD_SIZE%% bytes in payload");
        }
        public IEnumerator StructIsBitPacked([ValueSource(nameof(cases))] TestCase TestCase)
        {
            MyEnumByte value            = TestCase.value;
            int        expectedBitCount = TestCase.expectedBits;

            var inMessage = new BitPackMessage
            {
                myValue = value,
            };

            int            payloadSize = 0;
            int            called      = 0;
            BitPackMessage outMessage  = default;

            server.MessageHandler.RegisterHandler <BitPackMessage>((player, msg) =>
            {
                // store value in variable because assert will throw and be catch by message wrapper
                called++;
                outMessage = msg;
            });
            Action <NetworkDiagnostics.MessageInfo> diagAction = (info) =>
            {
                if (info.message is BitPackMessage)
                {
                    payloadSize = info.bytes;
                }
            };

            NetworkDiagnostics.OutMessageEvent += diagAction;
            client.Player.Send(inMessage);
            NetworkDiagnostics.OutMessageEvent -= diagAction;
            yield return(null);

            yield return(null);

            Assert.That(called, Is.EqualTo(1));
            // this will round up to nearest 8
            // +2 for message header
            int expectedPayLoadSize = ((expectedBitCount + 7) / 8) + 2;

            Assert.That(payloadSize, Is.EqualTo(expectedPayLoadSize), $"{expectedBitCount} bits is {expectedPayLoadSize - 2} bytes in payload");
            Assert.That(outMessage, Is.EqualTo(inMessage));
        }
        public void SyncVarIsBitPacked([ValueSource(nameof(cases))] TestCase TestCase)
        {
            MyEnumByte value            = TestCase.value;
            int        expectedBitCount = TestCase.expectedBits;

            serverComponent.myValue = value;

            using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter())
            {
                serverComponent.SerializeSyncVars(writer, true);

                Assert.That(writer.BitPosition, Is.EqualTo(expectedBitCount));

                using (PooledNetworkReader reader = NetworkReaderPool.GetReader(writer.ToArraySegment()))
                {
                    clientComponent.DeserializeSyncVars(reader, true);
                    Assert.That(reader.BitPosition, Is.EqualTo(expectedBitCount));

                    Assert.That(clientComponent.myValue, Is.EqualTo(value));
                }
            }
        }
Beispiel #5
0
 public static MyEnumByte CheckEnumByte(ref MyEnumByte value)
 {
     // Check stloc for enum
     value = MyEnumByte.Tada1;
     return(value);
 }
 public void RpcSomeFunction([VarInt(4, 64)] MyEnumByte myParam)
 {
     onRpc?.Invoke(myParam);
 }