/// <summary> /// 处理 Xml 消息 /// </summary> /// <param name="input"></param> /// <param name="head"></param> /// <returns></returns> public XmlDocument Deal(XmlDocument input, out InputHead head) { head = null; if (input == null) { return(null); } if (input.DocumentElement == null) { return(null); } if (!InitInputHead(input.DocumentElement, out head)) { return(null); } if (!ParameterSupporters.TryGetValue(head.MsgType, out ParameterSupporter parameterSupporter)) { throw new NotImplementedException(string.Format("{0} 没有实现", head.MsgType)); } var parameter = parameterSupporter.Init(input.DocumentElement); parameter.Source = input; parameter.Head = head; ReplyMessage message; if (MessageDealers.TryGetValue(parameter.DealType, out MessageDealer dealer)) { message = dealer.DealMessage(parameter); } else if (OnNoDealMessage != null) { message = OnNoDealMessage(parameter); } else if (OnNoDeal != null) { return(OnNoDeal(parameter)); } else { return(null); } if (message == null) { return(null); } return(message.CreateDocument(head.FromUserName, head.ToUserName)); }
private bool InitInputHead(XmlElement element, out InputHead head) { head = null; var msgType = element.GetText("MsgType"); var createTime = element.GetText("CreateTime"); var toUserName = element.GetText("ToUserName"); var fromUserName = element.GetText("FromUserName"); var msgId = element.GetText("MsgId"); if (msgType == null) { return(false); } if (createTime == null) { return(false); } if (toUserName == null) { return(false); } if (fromUserName == null) { return(false); } head = new InputHead { AppId = Platform.Config.AppId, MsgType = msgType, ToUserName = toUserName, FromUserName = fromUserName }; if (msgId != null) { head.MsgId = long.Parse(msgId); } head.CreateTime = int.Parse(createTime).GetLocalTime(); return(true); }
private ReplyMessage CreateMessage(InputHead head, MessageType msgType, string command) { if (string.IsNullOrEmpty(command)) { return(null); } else { command = command.Trim(); } KeywordDealer dealer; if (!Server.Dealers.TryGetValue(command, out dealer)) { if (Server.NoMatchDealer != null) { return(Server.NoMatchDealer.DealMessage(head, command)); } return(Server.DefaultMessage); } return(dealer.DealMessage(head, command)); }
/// <summary> /// 处理消息 /// </summary> /// <param name="head"></param> /// <param name="text"></param> /// <returns></returns> protected abstract ReplyMessage Deal(InputHead head, string text);
/// <summary> /// 处理消息 /// </summary> /// <param name="head"></param> /// <param name="keyword"></param> /// <returns></returns> internal ReplyMessage DealMessage(InputHead head, string keyword) { return(Deal(head, keyword)); }
/// <summary> /// 处理消息 /// </summary> /// <param name="head"></param> /// <param name="keyword"></param> /// <returns></returns> protected abstract ReplyMessage Deal(InputHead head, string keyword);