示例#1
0
        /// <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));
        }
示例#2
0
        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));
        }
示例#4
0
 /// <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);