Пример #1
0
        public RedisInvocation ReadInvocation(ReadOnlyMemory <byte> data)
        {
            // See WriteInvocation for the format
            ValidateArraySize(ref data, 2, "Invocation");

            // Read excluded Ids
            IReadOnlyList <string> excludedConnectionIds = null;
            var idCount = MessagePackUtil.ReadArrayHeader(ref data);

            if (idCount > 0)
            {
                var ids = new string[idCount];
                for (var i = 0; i < idCount; i++)
                {
                    ids[i] = MessagePackUtil.ReadString(ref data);
                }

                excludedConnectionIds = ids;
            }

            // Read payload
            var message = ReadSerializedHubMessage(ref data);

            return(new RedisInvocation(message, excludedConnectionIds));
        }
Пример #2
0
        private static void ValidateArraySize(ref ReadOnlyMemory <byte> data, int expectedLength, string messageType)
        {
            var length = MessagePackUtil.ReadArrayHeader(ref data);

            if (length < expectedLength)
            {
                throw new InvalidDataException($"Insufficient items in {messageType} array.");
            }
        }