2 // Mono.Messaging.RabbitMQ
5 // Michael Barker (mike@middlesoft.co.uk)
7 // (C) 2008 Michael Barker
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System
.Collections
;
33 using System
.ComponentModel
;
39 using RabbitMQ
.Client
;
40 using RabbitMQ
.Client
.Content
;
41 using RabbitMQ
.Client
.Events
;
42 using RabbitMQ
.Client
.Exceptions
;
43 using RabbitMQ
.Client
.MessagePatterns
;
46 namespace Mono
.Messaging
.RabbitMQ
{
48 public class RabbitMQMessageQueueTransaction
: IMessageQueueTransaction
{
50 private readonly string txId
;
51 private MessageQueueTransactionStatus status
= MessageQueueTransactionStatus
.Initialized
;
52 private IConnection cn
= null;
53 private IModel model
= null;
54 private String host
= null;
55 private bool isDisposed
= false;
56 private Object syncObj
= new Object ();
58 public RabbitMQMessageQueueTransaction (string txId
)
63 public MessageQueueTransactionStatus Status
{
75 status
= MessageQueueTransactionStatus
.Aborted
;
82 if (status
== MessageQueueTransactionStatus
.Pending
)
83 throw new InvalidOperationException ("Transaction already started");
84 status
= MessageQueueTransactionStatus
.Pending
;
92 status
= MessageQueueTransactionStatus
.Committed
;
100 public delegate void Send (ref string host
, ref IConnection cn
,
101 ref IModel model
, IMessage msg
, string txId
);
103 public delegate IMessage
Receive (ref string host
, ref IConnection cn
,
104 ref IModel model
, string txId
);
106 public void RunSend (Send sendDelegate
, IMessage msg
)
109 sendDelegate (ref host
, ref cn
, ref model
, msg
, Id
);
113 public IMessage
RunReceive (Receive receiveDelegate
)
116 return receiveDelegate (ref host
, ref cn
, ref model
, Id
);
120 public void Dispose ()
123 GC
.SuppressFinalize (this);
126 protected virtual void Dispose (bool disposing
)
129 if (!isDisposed
&& disposing
) {