internal Queue(string formatName, QueueAccessMode accessMode, QueueShareReceive shareMode) { Contract.Requires(formatName != null); AccessMode = accessMode; ShareMode = shareMode; FormatName = formatName; }
/// <summary> /// Get the existing Queue or open a new Queue using the factory method. /// </summary> public T Open(string formatName, QueueAccessMode mode, QueueShareReceive share = QueueShareReceive.Shared) { Contract.Requires(!string.IsNullOrWhiteSpace(formatName)); var key = new Key(formatName, mode, share); lock (_cache.SyncRoot) { T queue = _cache[key]; if (queue == null || queue.IsClosed) { _cache[key] = queue = _factory(formatName, mode, share); } return(queue); } }
/// <summary> /// Takes the existing <see cref="Queue"/> or open a new Queue using the factory method. Removes the queue from the cache. /// After you have finished with the borrowed queue call <see cref="Return(T)"/> /// </summary> public T Borrow(string formatName, QueueAccessMode mode, QueueShareReceive share = QueueShareReceive.Shared) { Contract.Requires(!string.IsNullOrWhiteSpace(formatName)); T queue; var key = new Key(formatName, mode, share); lock (_cache.SyncRoot) { queue = _cache[key]; if (queue != null) { _cache.Remove(key); // take it out of the cache } } return(queue == null || queue.IsClosed ? _factory(formatName, mode, share) : queue); }
/// <summary>Opens a queue using a <paramref name="formatName"/>. Use <see cref="Queues.PathToFormatName(string)"/> to get the <paramref name="formatName"/> for a queue path.</summary> public QueueReader(string formatName, QueueReaderMode readerMode = QueueReaderMode.Receive, QueueShareReceive share = QueueShareReceive.Shared) : base(formatName, (QueueAccessMode)readerMode, share) { Open(); }
/// <summary>Opens a queue using a <paramref name="formatName"/>. Use <see cref="Queues.PathToFormatName(string)"/> to get the <paramref name="formatName"/> for a queue path.</summary> public SubQueue(string formatName, QueueReaderMode mode = QueueReaderMode.Receive, QueueShareReceive share = QueueShareReceive.Shared) : base(formatName, mode, share) { Contract.Requires(formatName.IndexOf(';') > 0, "formatName is not a subqueue"); int res = Native.OpenQueue(FormatName, QueueAccessMode.Move, QueueShareReceive.Shared, out _moveHandle); if (res != 0) { throw new QueueException(res); } }
public Key(string formatName, QueueAccessMode mode, QueueShareReceive share) { this.formatName = formatName; this.mode = mode; this.share = share; }
public static extern int OpenQueue(string formatName, QueueAccessMode access, QueueShareReceive shareMode, out QueueHandle handle);