public void GlobalNotify(Push.Data.IGlobalDBMessage message) { ExceptionHelper.ThrowIfNull(message, "message"); var msg = new Tgnet.FootChat.Push.MessageModel(message); _PushManager.PushJsonMessage(new PushService.PushJsonMessageRequest { Content = message.content, ContentType = message.contentType, Extensions = message.extensions, MessageId = message.messageId, Sender = message.sender, SessionId = message.sessionId, SessionType = message.sessionType, Timestamp = message.timestamp, }, new PushService.Targets { Apps = new PushService.TargetsAppKinds[] { PushService.TargetsAppKinds.Project } }, new PushService.PushSetting { ExpireTime = TimeSpan.FromDays(1), StoreOffline = true, }); }
private PushService.PushRemindRequest WrapperRemind(Tgnet.FootChat.Push.MessageModel message, bool remind) { if (!remind) { return(null); } var content = ActionType.GetActionType(message.SessionType).GetContent(message.ContentType, message.Content); var url = ActionType.GetActionType(message.SessionType).GetUrl(message.SessionType, message.SessionId.ToString(), message.SenderName); PushService.PushRemindRequest r = null; var title = String.Empty; if (!String.IsNullOrWhiteSpace(content)) { Dictionary <string, string> extensions = new Dictionary <string, string>(); extensions.Add("t", message.SessionType); extensions.Add("sid", message.SessionId.ToString()); extensions.Add("sn", message.SenderName); extensions.Add("url", url); if (message.Extensions != null && message.Extensions.Count > 0) { foreach (var e in message.Extensions) { if (!extensions.ContainsKey(e.Key) && e.Value != null) { extensions.Add(e.Key, e.Value.ToString()); } } } if (message.SessionType.Equals(ActionType.SINGLE_MESSAGE.Action)) { content = String.Format("{0}:{1}", message.SenderName, content); } else if (message.SessionType.Equals(ActionType.ADMIN_MESSAGE.Action)) { content = String.Format("足聊小蜜:{0}", content); } else { if (!String.IsNullOrWhiteSpace(message.SenderName)) { content = String.Format("{0}:{1}", message.SenderName, content); } } r = new PushService.PushRemindRequest { Title = title, Body = content, Extensions = extensions, AndroidPopupActivity = ANDROIDPOPUPACTIVITY }; } return(r); }
private void Push(NotifyMessageRequest request, Tgnet.FootChat.Push.MessageModel message, long[] receivers, bool remind) { ExceptionHelper.ThrowIfNull(message, "message"); receivers = (receivers ?? Enumerable.Empty <long>()).Where(id => id > 0).Distinct().ToArray(); var nameProvider = _UserNameProviderFactory.CreateProvider(request.Sender); var notyTypes = _UserNotifyTypeProvider.GetNotifyTypes(message.Sender, receivers, message.SessionId, message.SessionType); foreach (var t in notyTypes) { Push(request, message, t.Value, remind, t.Key); } }
/// <summary> /// 阿里云推送 /// </summary> /// <param name="request"></param> /// <param name="message"></param> /// <param name="receivers"></param> private void Push(NotifyMessageRequest request, Tgnet.FootChat.Push.MessageModel message, long[] receivers, bool remind, NotifyTypes notifyType) { ExceptionHelper.ThrowIfNull(message, "message"); receivers = (receivers ?? Enumerable.Empty <long>()).Where(id => id > 0).Distinct().ToArray(); PushService.PushSetting setting = null; if (request.MessageType != MessageType.Online) { setting = new PushService.PushSetting { ExpireTime = TimeSpan.FromDays(1), StoreOffline = true, NotifyType = (PushService.PushSettingNotifyTypes)notifyType.To <byte>(), }; } List <PushService.TargetsAppKinds> apps = new List <PushService.TargetsAppKinds>() { PushService.TargetsAppKinds.FootChatAndroid, PushService.TargetsAppKinds.FootChatiOS }; _PushManager.PushJsonMessage(new PushService.PushJsonMessageRequest { Content = message.Content, ContentType = message.ContentType, Extensions = message.Extensions, MessageId = message.MessageId, Sender = message.Sender, SenderName = message.SenderName, SessionId = message.SessionId, SessionType = message.SessionType, Timestamp = message.Timestamp, Remind = WrapperRemind(message, remind) }, new PushService.Targets { Uids = receivers, Apps = apps.ToArray(), Testing = false, }, setting); }
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); } } } }