public void Serialize()
        {
            InputRemoting.Message message1 = new InputRemoting.Message
            {
                participantId = 1,
                type          = InputRemoting.MessageType.NewEvents,
                data          = new byte[] { 1, 2, 3, 4, 5 },
            };

            var bytes = MessageSerializer.Serialize(ref message1);

            Assert.That(bytes, Is.Not.Null);
            Assert.That(bytes, Has.Length.GreaterThan(0));

            MessageSerializer.Deserialize(bytes, out var message2);
            Assert.That(message2.participantId, Is.EqualTo(message1.participantId));
            Assert.That(message2.type, Is.EqualTo(message1.type));
            Assert.That(message2.data, Is.EqualTo(message1.data));
        }
        public static unsafe void Process(InputRemoting.Message msg, int deviceId, FourCC type)
        {
            fixed(byte *dataPtr = msg.data)
            {
                var dataEndPtr = new IntPtr(dataPtr + msg.data.Length);
                var eventCount = 0;
                var eventPtr   = new InputEventPtr((InputEvent *)dataPtr);

                while (eventPtr.data.ToInt64() < dataEndPtr.ToInt64())
                {
                    eventPtr.deviceId = deviceId;

                    InputSystem.QueueEvent(eventPtr);

                    ++eventCount;
                    eventPtr = eventPtr.Next();
                }

                InputSystem.Update();
            }
        }