Files
juipnet/Infrastructure/WxApi/Notice/MessageFactory.cs

96 lines
3.4 KiB
C#
Raw Normal View History

2020-12-28 14:55:48 +08:00
using Hncore.Infrastructure.Common;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace Hncore.Wx.Open
{
/// <summary>
/// RequestMessage工厂
/// </summary>
public static class MessageFactory
{
public static IServiceCollection Service { get; set; }
/// <summary>
/// 获取XDocument转换后的IRequestMessageBase实例。
/// 如果MsgType不存在抛出UnknownRequestMsgTypeException异常
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取XDocument转换后的IRequestMessageBase实例。
/// 如果MsgType不存在抛出UnknownRequestMsgTypeException异常
/// </summary>
/// <returns></returns>
public static IMessageBase GetRequestEntity(string xml)
{
return GetRequestEntity(XDocument.Parse(xml));
}
/// <summary>
/// 获取XDocument转换后的IRequestMessageBase实例。
/// 如果MsgType不存在抛出UnknownRequestMsgTypeException异常
/// </summary>
/// <param name="stream">如Request.InputStream</param>
/// <returns></returns>
public static IMessageBase GetRequestEntity(Stream stream)
{
using (XmlReader xr = XmlReader.Create(stream))
{
var doc = XDocument.Load(xr);
return GetRequestEntity(doc);
}
}
}
}