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);
}
}
}
}