예제 #1
0
        /// <summary>
        /// Create a notification
        /// </summary>
        /// <param name="osType"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static INotificationService Make(int osType, params string[] args)
        {
            OsType os = (OsType)osType;
            INotificationService service;

            switch (os)
            {
            case OsType.Ios:
                if (args.Length < 2)
                {
                    return(null);
                }
                service = new IOSNotificationService(args[0], args[1]);
                break;

            case OsType.Android:
                if (args.Length < 4)
                {
                    return(null);
                }
                service = new AndroidNotificationService(args[2], args[3]);
                break;

            default:
                service = null;
                break;
            }
            return(service);
        }
예제 #2
0
        public PushResponse Process(PushRequest pRequest)
        {
            PushResponse response = new PushResponse();

            response.ResultCode = 0;
            try
            {
                MessageChannelDAO channelDao = new MessageChannelDAO(new BasicUserInfo());
                MessageDAO        dao        = new MessageDAO(new BasicUserInfo());
                var entity = channelDao.GetByID(pRequest.ChannelID);
                if (entity == null)
                {
                    throw new Exception(string.Format("未找到相应的ChannelID为:{0}的Channel信息", pRequest.ChannelID));
                }
                MessageEntity mEntity = new MessageEntity();
                mEntity.MessageID = Guid.NewGuid();
                mEntity.ClientID  = pRequest.ClientID;
                mEntity.ChannelID = pRequest.ChannelID;
                mEntity.AppCode   = pRequest.AppCode;
                mEntity.UserID    = pRequest.UserID;
                var notification = pRequest.Request.DeserializeJSONTo <JdSoft.Apple.Apns.Notifications.Notification>();
                mEntity.MessageParameters = pRequest.GetJson();
                switch (pRequest.Type)
                {
                case 1:    //直接发送
                    var IOSChannel = entity.GetIOSChannel();
                    var result     = IOSNotificationService.CreateInstance(IOSChannel.SandBox ?? true, IOSChannel.P12, IOSChannel.P12PWD).SendNotification(notification);
                    if (result)
                    {
                        mEntity.SendCount = 1;
                        mEntity.Status    = 2;
                        dao.Create(mEntity);
                        Loggers.Debug(new DebugLogInfo()
                        {
                            Message = "【发送到推送服务器成功】:" + mEntity.MessageParameters
                        });
                    }
                    else
                    {
                        mEntity.Status      = 1;
                        mEntity.SendCount   = 1;
                        mEntity.FaultReason = "发送到推送服务器失败";
                        dao.Create(mEntity);
                        Loggers.Debug(new DebugLogInfo()
                        {
                            Message = "【发送到推送服务器失败】:" + mEntity.MessageParameters
                        });
                        throw new Exception("【发送到推送服务器失败】");
                    }
                    break;

                case 2:    //存放到数据库
                    mEntity.SendCount = 0;
                    mEntity.Status    = 0;
                    dao.Create(mEntity);
                    Loggers.Debug(new DebugLogInfo()
                    {
                        Message = "【保存数据库成功】:" + mEntity.MessageParameters
                    });
                    break;

                default:
                    throw new Exception("未定义的请求类型:" + pRequest.Type);
                }
            }
            catch (Exception ex)
            {
                response.ResultCode = 100;
                response.Message    = ex.Message;
                Loggers.Exception(new ExceptionLogInfo(ex));
            }
            return(response);
        }
예제 #3
0
        void bw_DoWork1(object sender, DoWorkEventArgs e)
        {
            while (true)
            {
                try
                {
                    MessageDAO        dao        = new MessageDAO(new BasicUserInfo());
                    MessageChannelDAO channelDao = new MessageChannelDAO(new BasicUserInfo());
                    var entitys = dao.GetValidMessage();
                    foreach (var item in entitys)
                    {
                        try
                        {
                            var entity = channelDao.GetByID(item.ChannelID);
                            if (entity == null)
                            {
                                throw new Exception(string.Format("未找到相应的ChannelID为:{0}的Channel信息", item.ChannelID));
                            }
                            switch (entity.MobilePlatform)
                            {
                            case 1:
                                var request       = item.GetRequest();
                                var baiduResponse = BaiduCloudPush.PushMessage(entity.GetBaiDuChannel(), request);
                                if (baiduResponse.IsSuccess)
                                {
                                    item.SendCount = (item.SendCount ?? 0) + 1;
                                    item.Status    = 2;
                                    Loggers.Debug(new DebugLogInfo()
                                    {
                                        Message = "【发送成功】:" + item.MessageContent
                                    });
                                }
                                else
                                {
                                    item.SendCount   = (item.SendCount ?? 0) + 1;
                                    item.Status      = 1;
                                    item.FaultReason = baiduResponse.ErrorMessage;
                                    Loggers.Debug(new DebugLogInfo()
                                    {
                                        Message = "【发送失败】:" + item.MessageContent
                                    });
                                }
                                break;

                            case 2:
                                var IOSChannel   = entity.GetIOSChannel();
                                var notification = item.GetIOSNotification();
                                var IOSResponse  = IOSNotificationService.CreateInstance(IOSChannel.SandBox ?? true, IOSChannel.P12, IOSChannel.P12PWD).SendNotification(notification);
                                if (IOSResponse)
                                {
                                    item.SendCount = (item.SendCount ?? 0) + 1;
                                    item.Status    = 2;
                                    Loggers.Debug(new DebugLogInfo()
                                    {
                                        Message = "【发送到推送服务器成功】:" + item.MessageContent
                                    });
                                }
                                else
                                {
                                    item.SendCount   = (item.SendCount ?? 0) + 1;
                                    item.Status      = 1;
                                    item.FaultReason = "发送到推送服务器失败";
                                    Loggers.Debug(new DebugLogInfo()
                                    {
                                        Message = "【发送到推送服务器成功】:" + item.MessageContent
                                    });
                                }
                                break;

                            default:
                                throw new Exception("错误的平台类型");
                            }


                            dao.Update(item);
                        }
                        catch (Exception ee)
                        {
                            item.SendCount   = (item.SendCount ?? 0) + 1;
                            item.FaultReason = ee.Message;
                            item.Status      = 1;
                            dao.Update(item);
                            Loggers.Exception(new ExceptionLogInfo(ee));
                            throw ee;
                        }
                    }
                    Thread.Sleep(TimeSpan.FromSeconds(Interval));
                }
                catch (Exception ex)
                {
                    Loggers.Exception(new ExceptionLogInfo(ex));
                }
            }
        }