///<summary> /// return true means the transaction has been flushed. ///</summary> ///<param name="manager"> </param> ///<param name="transaction"> </param> ///<returns> true if message is flushed, false otherwise </returns> public bool End(DefaultMessageManager manager, ITransaction transaction) { if (_mStack.Count != 0) { ITransaction current = _mStack.Pop(); while (transaction != current && _mStack.Count != 0) { current = _mStack.Pop(); } if (transaction != current) { throw new Exception("没找到对应的Transaction."); } if (_mStack.Count == 0) { ValidateTransaction(current); IMessageTree tree = _mTree.Copy(); _mTree.MessageId = null; _mTree.Message = null; manager.Flush(tree); return(true); } return(false); } throw new Exception("Stack为空, 没找到对应的Transaction."); }
/// <summary> /// 添加Event和Heartbeat /// </summary> /// <param name="manager"> </param> /// <param name="message"> </param> public void Add(DefaultMessageManager manager, IMessage message) { if ((_mStack.Count == 0)) { IMessageTree tree = _mTree.Copy(); tree.MessageId = manager.NextMessageId(); tree.Message = message; manager.Flush(tree); } else { ITransaction entry = _mStack.Peek(); entry.AddChild(message); } }