/// <summary> /// 执行具体消息处理委托 /// </summary> /// <returns></returns> private WXChatContext ExecuteProcessor <TRecMsg>(XmlDocument recMsgXml, IDictionary <string, string> recMsgDirs, TRecMsg recMsg, Func <TRecMsg, WXBaseReplyMsg> func) where TRecMsg : WXBaseRecMsg, new() { if (recMsg == null) { recMsg = new TRecMsg(); } recMsg.LoadMsgDirs(recMsgDirs); recMsg.RecMsgXml = recMsgXml; var msgContext = new WXChatContext { RecMsg = recMsg }; Executing(msgContext); if (msgContext.ReplyMsg == null) { msgContext.ReplyMsg = func?.Invoke(recMsg); } if (msgContext.ReplyMsg == null) { msgContext.ReplyMsg = ExecuteUnknowProcessor(recMsg) ?? WXNoneReplyMsg.None; } msgContext.ReplyMsg.ToUserName = recMsg.FromUserName; msgContext.ReplyMsg.FromUserName = recMsg.ToUserName; msgContext.ReplyMsg.CreateTime = DateTime.Now.ToLocalSeconds(); return(msgContext); }
/// <summary> /// 执行具体消息处理委托 /// </summary> /// <returns></returns> private async Task <WXChatContext> ExecuteProcessor(XmlDocument recMsgXml, IDictionary <string, string> recMsgDirs, BaseBaseProcessor processor) { var recMsg = processor.CreateRecMsg(); recMsg.LoadMsgDirs(recMsgDirs); recMsg.RecMsgXml = recMsgXml; var msgContext = new WXChatContext { RecMsg = recMsg, ReplyMsg = await processor.InternalExecute(recMsg) }; if (msgContext.ReplyMsg == null) { msgContext.ReplyMsg = (await ProcessUnknowMsg(recMsg)) ?? WXNoneReplyMsg.None; } msgContext.ReplyMsg.ToUserName = recMsg.FromUserName; msgContext.ReplyMsg.FromUserName = recMsg.ToUserName; msgContext.ReplyMsg.CreateTime = DateTime.Now.ToLocalSeconds(); return(msgContext); }
/// <summary> /// 执行结束方法 /// </summary> /// <param name="msgContext"></param> protected virtual void ExecuteEnd(WXChatContext msgContext) { }
/// <summary> /// 执行过程中,业务执行前 /// 如果对 ReplyMsg 赋值,则后续 /// </summary> /// <param name="context"></param> protected virtual void Executing(WXChatContext context) { }
protected override Task ExecuteEnd(WXChatContext msgContext) { LogHelper.Info(msgContext.RecMsg.RecMsgXml.InnerXml, "PlatformMsg"); return(Task.CompletedTask); }
protected override void ExecuteEnd(WXChatContext msgContext) { LogHelper.Info(msgContext.RecMsg.RecMsgXml.InnerXml, "PlatformMsg"); }
protected override void Executing(WXChatContext context) { LogHelper.Info($"当前消息正文:{context.RecMsg.RecMsgXml.InnerXml}", "Executing"); }
/// <summary> /// 执行结束方法 /// </summary> /// <param name="msgContext"></param> protected virtual Task ExecuteEnd(WXChatContext msgContext) { return(Task.CompletedTask); }