public override async Task <EndAuctionResponse> EndAuction(EndAuctionRequest request, ServerCallContext context) { if (!(await CheckPassword(context))) { throw new RpcException(new Status(StatusCode.PermissionDenied, "you are not authorized")); } Guid auctionId; if (!Guid.TryParse(request.AuctionId, out auctionId)) { throw new RpcException(new Status(StatusCode.InvalidArgument, "entryid is not a guid")); } var auction = await _auctionService.EndAuction(auctionId); Models.AuctionInvoice winningEntry = null; try { winningEntry = JsonSerializer.Deserialize <LightningAuction.Models.AuctionInvoice>(auction.WinningEntry); } catch { } var res = new EndAuctionResponse { Auction = new Auction { Id = auction.Id.ToString(), StartedAt = auction.StartedAt, Duration = auction.Duration, FinishedAt = auction.FinishedAt, } }; if (winningEntry != null) { res.Auction.WinningEntry = new AuctionEntry { Amount = winningEntry.Amount, Message = winningEntry.WinningMessage }; } return(res); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { await Task.Delay(1000, stoppingToken); var auctions = await _auctionService.GetAllAuctions(false, true); foreach (var auction in auctions) { var now = Utility.Utility.DateTimeToUnix(DateTime.UtcNow); if (now >= auction.StartedAt + auction.Duration) { Console.WriteLine("finishing auction {0}", auction); await _auctionService.EndAuction(auction.Id); } } } }