Example #1
0
        private bool Store(ushort flag, ArraySegment <byte> data)
        {
            StringBuilder sb = new StringBuilder(100);

            switch (mode)
            {
            case StoreCommand.Add:
                sb.Append("add ");
                break;

            case StoreCommand.Replace:
                sb.Append("replace ");
                break;

            case StoreCommand.Set:
                sb.Append("set ");
                break;

            case StoreCommand.Append:
                sb.Append("append ");
                break;

            case StoreCommand.Prepend:
                sb.Append("prepend ");
                break;

            case StoreCommand.CheckAndSet:
                sb.Append("cas ");
                break;

            default:
                throw new MemcachedClientException(mode + " is not supported.");
            }

            sb.Append(HashedKey);
            sb.Append(" ");
            sb.Append(flag.ToString(CultureInfo.InvariantCulture));
            sb.Append(" ");
            sb.Append(expires.ToString(CultureInfo.InvariantCulture));
            sb.Append(" ");
            sb.Append(Convert.ToString(data.Count - data.Offset, CultureInfo.InvariantCulture));

            if (mode == StoreCommand.CheckAndSet)
            {
                sb.Append(" ");
                sb.Append(Convert.ToString(casValue, CultureInfo.InvariantCulture));
            }

            ArraySegment <byte> commandBuffer = PooledSocket.GetCommandBuffer(sb.ToString());

            Socket.Write(new[] { commandBuffer, data, DataTerminator });

            return(String.Compare(Socket.ReadResponse(), "STORED", StringComparison.Ordinal) == 0);
        }