private void ServiceHost_Opening(object sender, EventArgs e) { IReplicationRepository repo = new ReplicationRepository(new ScadaDbContext()); var result = repo.Get(); ScadaStorageProvider.Model = result; Console.WriteLine($"Readed from replica: {ScadaStorageProvider.Model.Count}"); }
public void SetModel(Dictionary <Tuple <RegisterType, int>, BasePoint> model) { Model = model; IReplicationRepository repo = new ReplicationRepository(new ScadaDbContext()); repo.Set(Model.Values.ToList()); repo = null; }
public async Task <ServiceResult> GetLeaderboard(int?topRecords = null) { topRecords = Math.Max(topRecords ?? 100, MaxLeaderboardSize); var list = Cache.GetOrCreate <List <LeaderboardItem> >(LeaderboardCacheKey, context => { context.SetAbsoluteExpiration(TimeSpan.FromMilliseconds(1)); const string PlayerAggs = "playeraggs"; const string LastUpdatedDate = "lastupdateddate"; const string PointsSum = "pointssum"; const string SortByPointsSum = "sortbypointssum"; var searchResponse = ReplicationRepository.Search(s => s .Index(ReplicationRepository.IndexName) .Size(MaxLeaderboardSize) .Aggregations(a1 => a1 .Terms(PlayerAggs, t1 => t1 .Field(f1 => f1.PlayerID) .Size(int.MaxValue) .Aggregations(a2 => a2 .Max(LastUpdatedDate, m2 => m2 .Field(fm2 => fm2.ReplicatedTimestamp) ) .Sum(PointsSum, s2 => s2 .Field(f2 => f2.WinPoints ) ) .BucketSort(SortByPointsSum, t3 => t3 .Sort(s3 => s3 .Field(PointsSum, SortOrder.Descending) ) ) ) ) ) ); if (!searchResponse.IsValid) { return(null); } context.SetAbsoluteExpiration(TimeSpan.FromMinutes(LeaderboardCacheExpiration)); context.SetPriority(CacheItemPriority.High); return(searchResponse.Aggregations.Terms(PlayerAggs).Buckets.Select(x => new LeaderboardItem() { PlayerID = Convert.ToInt64(x.Key), Balance = Convert.ToInt64(x.Sum(PointsSum).Value), LastUpdateDate = new DateTime(Convert.ToInt64(x.Max(LastUpdatedDate).Value)), }).ToList()); }); return(list.Take(topRecords.Value).ToList().AsServiceResult().Valid()); }