47 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|