5 // Peter Van Isacker (sclytrack@planetinternet.be)
6 // Michael Barker (mike@middlesoft.co.uk)
8 // (C) 2003 Peter Van Isacker
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Collections;
37 namespace System.Messaging
39 public class MessageEnumerator: MarshalByRefObject, IEnumerator, IDisposable
41 private IMessageEnumerator delegateEnumerator;
42 private IMessageFormatter formatter;
44 internal MessageEnumerator (IMessageEnumerator delegateEnumerator, IMessageFormatter formatter)
46 this.delegateEnumerator = delegateEnumerator;
47 this.formatter = formatter;
50 public Message Current {
52 IMessage iMsg = delegateEnumerator.Current;
56 return new Message (iMsg, null, formatter);
60 object IEnumerator.Current {
61 get { return Current; }
64 public IntPtr CursorHandle {
65 get { return delegateEnumerator.CursorHandle; }
70 delegateEnumerator.Close ();
76 GC.SuppressFinalize (this);
79 protected virtual void Dispose(bool disposing)
81 delegateEnumerator.Dispose ();
86 public bool MoveNext()
88 return delegateEnumerator.MoveNext ();
91 public bool MoveNext (TimeSpan timeout)
93 return delegateEnumerator.MoveNext (timeout);
96 public Message RemoveCurrent()
99 IMessage iMsg = delegateEnumerator.RemoveCurrent ();
102 return new Message (iMsg, null, formatter);
104 } catch (ConnectionException e) {
105 throw new MessageQueueException (MessageQueueErrorCode.QueueNotAvailable, e.Message);
106 } catch (MessageUnavailableException e) {
107 throw new InvalidOperationException (e.Message, e);
108 } catch (MonoMessagingException e) {
109 throw new MessageQueueException (MessageQueueErrorCode.Generic, e.Message);
113 public Message RemoveCurrent (MessageQueueTransaction transaction)
116 IMessage iMsg = delegateEnumerator.RemoveCurrent (transaction.DelegateTx);
119 return new Message (iMsg, null, formatter);
121 } catch (ConnectionException e) {
122 throw new MessageQueueException (MessageQueueErrorCode.QueueNotAvailable, e.Message);
123 } catch (MessageUnavailableException e) {
124 throw new InvalidOperationException (e.Message, e);
125 } catch (MonoMessagingException e) {
126 throw new MessageQueueException (MessageQueueErrorCode.Generic, e.Message);
130 public Message RemoveCurrent(MessageQueueTransactionType transactionType)
133 IMessage iMsg = delegateEnumerator.RemoveCurrent ((Mono.Messaging.MessageQueueTransactionType) transactionType);
136 return new Message (iMsg, null, formatter);
138 } catch (ConnectionException e) {
139 throw new MessageQueueException (MessageQueueErrorCode.QueueNotAvailable, e.Message);
140 } catch (MessageUnavailableException e) {
141 throw new InvalidOperationException (e.Message, e);
142 } catch (MonoMessagingException e) {
143 throw new MessageQueueException (MessageQueueErrorCode.Generic, e.Message);
147 public Message RemoveCurrent (TimeSpan timeout)
150 IMessage iMsg = delegateEnumerator.RemoveCurrent (timeout);
153 return new Message (iMsg, null, formatter);
155 } catch (ConnectionException e) {
156 throw new MessageQueueException (MessageQueueErrorCode.QueueNotAvailable, e.Message);
157 } catch (MessageUnavailableException e) {
158 throw new InvalidOperationException (e.Message, e);
159 } catch (MonoMessagingException e) {
160 throw new MessageQueueException (MessageQueueErrorCode.Generic, e.Message);
164 public Message RemoveCurrent (TimeSpan timeout,
165 MessageQueueTransaction transaction)
168 IMessage iMsg = delegateEnumerator.RemoveCurrent (timeout,
169 transaction.DelegateTx);
172 return new Message (iMsg, null, formatter);
174 } catch (ConnectionException e) {
175 throw new MessageQueueException (MessageQueueErrorCode.QueueNotAvailable, e.Message);
176 } catch (MessageUnavailableException e) {
177 throw new InvalidOperationException (e.Message, e);
178 } catch (MonoMessagingException e) {
179 throw new MessageQueueException (MessageQueueErrorCode.Generic, e.Message);
183 public Message RemoveCurrent (TimeSpan timeout, MessageQueueTransactionType transactionType)
186 IMessage iMsg = delegateEnumerator.RemoveCurrent (timeout,
187 (Mono.Messaging.MessageQueueTransactionType) transactionType);
190 return new Message (iMsg, null, formatter);
192 } catch (ConnectionException e) {
193 throw new MessageQueueException (MessageQueueErrorCode.QueueNotAvailable, e.Message);
194 } catch (MessageUnavailableException e) {
195 throw new InvalidOperationException (e.Message, e);
196 } catch (MonoMessagingException e) {
197 throw new MessageQueueException (MessageQueueErrorCode.Generic, e.Message);