public ActionResult ShowAllMessages()
        {
            MessagesStore ms = new MessagesStore();

            ms = (MessagesStore)System.Web.HttpContext.Current.Application["messagesStore"];

            return(PartialView("_Messages", ms));
        }
        public ActionResult CreateMessage(string userName, string messageBody)
        {
            Message       message = new Message(messageBody, userName);
            MessagesStore ms      = (MessagesStore)System.Web.HttpContext.Current.Application["messagesStore"];

            ms.Add(message);
            return(RedirectToAction("Index"));
        }
        public ActionResult GroupMessagesByUsers()
        {
            MessagesStore ms = new MessagesStore();

            ms = (MessagesStore)System.Web.HttpContext.Current.Application["messagesStore"];
            var groupedMessages = ms.Messages.GroupBy(u => u.User.Name);

            return(PartialView("_UserMessages", groupedMessages));
        }
예제 #4
0
        // Entry-point for processing messages
        public virtual void ProcessArrivalMessages()
        {
            try
            {
                // Getting all necessary info and initialization stores before processing
                var validationSettings = GetValidationSettingsForProducts(checkingProductIds);
                var validationRules    = GetValidationRules();

                SetRulesForSettings(validationSettings, validationRules);

                lock (locker)
                {
                    messagesStore = new MessagesStore();

                    var messages = _arrivalMessagesRepository.GetNotProcessedMessages(checkingProductIds, null)
                                   .OrderBy(t => t.CreatedOn).ToList();

                    messagesStore.Messages = messages;

                    InitDictionary(messages);
                }

                SmartThreadPool smartThreadPool = new SmartThreadPool();

                // Max count threads, which can work together in one time
                var threadpoolMaxCountOfThreads = int.Parse(ConfigurationManager.AppSettings[SchedulerConfig.NumberOfSimultaneouslyProcessedMessagesAlias]);
                smartThreadPool.MaxThreads = (int)Math.Min(threadpoolMaxCountOfThreads, messagesStore.Messages.Count);

                // Parallel processing by using SmartThreadPool
                foreach (ArrivalMessage message in messagesStore.Messages)
                {
                    smartThreadPool.QueueWorkItem(new WorkItemCallback(this.callback), new ThreadInfo
                    {
                        Message            = message,
                        ValidationSettings = validationSettings.Where(x => x.ProductId == message.ProductId).ToList(),
                    });
                }

                smartThreadPool.WaitForIdle();

                smartThreadPool.Shutdown();

                // Then we delete all files, if their count more than limit(another way it can call OutOfMemoryException)
                foreach (var checkingProductId in checkingProductIds)
                {
                    _downloadService.CheckTmpFilesDir(checkingProductId);
                }
            }
            catch (Exception er)
            {
                var errorMessage = GetExceptionInfo(er);

                _log.Error(errorMessage);
            }
        }
예제 #5
0
 public Repositories(string path)
 {
     FileWordsStore    = new FileWordsStore(path);
     MistakeWordsStore = new MistakeWordsStore(path);
     MessagesStore     = new MessagesStore(path);
 }
예제 #6
0
 public void Load()
 {
     FileWordsStore.LoadWordsDictionary();
     MessagesStore.LoadMessages();
     MistakeWordsStore.LoadMistakeWords();
 }