예제 #1
0
        /// <summary>
        /// 从返回结果XML转换成IResponseMessageBase实体类
        /// </summary>
        /// <param name="xml">返回给服务器的Response Xml</param>
        /// <param name="enlighten"></param>
        /// <returns></returns>
        public static IResponseMessageBase CreateFromResponseXml(string xml, MessageEntityEnlightener enlighten)
        {
            try
            {
                if (string.IsNullOrEmpty(xml))
                {
                    return(null);
                }

                var doc = XDocument.Parse(xml);
                IResponseMessageBase responseMessage = null;
                var msgType = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), doc.Root.Element("MsgType").Value, true);
                switch (msgType)
                {
                case ResponseMsgType.Text:
                    responseMessage = enlighten.NewResponseMessageText();    // new ResponseMessageText();
                    break;

                case ResponseMsgType.News:
                    responseMessage = enlighten.NewResponseMessageNews();    // new ResponseMessageNews();
                    break;

                case ResponseMsgType.Music:
                    responseMessage = enlighten.NewResponseMessageMusic();    // new ResponseMessageMusic();
                    break;

                case ResponseMsgType.Image:
                    responseMessage = enlighten.NewResponseMessageImage();    // new ResponseMessageImage();
                    break;

                case ResponseMsgType.Voice:
                    responseMessage = enlighten.NewResponseMessageVoice();    // new ResponseMessageVoice();
                    break;

                case ResponseMsgType.Video:
                    responseMessage = enlighten.NewResponseMessageVideo();    // new ResponseMessageVideo();
                    break;

                case ResponseMsgType.Transfer_Customer_Service:
                    responseMessage = enlighten.NewResponseMessageTransfer_Customer_Service();    // new ResponseMessageTransfer_Customer_Service();
                    break;
                }

                (responseMessage as ResponseMessageBase).FillEntityWithXml(doc);//如果不是ResponseMessageBase会抛出异常
                return(responseMessage);
            }
            catch (Exception ex)
            {
                throw new MessageHandlerException("ResponseMessageBase.CreateFromResponseXml<T>过程发生异常!" + ex.Message, ex);
            }
        }
예제 #2
0
        //public virtual ResponseMessageType MsgType
        //{
        //    get { return ResponseMessageType.Text; }
        //}

        /// <summary>
        /// 获取响应类型实例,并初始化
        /// <para>如果是直接调用,建议使用CreateFromRequestMessage&lt;T&gt;(IRequestMessageBase requestMessage)取代此方法</para>
        /// </summary>
        /// <param name="requestMessage">请求</param>
        /// <param name="msgType">响应类型</param>
        /// <returns></returns>
        //[Obsolete("建议使用CreateFromRequestMessage<T>(IRequestMessageBase requestMessage)取代此方法")]
        private static IResponseMessageBase CreateFromRequestMessage(IRequestMessageBase requestMessage, ResponseMsgType msgType, MessageEntityEnlightener enlighten)
        {
            IResponseMessageBase responseMessage = null;

            try
            {
                switch (msgType)
                {
                case ResponseMsgType.Text:
                    responseMessage = enlighten.NewResponseMessageText();    // new ResponseMessageText();
                    break;

                case ResponseMsgType.News:
                    responseMessage = enlighten.NewResponseMessageNews();    // new ResponseMessageNews();
                    break;

                case ResponseMsgType.Music:
                    responseMessage = enlighten.NewResponseMessageMusic();    // new ResponseMessageMusic();
                    break;

                case ResponseMsgType.Image:
                    responseMessage = enlighten.NewResponseMessageImage();    // new ResponseMessageImage();
                    break;

                case ResponseMsgType.Voice:
                    responseMessage = enlighten.NewResponseMessageVoice();    // new ResponseMessageVoice();
                    break;

                case ResponseMsgType.Video:
                    responseMessage = enlighten.NewResponseMessageVideo();    // new ResponseMessageVideo();
                    break;

                case ResponseMsgType.Transfer_Customer_Service:
                    responseMessage = enlighten.NewResponseMessageTransfer_Customer_Service();    // new ResponseMessageTransfer_Customer_Service();
                    break;

                case ResponseMsgType.NoResponse:
                    responseMessage = new ResponseMessageNoResponse();
                    break;

                default:
                    throw new UnknownRequestMsgTypeException(string.Format("ResponseMsgType没有为 {0} 提供对应处理程序。", msgType), new ArgumentOutOfRangeException());
                }
            }
            catch (Exception ex)
            {
                throw new MessageHandlerException("CreateFromRequestMessage过程发生异常", ex);
            }

            return(responseMessage);
        }
예제 #3
0
 /// <summary>
 /// ResponseMessageBase.CreateFromResponseXml(xml)的扩展方法
 /// </summary>
 /// <param name="xml">返回给服务器的Response Xml</param>
 /// <returns></returns>
 public static IResponseMessageBase CreateResponseMessage(this string xml, MessageEntityEnlightener enlighten)
 {
     return(ResponseMessageBase.CreateFromResponseXml(xml, enlighten));
 }
