/// <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); } }
//public virtual ResponseMessageType MsgType //{ // get { return ResponseMessageType.Text; } //} /// <summary> /// 获取响应类型实例,并初始化 /// <para>如果是直接调用,建议使用CreateFromRequestMessage<T>(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); }
/// <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)); }
/// <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); } }
/// <summary> /// ResponseMessageBase.CreateFromRequestMessage<T>(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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }