84 lines
3.1 KiB
C#
84 lines
3.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reactive.Linq;
|
|
using System.Reactive.Subjects;
|
|
using xModels.Interfaces;
|
|
|
|
namespace xModels.Base
|
|
{
|
|
public abstract class XBaseStoreEvent<T, TKey> : IXBaseStoreEvents<T, TKey>
|
|
where T : XBaseStorableDto<TKey>
|
|
{
|
|
//
|
|
private readonly ISubject<XBaseStorableDtoEventModel<T>> onAddSubject;
|
|
private readonly ISubject<XBaseStorableDtoEventModel<T>> onUpdateSubject;
|
|
private readonly ISubject<XBaseStorableDtoEventModel<T>> onRemoveSubject;
|
|
|
|
//
|
|
private readonly ISubject<XBaseStorableDtoEventModel<IEnumerable<T>>> onAddManySubject;
|
|
private readonly ISubject<XBaseStorableDtoEventModel<IEnumerable<T>>> onUpdateManySubject;
|
|
private readonly ISubject<XBaseStorableDtoEventModel<IEnumerable<T>>> onRemoveManySubject;
|
|
|
|
//
|
|
public IObservable<XBaseStorableDtoEventModel<T>> OnAddObservable => onAddSubject.AsObservable();
|
|
|
|
public IObservable<XBaseStorableDtoEventModel<T>> OnUpdateObservable => onUpdateSubject.AsObservable();
|
|
|
|
public IObservable<XBaseStorableDtoEventModel<T>> OnRemoveObservable => onRemoveSubject.AsObservable();
|
|
|
|
//
|
|
|
|
public IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnAddManyObservable => onAddManySubject.AsObservable();
|
|
|
|
public IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnUpdateManyObservable => onUpdateManySubject.AsObservable();
|
|
|
|
public IObservable<XBaseStorableDtoEventModel<IEnumerable<T>>> OnRemoveManyObservable => onRemoveManySubject.AsObservable();
|
|
|
|
//
|
|
protected XBaseStoreEvent()
|
|
{
|
|
//
|
|
onAddSubject = new ReplaySubject<XBaseStorableDtoEventModel<T>>(1);
|
|
onUpdateSubject = new ReplaySubject<XBaseStorableDtoEventModel<T>>(1);
|
|
onRemoveSubject = new ReplaySubject<XBaseStorableDtoEventModel<T>>(1);
|
|
|
|
//
|
|
onAddManySubject = new ReplaySubject<XBaseStorableDtoEventModel<IEnumerable<T>>>(1);
|
|
onUpdateManySubject = new ReplaySubject<XBaseStorableDtoEventModel<IEnumerable<T>>>(1);
|
|
onRemoveManySubject = new ReplaySubject<XBaseStorableDtoEventModel<IEnumerable<T>>>(1);
|
|
}
|
|
|
|
//
|
|
#region Base Actions ...
|
|
public void AddEvent(XBaseStorableDtoEventModel<T> model)
|
|
{
|
|
onAddSubject.OnNext(model);
|
|
}
|
|
|
|
public void AddManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model)
|
|
{
|
|
onAddManySubject.OnNext(model);
|
|
}
|
|
|
|
public void RemoveEvent(XBaseStorableDtoEventModel<T> model)
|
|
{
|
|
onRemoveSubject.OnNext(model);
|
|
}
|
|
|
|
public void RemoveManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model)
|
|
{
|
|
onRemoveManySubject.OnNext(model);
|
|
}
|
|
|
|
public void UpdateEvent(XBaseStorableDtoEventModel<T> model)
|
|
{
|
|
onUpdateSubject.OnNext(model);
|
|
}
|
|
|
|
public void UpdateManyEvent(XBaseStorableDtoEventModel<IEnumerable<T>> model)
|
|
{
|
|
onUpdateManySubject.OnNext(model);
|
|
}
|
|
#endregion
|
|
}
|
|
} |