Universley.OrleansContrib.S.../Provider/RedisStreamSequenceToken.cs
Samson Amaugo 460a2d7b76 done
2024-06-26 21:34:43 +01:00

47 lines
1.5 KiB
C#

using Orleans.Streams;
using StackExchange.Redis;
namespace Provider
{
[GenerateSerializer]
public class RedisStreamSequenceToken : StreamSequenceToken
{
[Id(0)]
public override long SequenceNumber { get; protected set; }
[Id(1)]
public override int EventIndex { get; protected set; }
public RedisStreamSequenceToken(RedisValue id)
{
var split = id.ToString().Split("-");
SequenceNumber = long.Parse(split[0]);
EventIndex = int.Parse(split[1]);
}
public RedisStreamSequenceToken(long sequenceNumber, int eventIndex)
{
SequenceNumber = sequenceNumber;
EventIndex = eventIndex;
}
public override int CompareTo(StreamSequenceToken other)
{
if (other is null) throw new ArgumentNullException(nameof(other));
if (other is RedisStreamSequenceToken token)
{
if (SequenceNumber == token.SequenceNumber)
{
return EventIndex.CompareTo(token.EventIndex);
}
return SequenceNumber.CompareTo(token.SequenceNumber);
}
throw new ArgumentException("Invalid token type", nameof(other));
}
public override bool Equals(StreamSequenceToken other)
{
var token = other as RedisStreamSequenceToken;
return token != null && SequenceNumber == token.SequenceNumber && EventIndex == token.EventIndex;
}
}
}