コード例 #1
0
        public async Task Complete()
        {
            using (var session = Casino.GetSessionAsync)
            {
                session.Advanced.WaitForReplicationAfterSaveChanges(TimeSpan.FromSeconds(180), replicas: Casino.ReplicaCount());

                var lottery = await session.LoadAsync <Lottery>(Id).ConfigureAwait(false);

                lottery.Result = Result;
                lottery.Status = Status;
                await session.SaveChangesAsync().ConfigureAwait(false);
            }
        }
コード例 #2
0
        public static async Task <Lottery> CreateLottery()
        {
            var lottery = new Lottery($"Lottery/{DateTime.UtcNow}/" + Guid.NewGuid())
            {
                DueTime = DateTime.UtcNow.AddMinutes(1),
                Status  = LotteryStatus.Open
            };

            using (var session = Casino.GetSessionAsync)
            {
                session.Advanced.WaitForReplicationAfterSaveChanges(timeout: TimeSpan.FromSeconds(180), replicas: Casino.ReplicaCount());
                await session.StoreAsync(lottery, lottery.Id).ConfigureAwait(false);

                await session.SaveChangesAsync().ConfigureAwait(false);
            }

            return(lottery);
        }
コード例 #3
0
        public async Task FinalizeBets()
        {
            using (var session = Casino.GetSessionAsync)
            {
                // ensures that no more bets accepted after this session is committed
                session.Advanced.WaitForReplicationAfterSaveChanges(TimeSpan.FromSeconds(180), replicas: Casino.ReplicaCount());

                var lottery = await session.LoadAsync <Lottery>(Id).ConfigureAwait(false);

                lottery.Status = LotteryStatus.PendingResults;

                await session.StoreAsync(new Bet
                {
                    LotteryId = Id,
                    BetStatus = Bet.Status.Closed
                }, $"close/{Id}").ConfigureAwait(false);

                await session.SaveChangesAsync().ConfigureAwait(false);
            }

            if (_collecting.WaitOne(TimeSpan.FromSeconds(60)) == false)
            {
                throw new TimeoutException();
            }
        }