using Hncore.Infrastructure.Common; using Microsoft.Extensions.DependencyInjection; using System; using System.IO; using System.Xml; using System.Xml.Linq; namespace Hncore.Wx.Open { /// /// RequestMessage工厂 /// public static class MessageFactory { public static IServiceCollection Service { get; set; } /// /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// /// public static IMessageBase GetRequestEntity(XDocument doc) { IMessageBase requestMessage = null; RequestInfoType infoType; try { infoType = InfoTypeHelper.GetRequestInfoType(doc); switch (infoType) { case RequestInfoType.component_verify_ticket: requestMessage = new MessageComponentVerifyTicket(doc); break; case RequestInfoType.unauthorized: requestMessage = new MessageUnauthorized(doc); break; case RequestInfoType.authorized: requestMessage = new MessageAuthorized(doc); break; case RequestInfoType.updateauthorized: requestMessage = new MessageUpdateAuthorized(doc); break; case RequestInfoType.notify_third_fasteregister: requestMessage = new MessageThirdFasteRegister(doc); break; case RequestInfoType.event_subscribe_qrscene: requestMessage = new MessageEventSubscribeQrscene(doc); break; case RequestInfoType.event_SCAN: requestMessage = new MessageEventScan(doc); break; case RequestInfoType.event_subscribe: requestMessage = new MessageEventSubscribe(doc); break; default: return new MessageDefault(); } } catch (Exception ex) { LogHelper.Error("MessageFactory 解析失败", ex.Message); } return requestMessage; } /// /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// /// public static IMessageBase GetRequestEntity(string xml) { return GetRequestEntity(XDocument.Parse(xml)); } /// /// 获取XDocument转换后的IRequestMessageBase实例。 /// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常 /// /// 如Request.InputStream /// public static IMessageBase GetRequestEntity(Stream stream) { using (XmlReader xr = XmlReader.Create(stream)) { var doc = XDocument.Load(xr); return GetRequestEntity(doc); } } } }