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