Exemple #1
0
        public byte[] GetQueryBuffer()
        {
            if (RequestOpcode != Opcode.Get && RequestOpcode != Opcode.GetK && RequestOpcode != Opcode.GAT && RequestOpcode != Opcode.ReplicaRead)
            {
                throw new MemcacheException("Get request only supports Get, GetK, GAT or ReplicaRead opcodes");
            }

            int extraLength = RequestOpcode == Opcode.GAT ? sizeof(uint) : 0;

            var requestHeader = new MemcacheRequestHeader(RequestOpcode)
            {
                VBucket         = VBucket,
                KeyLength       = (ushort)Key.Length,
                ExtraLength     = (byte)extraLength,
                TotalBodyLength = (uint)(extraLength + Key.Length),
                Opaque          = RequestId,
            };

            var buffer = new byte[MemcacheRequestHeader.Size + requestHeader.TotalBodyLength];

            requestHeader.ToData(buffer);

            // in case of Get and Touch, post the new TTL in extra
            if (RequestOpcode == Opcode.GAT)
            {
                buffer.CopyFrom(MemcacheRequestHeader.Size + sizeof(uint), ExpirationTimeUtils.MemcachedTTL(Expire));
            }

            Key.CopyTo(buffer, extraLength + MemcacheRequestHeader.Size);

            return(buffer);
        }
Exemple #2
0
        public byte[] GetQueryBuffer()
        {
            var requestHeader = new MemcacheRequestHeader(RequestOpcode)
            {
                VBucket         = VBucket,
                KeyLength       = (ushort)Key.Length,
                ExtraLength     = 2 * sizeof(uint),
                TotalBodyLength = (uint)(2 * sizeof(uint) + Key.Length + (Message == null ? 0 : Message.Length)),
                Opaque          = RequestId,
            };

            var buffer = new byte[MemcacheRequestHeader.Size + requestHeader.TotalBodyLength];

            requestHeader.ToData(buffer);
            buffer.CopyFrom(MemcacheRequestHeader.Size, Flags);
            buffer.CopyFrom(MemcacheRequestHeader.Size + sizeof(uint), ExpirationTimeUtils.MemcachedTTL(Expire));
            Key.CopyTo(buffer, MemcacheRequestHeader.Size + requestHeader.ExtraLength);
            if (Message != null)
            {
                Message.CopyTo(buffer, MemcacheRequestHeader.Size + requestHeader.ExtraLength + Key.Length);
            }

            return(buffer);
        }
        public byte[] GetQueryBuffer()
        {
            const int extraLength = sizeof(ulong) + sizeof(ulong) + sizeof(uint);

            var requestHeader = new MemcacheRequestHeader(RequestOpcode)
            {
                VBucket         = VBucket,
                KeyLength       = (ushort)Key.Length,
                ExtraLength     = (byte)extraLength,
                TotalBodyLength = (uint)(extraLength + Key.Length),
                Opaque          = RequestId,
            };

            var buffer = new byte[MemcacheRequestHeader.Size + requestHeader.TotalBodyLength];

            requestHeader.ToData(buffer);
            buffer.CopyFrom(MemcacheRequestHeader.Size, Delta);
            buffer.CopyFrom(MemcacheRequestHeader.Size + sizeof(ulong), Initial);
            buffer.CopyFrom(MemcacheRequestHeader.Size + 2 * sizeof(ulong), ExpirationTimeUtils.MemcachedTTL(Expire));

            Key.CopyTo(buffer, extraLength + MemcacheRequestHeader.Size);

            return(buffer);
        }