private void _DoNotify(ref Dictionary <long, MessageStoreResult> messages, NotifyMessageRequest request, Push.Data.IDBMessage senderMessage) { if (request.IsNotNotify) { return; } if (messages != null && messages.Count > 0) { var insterMessage = messages.Where(m => m.Value.IsInsert).ToDictionary(m => m.Key, m => m.Value); if (insterMessage.Count > 0) { var sessionId = senderMessage.sessionId; if ((!insterMessage.ContainsKey(request.Sender)) && request.MessageType == MessageType.Message) { insterMessage.Add(request.Sender, insterMessage.First().Value); } var uids = insterMessage.Keys.Distinct().ToArray(); var nicks = new Dictionary <long, UserName>(); if (request.Sender == 0) { nicks = insterMessage.Keys.ToDictionary(k => k, k => new UserName(String.Empty, NameKind.Name)); } else if (request.SessionType != ActionType.ADMIN_MESSAGE.Action) { var nameProvider = _UserNameProviderFactory.CreateProvider(request.Sender); uids = nameProvider.GetNotifyUsers(uids, request.SessionId, request.SessionType); nicks = nameProvider.NickForUsers(uids); if (request.SessionType == ActionType.SINGLE_MESSAGE.Action) { sessionId = request.Sender; } } else { nicks = insterMessage.Keys.ToDictionary(k => k, k => new UserName("足聊小蜜", NameKind.Name)); } //处理阿里云推送 var senderNames = nicks.GroupBy(n => n.Value.Name).Select(ns => new { nick = ns.Key, receivers = ns.Select(n => n.Key) }).ToDictionary(n => n.nick, n => n.receivers); var unNicks = uids.Except(nicks.Keys.Distinct()).ToArray(); if (unNicks.Length > 0) { if (senderNames.ContainsKey(String.Empty)) { senderNames[String.Empty] = senderNames[String.Empty].Concat(unNicks); } else { senderNames.Add(String.Empty, unNicks); } } foreach (var name in senderNames) { var receivers = name.Value.ToArray(); var msg = new Tgnet.FootChat.Push.MessageModel(name.Key, senderMessage); msg.SessionId = sessionId; Push(request, msg, receivers, true); } } } }
public Dictionary <long, Push.Data.IDBMessage> Notify(NotifyMessageRequest request, out Push.Data.IDBMessage senderMessage) { ExceptionHelper.ThrowIfNull(request, "request"); var messages = SaveMessage(request, out senderMessage); _DoNotify(ref messages, request, senderMessage); return(messages.ToDictionary(r => r.Key, r => r.Value.Message)); }