//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Globalization;
using System.Workflow.ComponentModel;
using System.Runtime.Serialization;
namespace System.Workflow.Runtime
{
[Serializable]
internal sealed class EventQueueState
{
Queue deliveredMessages;
List<ActivityExecutorDelegateInfo<QueueEventArgs>> synchronousListeners;
List<ActivityExecutorDelegateInfo<QueueEventArgs>> asynchronousListeners;
bool enabled = true;
bool transactional = true;
[NonSerialized]
internal IComparable queueName;
[NonSerialized]
bool dirty = false; // dirty flag set to true until a transaction completes
internal EventQueueState()
{
this.deliveredMessages = new Queue();
this.synchronousListeners = new List<ActivityExecutorDelegateInfo<QueueEventArgs>>();
this.asynchronousListeners = new List<ActivityExecutorDelegateInfo<QueueEventArgs>>();
}
internal Queue Messages
{
get { return this.deliveredMessages; }
}
internal List<ActivityExecutorDelegateInfo<QueueEventArgs>> AsynchronousListeners
{
get { return this.asynchronousListeners; }
}
internal List<ActivityExecutorDelegateInfo<QueueEventArgs>> SynchronousListeners
{
get { return this.synchronousListeners; }
}
internal bool Enabled
{
get { return this.enabled; }
set { this.enabled = value; }
}
internal bool Transactional
{
get { return this.transactional; }
set { this.transactional = value; }
}
internal bool Dirty
{
get { return this.dirty; }
set { this.dirty = value; }
}
internal void CopyFrom(EventQueueState copyFromState)
{
this.deliveredMessages = new Queue(copyFromState.Messages);
// don't copy Subscribers since this gets fixed
// up at access time based on these tracking context ints
this.asynchronousListeners.AddRange(copyFromState.AsynchronousListeners.ToArray());
this.synchronousListeners.AddRange(copyFromState.SynchronousListeners.ToArray());
this.enabled = copyFromState.Enabled;
this.transactional = copyFromState.Transactional;
this.dirty = false;
}
}
}
|