Universley.OrleansContrib.S.../Provider/RedisStreamBatchContainer.cs
Samson Amaugo 38b99d98f4 done
2024-06-25 20:48:05 +01:00

46 lines
1.4 KiB
C#

using Orleans.Runtime;
using Orleans.Streams;
using StackExchange.Redis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace Provider
{
public class RedisStreamBatchContainer : IBatchContainer
{
public StreamId StreamId { get; }
public StreamSequenceToken SequenceToken { get; }
public StreamEntry StreamEntry { get; }
public RedisStreamBatchContainer(StreamEntry streamEntry)
{
StreamEntry = streamEntry;
var streamNamespace = StreamEntry.Values[0].Value;
var steamKey = StreamEntry.Values[1].Value;
StreamId = StreamId.Create(streamNamespace!, steamKey!);
SequenceToken = new RedisStreamSequenceToken(StreamEntry.Id);
}
public IEnumerable<Tuple<T, StreamSequenceToken>> GetEvents<T>()
{
List<Tuple<T, StreamSequenceToken>> events = new();
var eventType = typeof(T).Name;
if (eventType == StreamEntry.Values[2].Value)
{
var data = StreamEntry.Values[3].Value;
var @event = JsonSerializer.Deserialize<T>(data!);
events.Add(new(@event!, SequenceToken));
}
return events;
}
public bool ImportRequestContext()
{
return false;
}
}
}