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; } }
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); } }
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); } }
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); } }