예제 #1
0
        /// <summary>
        /// 轮询推送消息
        /// </summary>
        /// <param name="processId"></param>
        /// <param name="ret"></param>
        /// <returns></returns>
        public ErrCode SendMsg(long processId, out string ret)
        {
            ret = "";
            int rows = _pushSendProcessService.UpdateProcessUseStatusByIdAsync(processId, DateTimeHelper.GetNow().AddMinutes(2)).Result;

            if (rows == 0)
            {
                ret = "已被其他机器处理";
                return(ErrCode.PermissionDenied);
            }

            PushSendProcessDomainModel pushSendProcessDomainModel = _pushSendProcessService.GetProcessByIdAsync(processId).Result;
            SendProcessDto             process = _mapper.Map <SendProcessDto>(pushSendProcessDomainModel);
            var classify = ClassifyProcess(process);

            try {
                bool flag = false;
                switch (classify)
                {
                case 1:
                    flag = _timeOutHandler.Handle(process, out ret);
                    break;

                case 2:
                    flag = _retryTimesOverHandler.Handle(process, out ret);
                    break;

                case 3:
                    flag = _sendHandler.Handle(process, out ret);
                    break;

                default:
                    ret = "该分类处理没有实现";
                    break;
                }
                if (!flag)
                {
                    return(ErrCode.Failure);
                }
            }
            catch (Exception ex)
            {
                //LogHelper.Error.Write("SendProcess", ex);
                ret = ex.StackTrace + "\r\n" + ex.Message;
                return(ErrCode.Failure);
            }

            return(ErrCode.Sucess);
        }