예제 #1
0
        /// <summary>
        /// 将消息推送给推送平台
        /// </summary>
        /// <param name="list"></param>
        /// <param name="channel"></param>
        /// <param name="requestTime"></param>
        /// <returns></returns>
        public SenderRet SendPushMsgListToProvider(List <SendProcessDto> processList, SystemTypeEnum systemType, ChannelDto channelDto, out int requestTime)
        {
            string    retMsg    = string.Empty;
            SenderRet senderRet = new SenderRet {
                IsSuccess = true
            };

            requestTime = 0;
            if (processList == null || processList.Count == 0)
            {
                senderRet.IsSuccess = false;
                senderRet.Msg       = "SendProcessDtoList为空";
                return(senderRet);
            }
            int           appId = processList.First().AppId;
            AppChannelDto appChannelDto;

            if (!_channelLogic.CheckAppChannel(appId, (int)systemType, channelDto.Id, out appChannelDto, out retMsg))
            {
                senderRet.IsSuccess = false;
                senderRet.Msg       = retMsg;
                return(senderRet);
            }
            //推送第三方平台  友盟只能单推,小米可以批量推,个推也能批量推送
            ISender sender = PushSenderManager.GetSender(channelDto.Id);

            if (sender == null)
            {
                senderRet.IsSuccess = false;
                senderRet.Msg       = string.Format("ChannelId:{0},推送信息供应商不存在", channelDto.Id);
                return(senderRet);
            }
            PushChannelModel pushChannelModel = new PushChannelModel
            {
                ChannelName    = channelDto.ChannelName,
                Url            = channelDto.MultiUrl,
                AppKey         = appChannelDto.AppKey,
                AppSecret      = appChannelDto.AppSecret,
                ProductionMode = Convert.ToBoolean(_configLogic.GetConfigValue(ConfigKey.ProductionMode)),
                SystemType     = systemType,
                PushNum        = channelDto.PushNum ?? 50,
                TimeOut        = channelDto.PushTimeOut
            };
            List <PushMsgModel> pushMsgModelList = processList.Select(e =>
            {
                return(new PushMsgModel
                {
                    Id = e.Id,
                    Ticker = e.Title,
                    Title = e.Title,
                    Msg = e.Msg,
                    AttachInfo = e.AttachInfo,
                    DeviceToken = e.DeviceToken,
                    SystemType = systemType
                });
            }).ToList();
            var       isRealPushMsg = _configLogic.GetConfigValue(ConfigKey.IsRealPushMsg);
            Stopwatch sw            = new Stopwatch();

            sw.Start();
            if (isRealPushMsg != null && Convert.ToBoolean(isRealPushMsg))
            {
                senderRet = sender.SendList(pushChannelModel, pushMsgModelList);
            }
            else
            {
                Thread.Sleep(2000);
                senderRet = new SenderRet {
                    IsSuccess = true, Sign = Guid.NewGuid().ToString()
                };
            }
            sw.Stop();
            requestTime = (int)sw.ElapsedMilliseconds;
            return(senderRet);
        }