Exemplo n.º 1
0
 public IObservable <ITransition> Start() =>
 getOldestUnsynced()
 .SingleAsync()
 .Select(entity =>
         entity != null
                 ? (ITransition)PushEntity.Transition(CopyFrom(entity))
                 : NothingToPush.Transition());
Exemplo n.º 2
0
        public override Task <SendMessageReply> SendMessage(SendMessageRequest request, ServerCallContext context)
        {
            SendMessageReply reply = new SendMessageReply();
            var reslute            = SavePushMessage(request, request.MessageList.ToArray());

            try
            {
                string IOS     = Template.GetActionString(request.Category, GetObject(request.ActionList.ToList()), "IOS");
                string Android = Template.GetActionString(request.Category, GetObject(request.ActionList.ToList()), "Android");
                string type    = Template.GetTemplateType(request.Category);
                if (Template.IsSendPush)
                {
                    //推送实体
                    PushEntity entity = new PushEntity()
                    {
                        Title          = Template.GetPushMessage(request.Category),
                        Alert          = Template.GetTemplateString(request.Category, request.MessageList.ToArray()),
                        Badge          = 1,
                        ByAlias        = request.ToUser.ToString(),
                        ByRegistration = null,
                        Android        = Android,
                        IOS            = IOS,
                    };
                    JPushMessage push = new JPushMessage();
                    push.PushMessage(entity);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
                reply.Flag = false;
            }
            reply.Flag = true;
            return(Task.FromResult(reply));
        }
Exemplo n.º 3
0
        public bool PushMQ <T>(T Entity, MQEnum MQType = MQEnum.Push) where T : class, new()
        {
            //推送模式
            //推送模式下需指定管道名称和路由键值名称
            //消息只会被发送到指定的队列中去
            //订阅模式
            //订阅模式下只需指定管道名称
            //消息会被发送到该管道下的所有队列中
            //主题路由模式
            //路由模式下需指定管道名称和路由值
            //消息会被发送到该管道下,和路由值匹配的队列中去
            PushEntity <T> entity = new PushEntity <T>();

            entity.BodyData = Entity;
            entity.SendType = MQType;
            if (MQType == MQEnum.Push)
            {
                entity.ExchangeName = "Message.Direct";
                entity.RouteName    = "RouteKey";
            }
            else if (MQType == MQEnum.Sub)
            {
                entity.ExchangeName = "Message.Fanout";
            }
            else
            {
                entity.ExchangeName = "Message.Topic";
                entity.RouteName    = "RouteKey";
            }
            return(MQFactory.SendMQ(entity));
        }
Exemplo n.º 4
0
        public async Task <bool> PushMQAsync <T>(T Entity, MQEnum MQType = MQEnum.Push) where T : class, new()
        {
            //推送模式
            //推送模式下需指定管道名称和路由键值名称
            //消息只会被发送到指定的队列中去
            //订阅模式
            //订阅模式下只需指定管道名称
            //消息会被发送到该管道下的所有队列中
            //主题路由模式
            //路由模式下需指定管道名称和路由值
            //消息会被发送到该管道下,和路由值匹配的队列中去
            PushEntity <T> entity = new PushEntity <T>();

            entity.BodyData = Entity;
            entity.SendType = MQType;
            if (MQType == MQEnum.Push)
            {
                entity.ExchangeName = "Message.Direct";
                entity.RouteName    = "RouteKey";
            }
            else if (MQType == MQEnum.Sub)
            {
                entity.ExchangeName = "Message.Fanout";
            }
            else
            {
                entity.ExchangeName = "Message.Topic";
                entity.RouteName    = "RouteKey";
            }
            return(await MQFactory.SendMQAsync(entity).ContinueWith(t => { return t.IsCompleted ? true : false; }));
        }
Exemplo n.º 5
0
    public void Init()
    {
        advEntity             = new AdvEntity();
        catsPurse             = new CatsPurse();
        gamesRecords          = new GamesRecords();
        buster_entity         = new BusterEntity();
        push_entity           = new PushEntity();
        cat_rang              = new CatRang();
        minigames_screen_data = new MinigamesScreenData();
        world_state_data      = new WorldStateDataStorage();

        other_storage = new Dictionary <string, object>();
        tasks_storage = new StorableData <Dictionary <string, object> >("tasks_storage_help");
        chapter_data  = new ChapterData();

        if (!tasks_storage.content.ContainsKey("all_done"))
        {
            tasks_storage.content["all_done"] = false;
            tasks_storage.Store();
        }

        Analytics.CustomEvent("catsPurse", new Dictionary <string, object>
        {
            { "coins", catsPurse.Coins },
        });

        Analytics.CustomEvent("gamesRecords", new Dictionary <string, object>
        {
            { "taptap_best_value", gamesRecords.Record(GameName.taptap.ToString()).best_value },
            { "zigzag_best_value", gamesRecords.Record(GameName.zigzag.ToString()).best_value },
        });
    }
Exemplo n.º 6
0
 public IObservable <ITransition> Start() =>
 dataSource
 .Get()
 .Where(entity => entity.SyncStatus == SyncStatus.SyncNeeded)
 .SingleOrDefaultAsync()
 .Select(entity =>
         entity != null
                 ? (ITransition)PushEntity.Transition(entity)
                 : NothingToPush.Transition());
Exemplo n.º 7
0
        private void HttpRequestCompleted(object target, DataResponseEventArgs e)
        {
            PushEntity     entity     = e.PushEntity;
            HttpStatusCode statusCode = e.HttpStatusCode;
            string         data       = e.RecievedData; //Success,Failed,Pushing,Abort

            if (e.Exception == null)
            {
                Process.Info(entity.PushId, "消息推送记录", "HttpRequestCompleted", entity.PushId, string.Format("异步请求完成,返回结果:【{0}】", data), "");
                if (statusCode == HttpStatusCode.OK && entity.Callback != null)
                {
                    PushMessageResult result = new PushMessageResult();
                    result.ReferObject = entity.ReferObject;
                    result.PushId      = entity.PushId;
                    switch (data)
                    {
                    case "Success":
                        result.PushStatus = PushResultEnum.Success;
                        break;

                    case "Failed":
                        result.PushStatus = PushResultEnum.Failed;
                        break;

                    case "Pushing":
                        result.PushStatus = PushResultEnum.Pushing;
                        break;

                    case "Abort":
                        result.PushStatus = PushResultEnum.Abort;
                        break;

                    default:
                        Process.Warning(entity.PushId, "消息推送记录", "HttpRequestCompleted", entity.PushId, string.Format("此消息返回异常结果:{0}", data), "返回异常结果");
                        result.PushStatus = PushResultEnum.Abort;
                        break;
                    }

                    result.ErrMsg = data;
                    entity.Callback(result);
                }
            }
            else
            {
                Process.Error(entity.PushId, "消息推送记录", "HttpRequestCompleted", entity.PushId, string.Format("异步请求完成,返回结果:【{0}】,异常:{1}", data, e.Exception.GetString()), "");
                PushMessageResult result = new PushMessageResult();
                result.ReferObject = entity.ReferObject;
                result.PushId      = entity.PushId;
                result.PushStatus  = PushResultEnum.Failed;
                Callback(result);
            }
        }
Exemplo n.º 8
0
        public void Send(PushMessage message, Action <object> callback)
        {
            string cacheKey = string.Format(CacheKeys.SendToMessageHandler_Arg2, message.PushId, message.PushCount);

            if (!IsSending(message))
            {
                NotifyInterfaceSettingModel settingMod = _pushSettingBus.Get(message.SettingId);
                if (settingMod != null && settingMod.Status == 2)
                {
                    PushEntity entity = new PushEntity();
                    entity.TimeOut     = SendServiceSetting.SendToClientTimeout;
                    entity.PushId      = message.PushId;
                    entity.Url         = settingMod.Address;
                    entity.Data        = message.PushData;
                    entity.Callback    = callback;
                    entity.ReferObject = message;
                    entity.Encode      = Encoding.GetEncoding(settingMod.Encoding);

                    HttpAsyncHelper httpHelper = new HttpAsyncHelper(entity);
                    MethodType      methodType = (MethodType)Enum.Parse(typeof(MethodType), settingMod.Method);
                    httpHelper.OnRequestDataComplected += HttpRequestCompleted;
                    try
                    {
                        httpHelper.Request(methodType);
                        MetricsKeys.SenderService_Send.MeterMark("Success");
                        Process.Debug(message.PushId, "消息推送记录", "Send", message.PushId, string.Format("消息推送中,key【{0}】,地址:{1}", cacheKey, settingMod.Address), "");
                    }
                    catch (Exception ex)
                    {
                        MetricsKeys.SenderService_Send.MeterMark("Error");
                        PushMessageResult result = new PushMessageResult();
                        result.PushId     = message.PushId;
                        result.PushStatus = PushResultEnum.Failed;
                        Callback(result);
                        Process.Error(message.PushId, "消息推送记录", "Send", message.PushId, string.Format("消息推送中,key【{0}】,异常:{1}", cacheKey, ex.GetString()), "");
                    }
                }
                else
                {
                    PushMessageResult result = new PushMessageResult();
                    result.ReferObject = message;
                    result.PushId      = message.PushId;
                    result.PushStatus  = PushResultEnum.Abort;
                    result.ErrMsg      = "配置被删除";
                    Callback(result);
                }
            }
            else
            {
                Process.Debug(message.PushId, "消息推送记录", "Send", message.PushId, string.Format("缓存已存在,key【{0}】", cacheKey), "");
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 插入推送明细表
        /// </summary>
        /// <param name="db"></param>
        /// <param name="entity"></param>
        /// <param name="batchID"></param>
        /// <param name="activityID"></param>
        /// <returns></returns>
        public static bool InsertPushMessageDetail(string connectionString, PushEntity entity, string activityID)
        {
            string sql = @"INSERT INTO `dotnet_operation`.`op_info_push_detail` (`uid`, `activity_id`, `user_id`, `mobile`, `open_id`, `mail`, `push_content`, `push_type`) 
VALUES (UUID(), @activity_id, @user_id, @mobile, @open_id, @mail, @push_content, @push_type)";

            return(MySQLHelper.ExecuteNonQuery(connectionString, sql, new[]
            {
                new MySqlParameter("@activity_id", activityID),
                new MySqlParameter("@user_id", entity.UserID),
                new MySqlParameter("@mobile", entity.Mobile),
                new MySqlParameter("@open_id", entity.OpenID),
                new MySqlParameter("@mail", entity.Email),
                new MySqlParameter("@push_content", entity.SendContent),
                new MySqlParameter("@push_type", entity.SendType.ToString())
            }) > 0);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 发送消息队列--with monitor
        /// </summary>
        /// <param name="connectionString"></param>
        /// <param name="queueId"></param>
        /// <param name="messageTypeCode"></param>
        /// <param name="title"></param>
        /// <param name="messageBatch"></param>
        /// <param name="sender"></param>
        /// <param name="senderId"></param>
        /// <param name="channel"></param>
        /// <param name="receiver"></param>
        /// <param name="content"></param>
        /// <param name="attachments"></param>
        /// <param name="remark"></param>
        /// <param name="status"></param>
        /// <param name="tryTimes"></param>
        /// <param name="monitor_batch"></param>
        /// <param name="userId"></param>
        /// <param name="wayInfo"></param>
        /// <returns></returns>
        private static bool SendMessageQueue(string connectionString, string queueId, string messageTypeCode, string title,
                                             string messageBatch, string sender, string senderId, string channel, string receiver, string content,
                                             string attachments, string remark, int status, int tryTimes, string monitor_batch, string userId, string wayInfo, string businessType)
        {
            //微信被封后封闭入口,梳理好后再开放
            //if (channel == "4") return false;
            int successful_count            = 0;
            var dicReceiver                 = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, dynamic> >(receiver.Trim('[').Trim(']'));
            Dictionary <string, string> dic = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, string> >(Convert.ToString(dicReceiver["addrMap"]));
            string contact = dic.Values.First();

            if (channel == "4")//微信
            {
                if (IsExistsWechatBlackList(connectionString, contact) || IsBizPushBlack(connectionString, userId))
                {
                    return(false);
                }
            }
            else if (channel == "2")//email
            {
                if (IsExistsMailBlackList(connectionString, contact))
                {
                    return(false);
                }
            }
            else if (channel == "7")//sms
            {
                if (IsExistsSMSBlackList(connectionString, contact) || IsBizPushBlack(connectionString, userId, 2))
                {
                    return(false);
                }
            }
            else
            {
            }
            string saveSQL     = @"INSERT INTO b2b_support.`bizp_message_queue`(
	                            `queue_id`,
	                            `message_type_code`,
	                            `title`,
	                            `message_batch`,
	                            `sender`,`sender_id`,`channel`,
	                            `receiver`,
	                            `content`,
	                            `attachments`,
	                            `remark`,
	                            `status`,
	                            `try_times`
                            )
                            VALUES(@queueId,@messageTypeCode,@title,@messageBatch,@sender,@senderId,@channel,@receiver,@content,@attachments,@remark,@status,@tryTimes)";
            var    saveParames = new[]
            {
                new MySqlParameter("@queueId", queueId),
                new MySqlParameter("@messageTypeCode", messageTypeCode),
                new MySqlParameter("@title", title),
                new MySqlParameter("@messageBatch", messageBatch),
                new MySqlParameter("@sender", sender),
                new MySqlParameter("@senderId", senderId),
                new MySqlParameter("@channel", channel),
                new MySqlParameter("@receiver", receiver),
                new MySqlParameter("@content", content),
                new MySqlParameter("@attachments", attachments),
                new MySqlParameter("@remark", remark),
                new MySqlParameter("@status", Convert.ToString(status)),
                new MySqlParameter("@tryTimes", Convert.ToString(tryTimes))
            };
            bool result = MySQLHelper.ExecuteNonQuery(connectionString, saveSQL, saveParames) > 0;

            #region 插入监控表
            DataTable dt          = BatchNoIsExisted(connectionString, monitor_batch);
            bool      isSameBatch = dt.Rows.Count > 0;
            string    activityID;
            //同批次activityID使用原来的
            if (isSameBatch)
            {
                activityID = dt.Rows[0]["uid"].ToString();
            }
            else
            {
                activityID = Guid.NewGuid().ToString();
            }

            PushEntity entity = new PushEntity
            {
                UserID            = userId,
                Mobile            = channel == "7"?wayInfo:null,
                OpenID            = channel == "4"?wayInfo:null,
                Email             = channel == "2"?wayInfo:null,
                SendContent       = content,
                Send_Control_Type = channel == "7"? SendType.SmsQueue.ToString():channel == "4"?SendType.WxQueue.ToString():channel == "2"?SendType.EmailQueue.ToString():string.Empty
            };

            bool s2 = InsertPushMessageDetail(connectionString, entity, activityID);

            if (result && s2)
            {
                successful_count++;
            }

            #endregion

            //批次号更新逻辑:存在更新成功次数,不存在插入
            if (!isSameBatch)
            {
                InsertPushMessageActivity(connectionString, activityID, entity.UserID, businessType, monitor_batch, successful_count, remark);
            }
            else
            {
                UpdatePushMessageActivity(connectionString, monitor_batch, successful_count);
            }

            return(result);
        }