예제 #4
0
        /// <summary>
        /// 获取响应类型实例,并初始化
        /// </summary>
        /// <typeparam name="T">需要返回的类型</typeparam>
        /// <param name="requestMessage">请求数据</param>
        /// <param name="enlighten">MessageEntityEnlighten,当 T 为接口时必须提供</param>
        /// <returns></returns>
        public static T CreateFromRequestMessage <T>(IRequestMessageBase requestMessage, MessageEntityEnlightener enlighten = null)
            where T : IResponseMessageBase
        {
            try
            {
                T responseMessage = default(T);

                var tType = typeof(T);

                if (tType.IsInterface)
                {
                    //是接口,需要使用 Enlightener
                    if (enlighten == null)
                    {
                        throw new MessageHandlerException("MessageEntityEnlighten 不能为 null");
                    }

                    var responseName = tType.Name.Replace("IResponseMessage", "").Replace("ResponseMessage", ""); //请求名称

                    ResponseMsgType msgType = (ResponseMsgType)Enum.Parse(typeof(ResponseMsgType), responseName);

                    responseMessage = (T)CreateFromRequestMessage(requestMessage, msgType, enlighten);
                }
                else
                {
                    //非接口,直接初始化
                    //Senparc.CO2NET.Helpers.ReflectionHelper.
                    responseMessage = (T)Activator.CreateInstance(tType);
                }

                if (responseMessage != null)
                {
                    responseMessage.ToUserName   = requestMessage.FromUserName;
                    responseMessage.FromUserName = requestMessage.ToUserName;
                    responseMessage.CreateTime   = SystemTime.Now; //使用当前最新时间
                }

                return(responseMessage);
            }
            catch (Exception ex)
            {
                SenparcTrace.SendCustomLog("CreateFromRequestMessage异常调试", typeof(T).FullName);

                throw new BaseException("ResponseMessageBase.CreateFromRequestMessage<T>过程发生异常!", ex);
            }
        }
예제 #5
0
 /// <summary>
 /// ResponseMessageBase.CreateFromRequestMessage&lt;T&gt;(requestMessage)的扩展方法
 /// </summary>
 /// <typeparam name="T">需要生成的ResponseMessage类型</typeparam>
 /// <param name="enlighten">MessageEntityEnlighten</param>
 /// <param name="requestMessage">IRequestMessageBase接口下的接收信息类型</param>
 /// <returns></returns>
 public static T CreateResponseMessage <T>(this MessageEntityEnlightener enlighten, IRequestMessageBase requestMessage)
     where T : IResponseMessageBase
 {
     return(ResponseMessageBase.CreateFromRequestMessage <T>(requestMessage, enlighten));
 }
예제 #6
0
        /// <summary>
        /// 回复“成功”信息(默认为字符串success)
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="responseConfig"></param>
        /// <returns></returns>
        private IResponseMessageBase RenderResponseMessageSuccessResponse(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlightener enlighten)
        {
            var strongResponseMessage = requestMessage.CreateResponseMessage <SuccessResponseMessage>(enlighten);

            return(strongResponseMessage);
        }
예제 #7
0
        /// <summary>
        /// 返回图片类型信息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="responseConfig"></param>
        /// <returns></returns>
        private IResponseMessageBase RenderResponseMessageImage(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlightener enlighten)
        {
            var strongResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageImage>(enlighten);
            var mediaId = NeuralNodeHelper.GetImageMessageMediaId(requestMessage, responseConfig.GetMaterialContent(MaterialData));

            if (string.IsNullOrEmpty(mediaId))
            {
                var textResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageText>(enlighten);
                textResponseMessage.Content = "消息中未获取到图片信息";
                return(textResponseMessage);
            }
            else
            {
                strongResponseMessage.Image.MediaId = mediaId;
            }


            //TODO:其他情况

            return(strongResponseMessage);
        }
예제 #8
0
        /// <summary>
        /// 返回图文类型信息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="responseConfig"></param>
        /// <param name="enlighten"></param>
        /// <returns></returns>
        private IResponseMessageBase RenderResponseMessageNews(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlightener enlighten)
        {
            var articles = NeuralNodeHelper.FillNewsMessage(responseConfig.MaterialId, MaterialData);

            var strongResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageNews>(enlighten);

            if (articles != null)
            {
                strongResponseMessage.Articles = articles;
            }
            else
            {
                strongResponseMessage.Articles = new List <Article>()
                {
                    new Article()
                    {
                        Title       = "您要查找的素材不存在,或格式定义错误!",
                        Description = "您要查找的素材不存在,或格式定义错误!"
                    }
                };
            }
            return(strongResponseMessage);
        }
예제 #9
0
        /// <summary>
        /// 返回文字类型信息
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <param name="responseConfig"></param>
        /// <returns></returns>
        private IResponseMessageBase RenderResponseMessageText(IRequestMessageBase requestMessage, Response responseConfig, MessageEntityEnlightener enlighten)
        {
            var strongResponseMessage = requestMessage.CreateResponseMessage <IResponseMessageText>(enlighten);

            strongResponseMessage.Content = NeuralNodeHelper.FillTextMessage(responseConfig.GetMaterialContent(MaterialData));
            return(strongResponseMessage);
        }