/// <summary> /// Removes the message from the queue. /// Remove operation will be canceled If force is false and message is not sent. /// If silent is false, MessageRemoved method of delivery handler is called /// </summary> public async Task <bool> RemoveMessage(QueueMessage message, bool force = false, bool silent = false) { if (!force && !message.IsSent) { return(false); } await _listSync.WaitAsync(); try { if (message.Message.HighPriority) { HighPriorityLinkedList.Remove(message); } else { RegularLinkedList.Remove(message); } } finally { _listSync.Release(); } if (!silent) { Info.AddMessageRemove(); await DeliveryHandler.MessageRemoved(this, message); } return(true); }
/// <summary> /// Saves message /// </summary> public async Task <bool> SaveMessage(QueueMessage message) { try { if (message.IsSaved) { return(false); } if (IsInitialized) { message.IsSaved = await DeliveryHandler.SaveMessage(this, message); } if (message.IsSaved) { Info.AddMessageSave(); } } catch (Exception e) { Server.SendError("SAVE_MESSAGE", e, $"QueueName:{Name}, MessageId:{message.Message.MessageId}"); } return(message.IsSaved); }
public VerifiableProducer(VerifiableProducerConfig clientConfig) { Config = clientConfig; Handle = new Producer <Null, string>(Config.Conf, new NullSerializer(), new StringSerializer(Encoding.UTF8)); ProduceLock = new object(); deliveryHandler = new DeliveryHandler(this); Dbg("Created producer " + Handle.Name); }
private PurchaseManagement(PaymentHandler paymentHandler, DeliveryHandler deliveryHandler) { ClearAll(); this.storeManagment = StoreManagment.Instance; this.paymentHandler = paymentHandler; this.deliveryHandler = deliveryHandler; this.userManager = UserManager.Instance; }
/// <summary> /// Start to process all pending messages. /// This method is called after a client is subscribed to the queue. /// </summary> private async Task ProcessPendingMessages(bool high) { while (State.TriggerSupported) { QueueMessage message; if (high) { lock (HighPriorityLinkedList) { if (HighPriorityLinkedList.Count == 0) { return; } message = HighPriorityLinkedList.First.Value; HighPriorityLinkedList.RemoveFirst(); message.IsInQueue = false; } } else { lock (RegularLinkedList) { if (RegularLinkedList.Count == 0) { return; } message = RegularLinkedList.First.Value; RegularLinkedList.RemoveFirst(); message.IsInQueue = false; } } try { PushResult pr = await State.Push(message); if (pr == PushResult.Empty || pr == PushResult.NoConsumers) { return; } } catch (Exception ex) { Info.AddError(); try { Decision decision = await DeliveryHandler.ExceptionThrown(this, message, ex); await ApplyDecision(decision, message); } catch //if developer does wrong operation, we should not stop { } } } }
public void StartHandler(Handlers Handler, out IBotHandler HandlerOut, params object[] Params) { HandlerOut = null; #region Null checks if (this == null) { return; } if (this.DRoomUser == null) { return; } Room Room = this.DRoom; if (Room == null) { return; } #endregion if (this.ActiveHandlers.ContainsKey(Handler)) { IBotHandler I; this.ActiveHandlers.TryRemove(Handler, out I); } switch (Handler) { case Handlers.TELEPORT: HandlerOut = new TeleportHandler(this, (Item)Params[0]); this.Teleporting = true; break; case Handlers.ATTACK: HandlerOut = new AttackHandler(this, (GameClient)Params[0]); this.Attacking = true; break; case Handlers.DELIVERY: HandlerOut = new DeliveryHandler(this); break; case Handlers.FOODSERVE: HandlerOut = new FoodServeHandler(this, (GameClient)Params[0], (Food.Food)Params[1], (Point)Params[2], (Point)Params[3]); break; default: break; } this.ActiveHandlers.TryAdd(Handler, HandlerOut); }
public void Add_DeliveryNull_ThrowsException() { // Arrange DeliveryHandler deliveryHandler = new DeliveryHandler(); Delivery delivery = null; // Act // Assert Assert.ThrowsException <ArgumentNullException>(() => deliveryHandler.Add(delivery)); }
public void Update_DeliveryNull_ThrowsException() { // Arrange DeliveryHandler deliveryHandler = new DeliveryHandler(); Delivery delivery = null; // Act // Assert Assert.ThrowsException <TargetException>(() => deliveryHandler.Update(delivery)); }
/// <summary> /// Setup the dependencies of this class for tests purposes /// </summary> public void SetupDependencies( StoreManagment storeManagment, PaymentHandler paymentHandler, DeliveryHandler deliveryHandler, UserManager userManager) { this.storeManagment = storeManagment; this.userManager = userManager; this.paymentHandler = paymentHandler; this.deliveryHandler = deliveryHandler; }
public KafkaProducer(KafkaSetting kafkaSetting, Action <Message> receiveMessageAction = null) { if (receiveMessageAction != null) { deliveryHandler = new DeliveryHandler(receiveMessageAction); } var settings = kafkaSetting.ToDictionary(); disableDeliveryReports = kafkaSetting.DisableDeliveryReports; producer = new Producer(settings, false, disableDeliveryReports); }
public static void Main(string[] args) { if (args.Any() && args[0] == "1") { DeliveryHandler.Start(); } else { DeliveryHandler.StartAsync(); } }
/// <function cref ="eCommerce_14a.DeliveryHandler.checkconnection() /// <function cref ="eCommerce_14a.PaymentHandler.checkconnection() public void ConnectToHandlers() { DeliveryHandler dh = DeliveryHandler.Instance; PaymentHandler ph = PaymentHandler.Instance; dh.setConnection(false); ph.setConnections(false); Assert.IsFalse(dh.checkconnection()); Assert.IsFalse(dh.checkconnection()); dh.setConnection(true); ph.setConnections(true); Assert.IsTrue(dh.checkconnection()); Assert.IsTrue(dh.checkconnection()); }
/// <summary> /// Applies decision. /// If save is chosen, saves the message. /// If acknowledge is chosen, sends an ack message to source. /// Returns true is allowed /// </summary> internal async Task <bool> ApplyDecision(Decision decision, QueueMessage message, HorseMessage customAck = null) { try { if (decision.SaveMessage) { await SaveMessage(message); } if (!message.IsProducerAckSent && (decision.Acknowledge == DeliveryAcknowledgeDecision.Always || decision.Acknowledge == DeliveryAcknowledgeDecision.Negative || decision.Acknowledge == DeliveryAcknowledgeDecision.IfSaved && message.IsSaved)) { HorseMessage acknowledge = customAck ?? message.Message.CreateAcknowledge(decision.Acknowledge == DeliveryAcknowledgeDecision.Negative ? "none" : null); if (message.Source != null && message.Source.IsConnected) { bool sent = await message.Source.SendAsync(acknowledge); message.IsProducerAckSent = sent; if (decision.AcknowledgeDelivery != null) { await decision.AcknowledgeDelivery(message, message.Source, sent); } } else if (decision.AcknowledgeDelivery != null) { await decision.AcknowledgeDelivery(message, message.Source, false); } } if (decision.PutBack != PutBackDecision.No) { ApplyPutBack(decision, message); } else if (!decision.Allow) { Info.AddMessageRemove(); _ = DeliveryHandler.MessageDequeued(this, message); } } catch (Exception e) { Server.SendError("APPLY_DECISION", e, $"QueueName:{Name}, MessageId:{message.Message.MessageId}"); } return(decision.Allow); }
public virtual async Task UpsertDocument <TDocument>(IUpsertDocumentContext <TDocument> context) where TDocument : class { var topicName = context.Document.GetType().Name; var config = this._producerConfigManager.GetConfiguration(x => (x.ConfigurationScope & ConfigurationScope.Producer) == ConfigurationScope.Producer); var valueSerialiser = new BinarySerializer <TDocument>(); var keySerialiser = new BinarySerializer <Guid>(); var deliveryHandler = new DeliveryHandler <Guid, TDocument>(); using (var producer = new Producer <Guid, TDocument>(config, keySerialiser, valueSerialiser)) { var deliveryReport = await producer.ProduceAsync(topicName, context.Id, context.Document); //producer.ProduceAsync(topicName, null, context.Document, deliveryHandler); //producer.Flush(); } }
/// <summary> /// Saves message /// </summary> public async Task <bool> SaveMessage(QueueMessage message) { if (message.IsSaved) { return(false); } message.IsSaved = await DeliveryHandler.SaveMessage(this, message); if (message.IsSaved) { Info.AddMessageSave(); } return(message.IsSaved); }
public void Delete_DeliveryExists_ReturnTrue() { // Arrange DeliveryProvider deliveryProvider = new DeliveryProvider(); var allDeliverys = deliveryProvider.GetAll().OrderByDescending(p => p.Id); Delivery lastDelivery = allDeliverys.FirstOrDefault() ?? new Delivery(); DeliveryHandler deliveryHandler = new DeliveryHandler(); // Act bool result = deliveryHandler.Delete(lastDelivery.Id); var deletedDelivery = deliveryProvider.GetById(lastDelivery.Id); // Assert Assert.IsTrue(result); Assert.IsNull(deletedDelivery); }
public static void Produce(string broker, string topicName, long numMessages) { var deliveryHandler = new DeliveryHandler(); using (var producer = new Producer(broker)) using (Topic topic = producer.Topic(topicName)) { Console.WriteLine($"{producer.Name} producing on {topic.Name}"); for (int i = 0; i < numMessages; i++) { byte[] data = Encoding.UTF8.GetBytes(i.ToString()); topic.Produce(data, deliveryHandler); } Console.WriteLine("Shutting down"); } }
public void Add_DeliveryCorrectEntity_ReturnId() { // Arrange DeliveryProvider deliveryProvider = new DeliveryProvider(); var allDeliverys = deliveryProvider.GetAll().OrderByDescending(p => p.Id); Delivery lastDelivery = allDeliverys.FirstOrDefault() ?? new Delivery(); DeliveryHandler deliveryHandler = new DeliveryHandler(); Delivery delivery = new Delivery(); delivery.Name = "Name"; delivery.Price = 123.45m; // Act int id = deliveryHandler.Add(delivery); // Assert Assert.IsTrue(lastDelivery.Id < id); }
protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["id"] != null) { int id = Convert.ToInt16(Request.QueryString["id"]); idnum.Value = Request.QueryString["id"].ToString(); DeliveryHandler dhandler = new DeliveryHandler(); string dt = dhandler.finDecotingBarbyId(id); DecoctingBar.Value = dt; } if (!IsPostBack) { DeliveryHandler dhandler = new DeliveryHandler(); SqlDataReader sdr = dhandler.findNameAll(); if (sdr != null) { while (sdr.Read()) { this.Sendper.Items.Add(new ListItem(sdr["EmNumAName"].ToString())); // this.SwapPer.Items.Add(new ListItem(sdr["JobNum"].ToString())); } } DataBaseLayer db = new DataBaseLayer(); if (Session["userNamebar"] != null) { string name = Session["userNamebar"].ToString(); string sq1 = "select EmNumAName from Employee where jobnum ='" + name + "' "; SqlDataReader sr = db.get_Reader(sq1); if (sr.Read()) { Sendper.Value = sr["EmNumAName"].ToString(); } } else { Response.Write("<script>alert('用户名已失效');window.parent.loginview();</script>"); } } }
public async Task <IActionResult> MakeNewActor(NewActorModel model) { var data = await _getUserInfo(); if (string.IsNullOrWhiteSpace(model.Username)) { return(View("NewActor", model)); } var user = model.Username; var obj = new ASObject(); obj["type"].Add(new ASTerm("Person")); obj["preferredUsername"].Add(new ASTerm(user)); obj["name"].Add(new ASTerm(string.IsNullOrWhiteSpace(model.Name) ? "Unnamed" : model.Name)); if (!string.IsNullOrWhiteSpace(model.Summary)) { obj["summary"].Add(new ASTerm(model.Summary)); } var create = new ASObject(); create["type"].Add(new ASTerm("Create")); create["object"].Add(new ASTerm(obj)); create["to"].Add(new ASTerm("https://www.w3.org/ns/activitystreams#Public")); var stagingStore = new StagingEntityStore(_entityStore); var apo = await _flattener.FlattenAndStore(stagingStore, create); var handler = new CreateActorHandler(stagingStore, apo, null, null, User, _collectionTools, _entityData, _context); await handler.Handle(); var resultUser = await _entityStore.GetEntity((string)handler.MainObject.Data["object"].First().Primitive, false); var outbox = await _entityStore.GetEntity((string)resultUser.Data["outbox"].First().Primitive, false); var delivery = new DeliveryHandler(stagingStore, handler.MainObject, resultUser, outbox, User, _collectionTools, _provider.GetRequiredService <DeliveryService>()); await delivery.Handle(); return(RedirectToAction("Edit", new { id = resultUser.Id })); }
public void Update_DeliveryCorrectEntity_ReturnTrueAndNewEntityHasCorrectSetFields() { // Arrange DeliveryProvider deliveryProvider = new DeliveryProvider(); var oldDeliverys = deliveryProvider.GetById(1); DeliveryHandler deliveryHandler = new DeliveryHandler(); Delivery delivery = new Delivery(); delivery.Id = 1; delivery.Name = "NEW_Name"; delivery.Price = 999.99m; // Act bool result = deliveryHandler.Update(delivery); var newDeliverys = deliveryProvider.GetById(1); // Assert Assert.IsTrue(result); Assert.AreEqual("NEW_Name", newDeliverys.Name); Assert.AreEqual(999.99m, newDeliverys.Price); }
/// <summary> /// Applies decision. /// If save is chosen, saves the message. /// If acknowledge is chosen, sends an ack message to source. /// Returns true is allowed /// </summary> internal async Task <bool> ApplyDecision(Decision decision, QueueMessage message, TmqMessage customAck = null) { if (decision.SaveMessage) { await SaveMessage(message); } if (decision.SendAcknowledge == DeliveryAcknowledgeDecision.Always || decision.SendAcknowledge == DeliveryAcknowledgeDecision.IfSaved && message.IsSaved) { TmqMessage acknowledge = customAck ?? message.Message.CreateAcknowledge(); if (message.Source != null && message.Source.IsConnected) { bool sent = await message.Source.SendAsync(acknowledge); if (decision.AcknowledgeDelivery != null) { await decision.AcknowledgeDelivery(message, message.Source, sent); } } else if (decision.AcknowledgeDelivery != null) { await decision.AcknowledgeDelivery(message, message.Source, false); } } if (decision.KeepMessage) { AddMessage(message, false); } else if (!decision.Allow) { Info.AddMessageRemove(); _ = DeliveryHandler.MessageRemoved(this, message); } return(decision.Allow); }
public static string addDeliveryinfo(string id, string DecoctingBar, string Sendpersonnel, string Remarks, string dtbtype, string logisticsnum) { string result = ""; System.DateTime now = new System.DateTime(); now = System.DateTime.Now; string SendTime = now.ToString(); DeliveryHandler dhandler = new DeliveryHandler(); string DeNum = DecoctingBar.Substring(4, 10); int sdr = dhandler.AddDelivery(id, Convert.ToInt32(DeNum), Sendpersonnel, SendTime, Remarks, dtbtype, logisticsnum); if (sdr == 0) { result = "0"; } else { result = "1"; } return(result); }
/// <summary> /// Called when a acknowledge message is received from the client /// </summary> internal async Task AcknowledgeDelivered(MqClient from, TmqMessage deliveryMessage) { MessageDelivery delivery = TimeKeeper.FindAndRemoveDelivery(from, deliveryMessage.MessageId); //when server and consumer are in pc, //sometimes consumer sends ack before server start to follow ack of the message //that happens when ack message is arrived in less than 0.01ms //in that situation, server can't find the delivery with FindAndRemoveDelivery, it returns null //so we need to check it again after a few milliseconds if (delivery == null) { await Task.Delay(1); delivery = TimeKeeper.FindAndRemoveDelivery(from, deliveryMessage.MessageId); //try again if (delivery == null) { await Task.Delay(3); delivery = TimeKeeper.FindAndRemoveDelivery(from, deliveryMessage.MessageId); } } bool success = true; if (deliveryMessage.Length > 0 && deliveryMessage.Content != null) { string msg = deliveryMessage.Content.ToString(); if (msg.Equals("FAILED", StringComparison.InvariantCultureIgnoreCase) || msg.Equals("TIMEOUT", StringComparison.InvariantCultureIgnoreCase)) { success = false; } } if (delivery != null) { delivery.MarkAsAcknowledged(success); } if (success) { Info.AddAcknowledge(); } else { Info.AddUnacknowledge(); } Decision decision = await DeliveryHandler.AcknowledgeReceived(this, deliveryMessage, delivery, success); if (delivery != null) { if (Options.HideClientNames) { deliveryMessage.SetSource(null); } await ApplyDecision(decision, delivery.Message, deliveryMessage); } ReleaseAcknowledgeLock(true); }
/// <summary> /// Start to process all pending messages. /// This method is called after a client is subscribed to the queue. /// </summary> private async Task ProcessPendingMessages(bool high) { while (State.TriggerSupported) { if (_clients.Count == 0) { return; } QueueMessage message; if (high) { lock (PriorityMessagesList) { if (PriorityMessagesList.Count == 0) { return; } message = PriorityMessagesList.First?.Value; if (message == null) { return; } PriorityMessagesList.RemoveFirst(); message.IsInQueue = false; } } else { lock (MessagesList) { if (MessagesList.Count == 0) { return; } message = MessagesList.First?.Value; if (message == null) { return; } MessagesList.RemoveFirst(); message.IsInQueue = false; } } try { PushResult pr = await State.Push(message); if (pr == PushResult.NoConsumers || pr == PushResult.Empty) { return; } } catch (Exception ex) { Server.SendError("PROCESS_MESSAGES", ex, $"QueueName:{Name}"); Info.AddError(); try { Decision decision = await DeliveryHandler.ExceptionThrown(this, message, ex); await ApplyDecision(decision, message); } catch //if developer does wrong operation, we should not stop { } } if (Options.DelayBetweenMessages > 0) { await Task.Delay(Options.DelayBetweenMessages); } } }
protected void Page_Load(object sender, EventArgs e) { String type = Request.QueryString["type"].ToString(); if ("save".Equals(type)) { try { string imgbase64 = Request.Form["imgbase64"]; //图片 string tisaneNum = Request.Form["tisaneNum"]; //煎药单号 string userNum = Request.Form["userNum"]; //员工号 string barcode = Request.Form["barcode"]; //条形码 string userName = Request.Form["userName"]; //员工姓名 string imgname = null; string nowDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); if (imgbase64 != null && imgbase64.Trim().Length > 0) { imgbase64 = imgbase64.Replace(' ', '+'); Byte[] bimg = Convert.FromBase64String(imgbase64); //D:\\项目\\煎药厂\\src\\web\\upload\\ String path = System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "upload\\"; imgname = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png"; FileBinaryConvertHelper.Bytes2File(bimg, path + imgname); } DeliveryHandler dh = new DeliveryHandler(); RecipeModel rm = new RecipeModel(); DataTable dtable = rm.findPackingFinish(Convert.ToInt32(tisaneNum)); int result = 0; if (dtable.Rows.Count > 0) { DataTable dtables = rm.findDeliveryFinish(Convert.ToInt32(tisaneNum)); if (dtables.Rows.Count > 0) { // result = dh.AddDelivery(Convert.ToInt32(userNum), nowDate, barcode, tisaneNum, imgname, userName); result = dh.AddDelivery(Convert.ToInt32(userNum), nowDate, barcode, tisaneNum, imgname, userName); } else { result = 0; } } if (result > 0) { Response.Write("{\"code\":\"0\",\"msg\":\"操作成功\"}"); } else { Response.Write("{\"code\":\"1\",\"msg\":\"操作失败\"}"); } } catch (Exception e1) { Response.Write("{\"code\":\"1\",\"msg\":\"操作失败\"}"); } } else if ("get".Equals(type)) { String id = Request.QueryString["id"].ToString(); RecipeModel rm2 = new RecipeModel(); string warningid = rm2.getRetentionWarning(6); DeliveryModel rm = new DeliveryModel(); DataTable dataTable = rm.findDeliveryInfo(Convert.ToInt32(id), DateTime.Now.ToString("yyyy-MM-dd")); Response.Write("{\"code\":\"0\",\"msg\":\"操作成功\",\"data\":" + DataTableToJson.ToJson(dataTable) + ",\"warning\":\"" + warningid + "\"}"); } }
/// <summary> /// Pushes a message into the queue. /// </summary> internal async Task <PushResult> Push(QueueMessage message, MqClient sender) { if (Status == QueueStatus.Stopped) { return(PushResult.StatusNotSupported); } if (Options.MessageLimit > 0 && HighPriorityLinkedList.Count + RegularLinkedList.Count >= Options.MessageLimit) { return(PushResult.LimitExceeded); } if (Options.MessageSizeLimit > 0 && message.Message.Length > Options.MessageSizeLimit) { return(PushResult.LimitExceeded); } //prepare properties message.Message.FirstAcquirer = true; message.Message.AcknowledgeRequired = Options.RequestAcknowledge; //if message doesn't have message id and "UseMessageId" option is enabled, create new message id for the message if (Options.UseMessageId && string.IsNullOrEmpty(message.Message.MessageId)) { message.Message.SetMessageId(Channel.Server.MessageIdGenerator.Create()); } //if we have an option maximum wait duration for message, set it after message joined to the queue. //time keeper will check this value and if message time is up, it will remove message from the queue. if (Options.MessageTimeout > TimeSpan.Zero) { message.Deadline = DateTime.UtcNow.Add(Options.MessageTimeout); } if (Options.HideClientNames) { message.Message.SetSource(null); } try { //fire message receive event Info.AddMessageReceive(); Decision decision = await DeliveryHandler.ReceivedFromProducer(this, message, sender); message.Decision = decision; bool allow = await ApplyDecision(decision, message); if (!allow) { return(PushResult.Success); } if (State.CanEnqueue(message)) { await RunInListSync(() => AddMessage(message)); if (State.TriggerSupported && !_triggering) { _ = Trigger(); } } else { _ = State.Push(message); } return(PushResult.Success); } catch (Exception ex) { Info.AddError(); try { Decision decision = await DeliveryHandler.ExceptionThrown(this, State.ProcessingMessage, ex); if (State.ProcessingMessage != null) { await ApplyDecision(decision, State.ProcessingMessage); if (decision.KeepMessage && !State.ProcessingMessage.IsInQueue) { AddMessage(State.ProcessingMessage, false); } } } catch //if developer does wrong operation, we should not stop { } } return(PushResult.Success); }
public async Task <IActionResult> DoRegister(RegisterViewModel model) { if (!_configuration.GetSection("Kroeg").GetValue <bool>("CanRegister")) { return(NotFound()); } var apuser = new APUser { Username = model.Username, Email = model.Email }; if ((await _relevantEntities.FindEntitiesWithPreferredUsername(model.Username)).Count > 0) { ModelState.AddModelError("", "Username is already in use!"); } if (model.Password != model.VerifyPassword) { ModelState.AddModelError("", "Passwords don't match!"); } if (!ModelState.IsValid) { return(View("Register", model)); } await _connection.OpenAsync(); using (var trans = _connection.BeginTransaction()) { var result = await _userManager.CreateAsync(apuser, model.Password); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.First().Description); } if (!ModelState.IsValid) { return(View("Register", model)); } if (await _connection.ExecuteAsync("select count(*) from \"Users\"") == 1) { // await _userManager.AddClaimAsync(apuser, new Claim("admin", "true")); } await _signInManager.SignInAsync(apuser, false); var user = model.Username; var obj = new ASObject(); obj.Type.Add("https://www.w3.org/ns/activitystreams#Person"); obj["preferredUsername"].Add(ASTerm.MakePrimitive(user)); obj["name"].Add(ASTerm.MakePrimitive(user)); var create = new ASObject(); create.Type.Add("https://www.w3.org/ns/activitystreams#Create"); create["object"].Add(ASTerm.MakeSubObject(obj)); create["to"].Add(ASTerm.MakeId("https://www.w3.org/ns/activitystreams#Public")); Console.WriteLine($"--- creating actor. Unflattened:\n{create.Serialize().ToString(Formatting.Indented)}"); var apo = await _entityFlattener.FlattenAndStore(_entityStore, create); Console.WriteLine($"Flat: {apo.Data.Serialize().ToString(Formatting.Indented)}\n----"); var handler = new CreateActorHandler(_entityStore, apo, null, null, User, _collectionTools, _entityConfiguration, _connection); handler.UserOverride = apuser.Id; await handler.Handle(); var resultUser = await _entityStore.GetEntity(handler.MainObject.Data["object"].First().Id, false); var outbox = await _entityStore.GetEntity(resultUser.Data["outbox"].First().Id, false); var delivery = new DeliveryHandler(_entityStore, handler.MainObject, resultUser, outbox, User, _collectionTools, _provider.GetRequiredService <DeliveryService>()); await delivery.Handle(); trans.Commit(); return(RedirectToActionPermanent("Index", "Settings")); } }
public ActionResult _Remove(int Id) { ProductViewModel helperModel = new ProductViewModel(); IEnumerable<Book> ifBooks = (IEnumerable<Book>)Session["myBooks"]; IEnumerable<Technology> ifGadget = (IEnumerable<Technology>)Session["myGadget"]; List<CartItem> myItems = (List<CartItem>)Session["myItems"]; CartItem thishereItem = new CartItem(); try { thishereItem = myItems.Single(kill => kill.CartItemID == Id); int pId = thishereItem.ProductID; ProductViewModel.CartHelper cartHelp; List<ProductViewModel.CartHelper> itemList = new List<ProductViewModel.CartHelper>(); myItems.Remove(thishereItem); if (myItems.Count == 0) { return RedirectToAction("Edit"); } double cartTotal = 0; #region Calculate Total Per Item if (myItems != null) { if (ifBooks != null) { var revised = from rev in ifBooks join item in myItems on rev.ProductID equals item.ProductID where rev.ProductID == item.ProductID select new { rev.ProductID, rev.SellingPrice, item.Quantity }; foreach (var ite in revised) { cartHelp = new ProductViewModel.CartHelper(); cartHelp.ProductID = ite.ProductID; cartHelp.TotalPerItem = (ite.SellingPrice * ite.Quantity); cartTotal += (ite.SellingPrice * ite.Quantity); itemList.Add(cartHelp); } } if (ifGadget != null) { var revised = from rev in ifGadget join item in myItems on rev.ProductID equals item.ProductID where rev.ProductID == item.ProductID select new { rev.ProductID, rev.SellingPrice, item.Quantity }; foreach (var ite in revised) { cartHelp = new ProductViewModel.CartHelper(); cartHelp.ProductID = ite.ProductID; cartHelp.TotalPerItem = (ite.SellingPrice * ite.Quantity); cartTotal += (ite.SellingPrice * ite.Quantity); itemList.Add(cartHelp); } } } #endregion #region Totalling List<Company> company = new List<Company>(); BusinessLogicHandler myHandler = new BusinessLogicHandler(); company = myHandler.GetCompanyDetails(); double vat = 0; foreach (var item in company) { vat = item.VATPercentage; } double vatAmount = (cartTotal * vat); double subTotal = (cartTotal - vatAmount); ProductViewModel.CartConclude finishing = new ProductViewModel.CartConclude(); finishing.CartTotal = cartTotal; finishing.VatAddedTotal = vatAmount; finishing.SubTotal = subTotal; #endregion #region Feeding the model helperModel.ItsA_wrap = new List<ProductViewModel.CartConclude>(); helperModel.ItsA_wrap.Add(finishing); helperModel.secureCart = itemList; helperModel.allBook = new List<Book>(); helperModel.allBook = ifBooks.ToList(); helperModel.allCartItem = new List<CartItem>(); helperModel.allCartItem = myItems; helperModel.allTechnology = new List<Technology>(); helperModel.allTechnology = ifGadget.ToList(); #endregion #region Drop down data DeliveryHandler deliver = new DeliveryHandler(); IEnumerable<Delivery> delivery = (IEnumerable<Delivery>)deliver.GetDeliveryList(); var dataStore = from name in delivery select new { Value = name.DeliveryServiceID, Text = name.ServiceName }; ViewBag.DeliveryList = new SelectList(dataStore.ToList()); List<SelectListItem> deliveryI = new List<SelectListItem>(); deliveryI.Add(new SelectListItem { Text = "Delivery Service", Value = "", Selected = true }); foreach (var item in delivery) { deliveryI.Add(new SelectListItem { Text = item.ServiceName, Value = item.DeliveryServiceID.ToString() }); } helperModel.I_DeliveryList = new List<SelectListItem>(); helperModel.I_DeliveryList = deliveryI; ViewData["I_Delivery"] = deliveryI; #endregion return View("Checkout", helperModel); } catch { return RedirectToAction("Edit"); } }
public ActionResult Checkout(FormCollection collection, ProductViewModel model) { Delivery shipping = new Delivery(); IEnumerable<Book> ifBooks = (IEnumerable<Book>)Session["myBooks"]; IEnumerable<Technology> ifGadget = (IEnumerable<Technology>)Session["myGadget"]; List<CartItem> myItems = (List<CartItem>)Session["myItems"]; myHandler = new BusinessLogicHandler(); #region Get Shipping Data try { shipping = myHandler.GetDeliveryDetails(Convert.ToInt32(collection[1].ToString())); if (ModelState.ContainsKey("I_DeliveryList")) ModelState["I_DeliveryList"].Errors.Clear(); } catch { ModelState.AddModelError("deliveryHelper.DeliveryServicePrice", "Please select a delivery service from dropdown !"); } #endregion #region Cathing model errors var error = ModelState.Values.SelectMany(e => e.Errors); var errors = ModelState .Where(x => x.Value.Errors.Count > 0) .Select(x => new { x.Key, x.Value.Errors }) .ToArray(); #endregion int? IID = 0; if (ModelState.IsValid) { #region Get User string userName = User.Identity.GetUserName(); ApplicationDbContext dataSocket = new ApplicationDbContext(); UserStore<ApplicationUser> myStore = new UserStore<ApplicationUser>(dataSocket); userMgr = new ApplicationUserManager(myStore); var user = userMgr.FindByEmail(userName); #endregion try { #region Creating the reciept/invoice Invoice reciept = new Invoice { User_Id = user.Id, DateCreated = DateTime.Now, DeliveryAddress = model.deliveryHelper.DeliveryAddress, DeliveryServiceID = Convert.ToInt32(collection[1].ToString()), Status = false }; try { InvoiceItem invoiceLine = new InvoiceItem(); invoiceLine = myHandler.GetInvoiceLastNumber(reciept); foreach (var item in myItems) { invoiceLine.CartItemID = item.CartItemID; invoiceLine.ProductID = item.ProductID; invoiceLine.Quantity = item.Quantity; #region Get Product Price bool chk = false; chk = myHandler.CheckProductType(item.ProductID); if (chk) { Book book = new Book(); book = myHandler.GetBook(item.ProductID); invoiceLine.Price = book.SellingPrice; myHandler.AddinvoiceItem(invoiceLine); } else { Technology device = new Technology(); device = myHandler.GetTechnologyDetails(item.ProductID); invoiceLine.Price = device.SellingPrice; myHandler.AddinvoiceItem(invoiceLine); } #endregion } IID = invoiceLine.InvoiceID; } catch { } #endregion #region Placing the order try { #region Prep Utilities Order ord; Book book = new Book(); Technology gadget = new Technology(); int supplierId = 0; OrderItem orderLine = new OrderItem(); myHandler = new BusinessLogicHandler(); List<int> orders = new List<int>(); List<int> suppliers = new List<int>(); #endregion foreach (var item in myItems) { if (myHandler.CheckProductType(item.ProductID)) { book = myHandler.GetBook(item.ProductID); supplierId = book.SupplierID; if (suppliers.Contains(book.SupplierID)) { int x = suppliers.IndexOf(supplierId); orderLine.OrderNo = orders.ElementAt(x); orderLine.ProductID = item.ProductID; orderLine.Quantity = item.Quantity; myHandler.AddOrderItem(orderLine); } else { suppliers.Add(supplierId); ord = new Order { DateCreated = DateTime.Now.Date, SupplierID = supplierId, InvoiceID = IID.GetValueOrDefault(), DateLastModified = DateTime.Now.Date, Status = false }; orderLine = myHandler.AddOrder(ord); orders.Add(orderLine.OrderNo); orderLine.ProductID = item.ProductID; orderLine.Quantity = item.Quantity; myHandler.AddOrderItem(orderLine); } } else { supplierId = ifGadget.SingleOrDefault(m => m.ProductID == item.ProductID).SupplierID; if (suppliers.Contains(supplierId)) { int y = suppliers.IndexOf(supplierId); orderLine.OrderNo = orders.ElementAt(y); orderLine.ProductID = item.ProductID; orderLine.Quantity = item.Quantity; myHandler.AddOrderItem(orderLine); } else { suppliers.Add(supplierId); ord = new Order { DateCreated = DateTime.Now.Date, SupplierID = supplierId, InvoiceID = IID.GetValueOrDefault(), DateLastModified = DateTime.Now.Date, Status = false }; orderLine = myHandler.AddOrder(ord); orders.Add(orderLine.OrderNo); orderLine.ProductID = item.ProductID; orderLine.Quantity = item.Quantity; myHandler.AddOrderItem(orderLine); } } } } catch { } #endregion } catch {/*Navigate to custom error page*/ } Session["deliverData"] = model; return RedirectToAction("Receipt", new { IID = IID }); } else { #region Feed The Model CartItem thishereItem = new CartItem(); try { ProductViewModel.CartHelper cartHelp; List<ProductViewModel.CartHelper> itemList = new List<ProductViewModel.CartHelper>(); double cartTotal = 0; if (myItems != null) { if (ifBooks != null) { var revised = from rev in ifBooks join item in myItems on rev.ProductID equals item.ProductID where rev.ProductID == item.ProductID select new { rev.ProductID, rev.SellingPrice, item.Quantity }; foreach (var ite in revised) { cartHelp = new ProductViewModel.CartHelper(); cartHelp.ProductID = ite.ProductID; cartHelp.TotalPerItem = (ite.SellingPrice * ite.Quantity); cartTotal += (ite.SellingPrice * ite.Quantity); itemList.Add(cartHelp); } } if (ifGadget != null) { var revised = from rev in ifGadget join item in myItems on rev.ProductID equals item.ProductID where rev.ProductID == item.ProductID select new { rev.ProductID, rev.SellingPrice, item.Quantity }; foreach (var ite in revised) { cartHelp = new ProductViewModel.CartHelper(); cartHelp.ProductID = ite.ProductID; cartHelp.TotalPerItem = (ite.SellingPrice * ite.Quantity); cartTotal += (ite.SellingPrice * ite.Quantity); itemList.Add(cartHelp); } } } List<Company> company = new List<Company>(); myHandler = new BusinessLogicHandler(); company = myHandler.GetCompanyDetails(); double vat = 0; foreach (var item in company) { vat = item.VATPercentage; } //calc double vatAmount = (cartTotal * vat); double subTotal = (cartTotal - vatAmount); ProductViewModel.CartConclude finishing = new ProductViewModel.CartConclude(); finishing.CartTotal = cartTotal; finishing.VatAddedTotal = vatAmount; finishing.SubTotal = subTotal; model.ItsA_wrap = new List<ProductViewModel.CartConclude>(); model.ItsA_wrap.Add(finishing); model.deliveryHelper.DeliveryServiceName = shipping.ServiceName; model.deliveryHelper.DeliveryServicePrice = shipping.Price; model.deliveryHelper.DeliveryServiceType = shipping.ServiceType; model.secureCart = itemList; model.allBook = new List<Book>(); model.allBook = ifBooks.ToList() ; model.allCartItem = new List<CartItem>(); model.allCartItem = myItems; model.allTechnology = new List<Technology>(); model.allTechnology = ifGadget.ToList(); } catch { } #endregion #region Drop down data DeliveryHandler deliver = new DeliveryHandler(); IEnumerable<Delivery> delivery = (IEnumerable<Delivery>)deliver.GetDeliveryList(); var dataStore = from name in delivery select new { Value = name.DeliveryServiceID, Text = name.ServiceName }; ViewBag.DeliveryList = new SelectList(dataStore.ToList()); List<SelectListItem> deliveryI = new List<SelectListItem>(); deliveryI.Add(new SelectListItem { Text = "Delivery Service", Value = "", Selected = true }); foreach (var item in delivery) { deliveryI.Add(new SelectListItem { Text = item.ServiceName, Value = item.DeliveryServiceID.ToString() }); } model.I_DeliveryList = new List<SelectListItem>(); model.I_DeliveryList = deliveryI; ViewData["I_Delivery"] = deliveryI; #endregion return View(model); } }
/// <summary> /// Pushes a message into the queue. /// </summary> internal async Task <PushResult> Push(QueueMessage message, MqClient sender) { if (!IsInitialized) { try { UpdateOptionsByMessage(message.Message); DeliveryHandlerBuilder handlerBuilder = new DeliveryHandlerBuilder { Server = Server, Queue = this, Headers = message.Message.Headers, DeliveryHandlerHeader = message.Message.FindHeader(HorseHeaders.DELIVERY_HANDLER) }; IMessageDeliveryHandler deliveryHandler = await Server.DeliveryHandlerFactory(handlerBuilder); InitializeQueue(deliveryHandler); handlerBuilder.TriggerAfterCompleted(); } catch (Exception e) { Server.SendError("INITIALIZE_IN_PUSH", e, $"QueueName:{Name}"); throw; } } if (Status == QueueStatus.Stopped) { return(PushResult.StatusNotSupported); } if (Options.MessageLimit > 0 && PriorityMessagesList.Count + MessagesList.Count >= Options.MessageLimit) { return(PushResult.LimitExceeded); } if (Options.MessageSizeLimit > 0 && message.Message.Length > Options.MessageSizeLimit) { return(PushResult.LimitExceeded); } //remove operational headers that are should not be sent to consumers or saved to disk message.Message.RemoveHeaders(HorseHeaders.DELAY_BETWEEN_MESSAGES, HorseHeaders.ACKNOWLEDGE, HorseHeaders.QUEUE_NAME, HorseHeaders.QUEUE_STATUS, HorseHeaders.QUEUE_TOPIC, HorseHeaders.PUT_BACK_DELAY, HorseHeaders.DELIVERY, HorseHeaders.DELIVERY_HANDLER, HorseHeaders.CC); //prepare properties message.Message.WaitResponse = Options.Acknowledge != QueueAckDecision.None; //if message doesn't have message id and "UseMessageId" option is enabled, create new message id for the message if (Options.UseMessageId && string.IsNullOrEmpty(message.Message.MessageId)) { message.Message.SetMessageId(Server.MessageIdGenerator.Create()); } //if we have an option maximum wait duration for message, set it after message joined to the queue. //time keeper will check this value and if message time is up, it will remove message from the queue. if (Options.MessageTimeout > TimeSpan.Zero) { message.Deadline = DateTime.UtcNow.Add(Options.MessageTimeout); } if (Options.HideClientNames) { message.Message.SetSource(null); } try { //fire message receive event Info.AddMessageReceive(); Decision decision = await DeliveryHandler.ReceivedFromProducer(this, message, sender); message.Decision = decision; bool allow = await ApplyDecision(decision, message); if (!allow) { return(PushResult.Success); } //trigger message produced event OnMessageProduced.Trigger(message); if (State.CanEnqueue(message)) { await RunInListSync(() => AddMessage(message)); if (State.TriggerSupported && !_triggering) { _ = Trigger(); } } else { _ = State.Push(message); } return(PushResult.Success); } catch (Exception ex) { Server.SendError("PUSH", ex, $"QueueName:{Name}"); Info.AddError(); try { Decision decision = await DeliveryHandler.ExceptionThrown(this, State.ProcessingMessage, ex); if (State.ProcessingMessage != null) { await ApplyDecision(decision, State.ProcessingMessage); if (!State.ProcessingMessage.IsInQueue) { if (decision.PutBack == PutBackDecision.Start) { AddMessage(State.ProcessingMessage, false); } else if (decision.PutBack == PutBackDecision.End) { AddMessage(State.ProcessingMessage); } } } } catch //if developer does wrong operation, we should not stop { } } return(PushResult.Success); }
public async Task<ActionResult> Checkout() { #region Data to Display CartActions act = new CartActions(); WishlistActions wishAct = new WishlistActions(); ApplicationDbContext dataSocket = new ApplicationDbContext(); UserStore<ApplicationUser> myStore = new UserStore<ApplicationUser>(dataSocket); userMgr = new ApplicationUserManager(myStore); var thisUser = await userMgr.FindByNameAsync(User.Identity.Name); int Id = (int)thisUser.Carts.CartID; try { double nm = await GetCartTotal(Id); string[] xn = nm.ToString().Split('.'); Session["cartTotal"] = xn[0] + "," + xn[1]; } catch { Session["cartTotal"] = act.GetTotalAsync(Id); } Session["wishlistTotal"] = wishAct.GetWishlistTotal(thisUser.Wishlists.WishlistID); //List<CartItem> myItems = new List<CartItem>(); ProductViewModel myNewModel = new ProductViewModel(); IEnumerable<CartItem> myItems = act.GetCartItemsAsync(Id); if (myItems != null) { myHandler = new BusinessLogicHandler(); List<Book> ifBooks = new List<Book>(); List<Technology> ifGadget = new List<Technology>(); foreach (var item in myItems) { if (myHandler.CheckProductType(item.ProductID)) { Book book = new Book(); book = myHandler.GetBook(item.ProductID); ifBooks.Add(book); } else { Technology device = new Technology(); device = myHandler.GetTechnologyDetails(item.ProductID); ifGadget.Add(device); } } myNewModel.allBook = ifBooks; myNewModel.allCartItem = myItems.ToList(); myNewModel.allTechnology = ifGadget; List<ProductViewModel.CartHelper> itemList = new List<ProductViewModel.CartHelper>(); ProductViewModel.CartHelper cartHelp; if (myItems != null) { var revised = from rev in ifBooks join item in myItems on rev.ProductID equals item.ProductID where rev.ProductID == item.ProductID select new { rev.ProductID, rev.SellingPrice, item.Quantity }; foreach (var ite in revised) { cartHelp = new ProductViewModel.CartHelper(); cartHelp.ProductID = ite.ProductID; cartHelp.TotalPerItem = (ite.SellingPrice * ite.Quantity); itemList.Add(cartHelp); } } if (myItems != null) { if (ifGadget != null) { var revised = from rev in ifGadget join item in myItems on rev.ProductID equals item.ProductID where rev.ProductID == item.ProductID select new { rev.ProductID, rev.SellingPrice, item.Quantity }; foreach (var ite in revised) { cartHelp = new ProductViewModel.CartHelper(); cartHelp.ProductID = ite.ProductID; cartHelp.TotalPerItem = (ite.SellingPrice * ite.Quantity); itemList.Add(cartHelp); } } } double cartTotal = Convert.ToDouble(Session["cartTotal"].ToString()); cartTotal = cartTotal / 100; List<Company> company = myHandler.GetCompanyDetails(); double vat = 0; foreach (var item in company) { vat = item.VATPercentage; } vat = vat + 1; double subTotal = cartTotal / vat; double vatAmount = cartTotal - subTotal; ProductViewModel.CartConclude finishing = new ProductViewModel.CartConclude(); finishing.CartTotal = cartTotal; finishing.VatAddedTotal = vatAmount; finishing.SubTotal = subTotal; myNewModel.ItsA_wrap = new List<ProductViewModel.CartConclude>(); myNewModel.ItsA_wrap.Add(finishing); myNewModel.secureCart = itemList; } else { return RedirectToAction("Edit"); } #endregion #region Drop down data DeliveryHandler deliver = new DeliveryHandler(); IEnumerable<Delivery> delivery = (IEnumerable<Delivery>)deliver.GetDeliveryList(); var dataStore = from name in delivery select new { Value = name.DeliveryServiceID, Text = name.ServiceName }; ViewBag.DeliveryList = new SelectList(dataStore.ToList()); List<SelectListItem> deliveryI = new List<SelectListItem>(); deliveryI.Add(new SelectListItem { Text = "Delivery Service", Value = "", Selected = true }); foreach (var item in delivery) { deliveryI.Add(new SelectListItem { Text = item.ServiceName, Value = item.DeliveryServiceID.ToString() }); } myNewModel.I_DeliveryList = new List<SelectListItem>(); myNewModel.I_DeliveryList = deliveryI; ViewData["I_Delivery"] = deliveryI; #endregion #region Default Address if (thisUser.Address != null) { myNewModel.deliveryHelper = new DeliveryHelper(); myNewModel.deliveryHelper.DeliveryAddress = thisUser.Address; } #endregion return View(myNewModel); }
/// <summary> /// Called when a acknowledge message is received from the client /// </summary> internal async Task AcknowledgeDelivered(MqClient from, HorseMessage deliveryMessage) { try { if (!IsInitialized) { return; } MessageDelivery delivery = TimeKeeper.FindAndRemoveDelivery(from, deliveryMessage.MessageId); //when server and consumer are in pc, //sometimes consumer sends ack before server start to follow ack of the message //that happens when ack message is arrived in less than 0.01ms //in that situation, server can't find the delivery with FindAndRemoveDelivery, it returns null //so we need to check it again after a few milliseconds if (delivery == null) { await Task.Delay(1); delivery = TimeKeeper.FindAndRemoveDelivery(from, deliveryMessage.MessageId); //try again if (delivery == null) { await Task.Delay(3); delivery = TimeKeeper.FindAndRemoveDelivery(from, deliveryMessage.MessageId); } } bool success = !(deliveryMessage.HasHeader && deliveryMessage.Headers.Any(x => x.Key.Equals(HorseHeaders.NEGATIVE_ACKNOWLEDGE_REASON, StringComparison.InvariantCultureIgnoreCase))); // ReSharper disable once ConditionIsAlwaysTrueOrFalse (it's possible, resharper doesn't work properly in here) if (delivery != null) { if (delivery.Receiver != null && delivery.Message == delivery.Receiver.CurrentlyProcessing) { delivery.Receiver.CurrentlyProcessing = null; } delivery.MarkAsAcknowledged(success); } if (success) { Info.AddAcknowledge(); } else { Info.AddNegativeAcknowledge(); } Decision decision = await DeliveryHandler.AcknowledgeReceived(this, deliveryMessage, delivery, success); // ReSharper disable once ConditionIsAlwaysTrueOrFalse (it's possible, resharper doesn't work properly in here) if (delivery != null) { if (Options.HideClientNames) { deliveryMessage.SetSource(null); } await ApplyDecision(decision, delivery.Message, deliveryMessage); } ReleaseAcknowledgeLock(true); } catch (Exception e) { Server.SendError("QUEUE_ACK_RECEIVED", e, $"QueueName:{Name}, MessageId:{deliveryMessage.MessageId}"); } }