public void Check(BeeDataAdapter dataAdapter) { WeiXinInvokeTree invokeTree = FindCurrentInvoke(dataAdapter); if (invokeTree == null) { } else { if (!string.IsNullOrEmpty(invokeTree.AContent)) { dataAdapter[Constants.BeeActionName] = "InvokeTreeText"; dataAdapter["acontent"] = System.Web.HttpUtility.HtmlDecode(invokeTree.AContent); } else if (!string.IsNullOrEmpty(invokeTree.BContent)) { dataAdapter[Constants.BeeActionName] = "InvokeTreeArticle"; dataAdapter["bcontent"] = System.Web.HttpUtility.HtmlDecode(invokeTree.BContent); } else { if (!string.IsNullOrEmpty(invokeTree.ControllerName) && !string.IsNullOrEmpty(invokeTree.ActionName)) { dataAdapter[Constants.BeeControllerName] = invokeTree.ControllerName; dataAdapter[Constants.BeeActionName] = invokeTree.ActionName; } } if (!invokeTree.RemainFlag) { InvokeContextManager.Instance.CurrentContext(dataAdapter["fromusername"].ToString()).MessageStack.Pop(); } } }
private WeiXinInvokeTree FindCurrentInvoke(BeeDataAdapter dataAdapter) { WeiXinInvokeTree result = null; string fromUserName = dataAdapter.TryGetValue <string>("fromusername", string.Empty); InvokeContext currentContext = InvokeContextManager.Instance.CurrentContext(fromUserName); // 调用链目前仅仅关心到菜单起始的文本输入链 string currentCommand = dataAdapter.TryGetValue <string>("content", string.Empty); if (string.IsNullOrEmpty(currentCommand)) { currentCommand = dataAdapter.TryGetValue <string>("eventkey", string.Empty); } string eventName = dataAdapter.TryGetValue <string>("event", string.Empty); if (string.Compare("click", eventName, true) == 0) { currentContext.MessageStack.Clear(); } WeiXinInvokeTree parentInvokeTree = null; int parentId = 0; List <string> list = (from item in currentContext.MessageStack select item.InvokeTreeName).ToList(); list.Reverse(); foreach (string item in list) { parentInvokeTree = FindChild(parentId, item); if (parentInvokeTree != null) { parentId = parentInvokeTree.Id; } else { break; } } if (parentInvokeTree != null) { parentId = parentInvokeTree.Id; } result = FindChild(parentId, currentCommand); if (result == null) { result = FindChild(parentId, "*"); } if (result == null) { result = parentInvokeTree; } else { dataAdapter["createtime"] = DateTimeUtil.GetDateTimeFromXml(dataAdapter["createtime"].ToString()); RequestMessage message = ConvertUtil.ConvertDataToObject <RequestMessage>(dataAdapter); message.InvokeTreeName = result.Name; currentContext.MessageStack.Push(message); } return(result); }