Beispiel #1
0
        ///<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.");
        }
Beispiel #2
0
 /// <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);
     }
 }