public static StreamDbContextOptionsBuilder UseInMemoryStream <T>(this StreamDbContextOptionsBuilder builder, IObservable <T> observable) { builder.Options.SetStreamFactory((options, type, streamPatterns) => { return(new Stream <T>(observable, options, streamPatterns)); }); return(builder); }
public void Setup() { _subject = new Subject <string>(); var options = new StreamDbContextOptionsBuilder() .UseInMemoryStream(_subject.AsQbservable()) .Options; _sut = new StreamDbContext(options); }
static async Task Main(string[] args) { var baseTypes = new[] { typeof(BaseEvent) }; var eventTypes = typeof(BaseEvent).Assembly.GetTypes() .Where(t => t.IsSubclassOf(typeof(BaseEvent))); var options = new StreamDbContextOptionsBuilder() .UseEventStore("127.0.0.1:5001") .RegisterTypes(() => baseTypes.Concat(eventTypes)) .Options; var es = new EventStoreContext(options); var orderEvents = es.FromStreams <BaseEvent>("Order-*", "PaymentPlan-*"); var customerEvents = es.FromStreams <BaseEvent>("Customer-*"); var stream = orderEvents .GroupBy(e => (e is OrderCreatedEvent) ? ((OrderCreatedEvent)e).Id : (e is OrderCustomerLinkedV2Event) ? ((OrderCustomerLinkedV2Event)e).OrderId : (e is OrderConfirmedEvent) ? ((OrderConfirmedEvent)e).OrderId : (e is PaymentPlanCreatedEvent) ? ((PaymentPlanCreatedEvent)e).Id : Guid.Empty ) .Where(g => g.Key != Guid.Empty) //.Select(g => g // .Aggregate( // Guid.Empty, // (s, e) => (Guid)(e.GetType().GetProperty("CustomerId") == null ? s : e.GetType().GetProperty("CustomerId").GetValue(e, null)) // ) // .Zip(g, (c, e) => g.Where(x => !x.Bag.ContainsKey("CustomerId")).Do(x => x.Bag.Add("CustomerId", c))) // .SelectMany(x => x) //) .SelectMany(g => g) .Merge(customerEvents) // NB: This doesn't actually work - it's an observable and there's more to joining streams than this... .GroupBy(e => (e is OrderCustomerLinkedV2Event) ? ((OrderCustomerLinkedV2Event)e).CustomerId : (e is OrderConfirmedEvent) ? ((OrderConfirmedEvent)e).CustomerId : //(e is OrderCreatedEvent) ? (Guid)(e.Bag.ContainsKey("CustomerId") ? e.Bag["CustomerId"] : Guid.Empty) : //(e is PaymentPlanCreatedEvent) ? (Guid)(e.Bag.ContainsKey("CustomerId") ? e.Bag["CustomerId"] : Guid.Empty) : (e is CustomerDetailsAddedEvent) ? ((CustomerDetailsAddedEvent)e).CustomerId : Guid.Empty ) //.Where(g => g.Key == new Guid("879c5d39-fd72-4392-bf88-8bba363e590e")) .SelectMany(g => g) .Subscribe( onNext: s => Console.WriteLine(JsonConvert.SerializeObject(s)), onError: e => Console.WriteLine("ERROR: " + e), onCompleted: () => Console.WriteLine("DONE") ); while (!Console.KeyAvailable && Console.ReadKey(true).Key != ConsoleKey.Escape) { await Task.Delay(50); } }
public void Setup() { _subject = new Subject <string>(); _mockHttp = new MockHttpMessageHandler(); var client = new HttpClient(_mockHttp); var options = new StreamDbContextOptionsBuilder() .UseGrpcStream("http://some-host") .Options; _sut = new StreamDbContext(options); }
static async Task Main(string[] args) { var types = new[] { typeof(TestEvent) }; var options = new StreamDbContextOptionsBuilder() .UseGrpcStream("127.0.0.1:5001") .RegisterTypes(() => types) .Options; var es = new StreamDbContext(options); var orderEvents = es.FromAll <TestEvent>() .Subscribe( onNext: s => Console.WriteLine(JsonConvert.SerializeObject(s)), onError: e => Console.WriteLine("ERROR: " + e), onCompleted: () => Console.WriteLine("DONE") ); while (!Console.KeyAvailable && Console.ReadKey(true).Key != ConsoleKey.Escape) { await Task.Delay(50); } }
public static StreamDbContextOptionsBuilder UseEventStore(this StreamDbContextOptionsBuilder builder, string url) { builder.Options.SetConnectionString(url); builder.Options.SetStreamFactory(CreateStream); return(builder); }
public static StreamDbContextOptionsBuilder UseGrpcStream(this StreamDbContextOptionsBuilder builder, string url) { builder.Options.SetConnectionString(url); builder.Options.SetStreamFactory(StreamFactory); return(builder); }