Esempio n. 1
0
        protected virtual void RetrieveMessage(Message message, int folderId, string uidl, string md5Hash, bool hasParseError, bool unread = true, int[] tagsIds = null)
        {
            MailMessage messageItem;

            if (mailBoxManager.MailReceive(Account, message, folderId, uidl, md5Hash, hasParseError, unread, tagsIds, out messageItem) < 1)
            {
                throw new Exception("MailReceive() returned id < 1;");
            }

            if (messageItem == null)
            {
                return;
            }

            mailBoxManager.AddRelationshipEventForLinkedAccounts(Account, messageItem, log);

            mailBoxManager.SaveEmailInData(Account, messageItem, log);

            var now = DateTime.UtcNow;

            if ((now - _lastSignal).TotalSeconds > SIGNALR_WAIT_SECONDS)
            {
                log.Debug("InvokeOnRetrieve add to signalr cache UserId = {0} TenantId = {1}", Account.UserId, Account.TenantId);
                _signalrServiceClient.SendUnreadUser(Account.TenantId, Account.UserId);
                _needSignal = false;
                _lastSignal = now;
            }
            else
            {
                log.Debug("InvokeOnRetreive UserId = {0} TenantId = {1} already exists in signalr cache", Account.UserId, Account.TenantId);
                _needSignal = true;
            }
        }
Esempio n. 2
0
        private static void SendUnreadUser(int tenant, string userId)
        {
            var log = LoggerFactory.GetLogger(LoggerFactory.LoggerType.Log4Net, "SignalrService");

            try
            {
                var count          = 0;
                var mailBoxManager = new MailBoxManager(log);

                var mailFolderInfos = mailBoxManager.GetFolders(tenant, userId);

                foreach (var mailFolderInfo in mailFolderInfos)
                {
                    if (mailFolderInfo.id != MailFolder.Ids.inbox)
                    {
                        continue;
                    }
                    count = mailFolderInfo.unreadMessages;
                    break;
                }
                CoreContext.TenantManager.SetCurrentTenant(tenant);
                var userInfo = CoreContext.UserManager.GetUsers(Guid.Parse(userId));
                if (userInfo.ID != Constants.LostUser.ID)
                {
                    // sendMailsCount
                    _signalrServiceClient.SendUnreadUser(tenant, userId, count);
                }
            }
            catch (Exception e)
            {
                log.Error("Unknown Error. {0}, {1}", e.ToString(),
                          e.InnerException != null ? e.InnerException.Message : string.Empty);
            }
        }
Esempio n. 3
0
        private static void SendUnreadUser(int tenant, string userId)
        {
            var log = LogManager.GetLogger("ASC.Mail.SignalrWorker");

            try
            {
                var engineFactory = new EngineFactory(tenant, userId);

                var mailFolderInfos = engineFactory.FolderEngine.GetFolders();

                var count = (from mailFolderInfo in mailFolderInfos
                             where mailFolderInfo.id == FolderType.Inbox
                             select mailFolderInfo.unreadMessages)
                            .FirstOrDefault();

                CoreContext.TenantManager.SetCurrentTenant(tenant);
                var userInfo = CoreContext.UserManager.GetUsers(Guid.Parse(userId));
                if (userInfo.ID != Constants.LostUser.ID)
                {
                    // sendMailsCount
                    _signalrServiceClient.SendUnreadUser(tenant, userId, count);
                }
            }
            catch (Exception e)
            {
                log.ErrorFormat("Unknown Error. {0}, {1}", e.ToString(),
                                e.InnerException != null ? e.InnerException.Message : string.Empty);
            }
        }
Esempio n. 4
0
        private void ProcessQueue()
        {
            while (!_workerTerminateSignal)
            {
                if (!HasQueuedMailbox)
                {
                    _log.Debug("No items, waiting.");
                    _waitHandle.WaitOne();
                    _log.Debug("Waking up...");
                }

                var mailbox = NextQueuedMailBox;
                if (mailbox == null)
                {
                    continue;
                }

                try
                {
                    _log.Debug("signalrServiceClient.SendUnreadUser(UserId = {0} TenantId = {1})", mailbox.UserId,
                               mailbox.TenantId);

                    _signalrServiceClient.SendUnreadUser(mailbox.TenantId, mailbox.UserId);
                }
                catch (Exception ex)
                {
                    _log.Error("signalrServiceClient.SendUnreadUser(UserId = {0} TenantId = {1}) Exception: {2}", mailbox.UserId,
                               mailbox.TenantId, ex.ToString());
                }

                _waitHandle.Reset();
            }
        }
        private void NotifySignalr(MailBox mailbox, ILogger log)
        {
            log.Debug("signalrServiceClient.SendUnreadUser(UserId = {0} TenantId = {1})", mailbox.UserId,
                      mailbox.TenantId);

            lock (Locker)
            {
                _signalrServiceClient.SendUnreadUser(mailbox.TenantId, mailbox.UserId);
            }
        }