async protected Task<object> ReadValue(MixedReaderAsync MixedReaderAsync)
{
var FirstLine = Encoding.ASCII.GetString(await MixedReaderAsync.ReadBytesUntilAsync((byte)'\r'));
await MixedReaderAsync.SkipBytesAsync(1);
switch (FirstLine[0])
{
// Status reply
case '+': return FirstLine.Substring(1);
// Error reply
case '-': throw (new RedisResponseException(FirstLine.Substring(1)));
// Integer reply
case ':': return Convert.ToInt64(FirstLine.Substring(1));
// Bulk replies
case '$':
var BytesToRead = Convert.ToInt32(FirstLine.Substring(1));
if (BytesToRead == -1) return null;
var Data = await MixedReaderAsync.ReadBytesAsync(BytesToRead);
await MixedReaderAsync.SkipBytesAsync(2);
return Encoding.GetString(Data);
case '*':
var BulksToRead = Convert.ToInt64(FirstLine.Substring(1));
var Bulks = new object[BulksToRead];
for (int n = 0; n < BulksToRead; n++)
{
Bulks[n] = await ReadValue(MixedReaderAsync);
}
return Bulks;
default:
throw(new RedisResponseException("Unknown param type '" + FirstLine[0] + "'"));
}
}