public static async Task <List <OfferViewModel> > GetOffers(List <OfferViewModel> offersToGet) { var taskDictionary = new Dictionary <Guid, Task <IRestResponse <long> > >(); var OPEKey = OPE.CreateKeyString(); var ope = new OPE(OPEKey); foreach (var offer in offersToGet) { var query = new OfferQuery() { Id = offer.ProductId, Key = OPEKey }; var client = new RestClient(offer.StoreApiUrl); var request = new RestRequest(_paths["offer"]); request.AddJsonBody(query); request.Method = Method.POST; var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var task = client.ExecuteAsync <long>(request, cancellationTokenSource.Token); taskDictionary.Add(offer.ProductId, task); } await Task.WhenAll(taskDictionary.Values); taskDictionary .Where(t => !t.Value.IsFaulted && t.Value.Result.StatusCode == System.Net.HttpStatusCode.OK) .ToList() .ForEach(t => { offersToGet.First(o => o.ProductId == t.Key).EncryptedPrice = t.Value.Result.Data; offersToGet.First(o => o.ProductId == t.Key).RealPrice = ope.Decrypt(t.Value.Result.Data); }); return(offersToGet); }
public long GetOffer(OfferQuery query) { var ope = new OPE(query.Key); var prod = _db.Products.FirstOrDefault(p => p.Id == query.Id); var encryptedPrice = ope.Encrypt(Convert.ToInt32(Math.Ceiling(prod.Price))); return(encryptedPrice); }
public static Product_Operation CreateOperate(OPE oPE) { Product_Operation per = null; switch (oPE) { case OPE.PLUS: per = new ConcreteProduct_Plus(); break; case OPE.MINUS: per = new ConcreteProduct_Minus(); break; case OPE.MULTIPLY: per = new ConcreteProduct_Multiply(); break; case OPE.DIVIDE: per = new ConcreteProduct_Divide(); break; } return(per); }
public void Setup() { key = OPE.CreateKey(32); ope = new OPE(key); rng = new Random(); }