Esempio n. 1
0
        /// <summary>
        /// 获取消息的处理方法
        /// </summary>
        /// <param name="messageType"></param>
        /// <returns></returns>
        public AsyncMessageHandleMethod GetHandle(int messageType)
        {
            AsyncMessageHandleMethod handle = null;

            this.map.TryGetValue(messageType, out handle);
            return(handle);
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="define"></param>
        private void Register(AssemblyClassMethodAndAttribute define)
        {
            var attribute = define.Attribute as RegisterAsyncMessageHandleAttribute;
            var type      = attribute.MessageType;

            if (attribute.MessageContentType == null)
            {
                attribute.MessageContentType = define.Method.GetParameters()[0].ParameterType;
            }
            map[type] = new AsyncMessageHandleMethod(define);
        }
Esempio n. 3
0
        /// <summary>
        /// 处理消息
        /// </summary>
        /// <param name="loopCount"></param>
        /// <returns></returns>
        public void Handle(int loopCount = 0)
        {
            if (loopCount == 0)
            {
                Setup((Assembly)null);
            }
            List <AbstractAsyncMessage> messageList = null;

            using (var context = new TDbContext())
            {
                messageList = context.Database.SqlQuery <AbstractAsyncMessage>(this.querySql).ToList();
                var asyncMessageHandleDefineList = context.Database.SqlQuery <AbstractAsyncMessageHandleDefine>(queryMessageHandleDefineSql).ToList();
                Setup(asyncMessageHandleDefineList);
            };
            this.handleLog?.Invoke(string.Format("第{0}处理异步消息处理,查询到待处理消息:{1}", loopCount, messageList.Count));
            foreach (var message in messageList)
            {
                try
                {
                    AsyncMessageHandleMethod handle = GetHandle(message.MessageType);
                    if (handle == null)
                    {
                        this.errorLog?.Invoke(string.Format("未定义 {0} 类型消息处理的函数", message.MessageType.ToString()));
                        continue;
                    }
                    if (handle.Handle(message))
                    {
                        this.handleLog?.Invoke(string.Format("已经处理消息:{0}-{1}", message.Id, message.MessageContent));
                        DeleteAsyncMessage(message); //删除某一个异步消息
                    }
                    else
                    {
                        IncrementAsyncMessageHandleTimes(message);
                    }
                }
                catch (Exception e)
                {
                    this.errorLog?.Invoke(string.Format("{0}\n{1}\n{2}", e.Message, e.StackTrace, message));
                    IncrementAsyncMessageHandleTimes(message);
                }
            }
        }