2004-05-05 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Messaging / System.Messaging / MessageQueueTransaction.cs
1 //\r
2 // System.Messaging\r
3 //\r
4 // Authors:\r
5 //      Peter Van Isacker (sclytrack@planetinternet.be)\r
6 //      Rafael Teixeira   (rafaelteixeirabr@hotmail.com)\r
7 //\r
8 // (C) 2003 Peter Van Isacker\r
9 //\r
10 using System;\r
11 \r
12 namespace System.Messaging \r
13 {\r
14 \r
15         // TODO: have to comply with 'This type is safe for multithreaded operations'\r
16         public class MessageQueueTransaction : IDisposable \r
17         {\r
18         // To avoid multiple disposals\r
19         private bool disposed = false;\r
20 \r
21                 public MessageQueueTransaction()\r
22                 {\r
23                         status = MessageQueueTransactionStatus.Initialized;\r
24                 }\r
25                 \r
26                 MessageQueueTransactionStatus status;\r
27                 \r
28                 public MessageQueueTransactionStatus Status \r
29                 {\r
30                         get { return status; }\r
31                 }\r
32                         \r
33                 [MonoTODO]\r
34                 public void Abort()\r
35                 {\r
36                         if (status != MessageQueueTransactionStatus.Pending)\r
37                                 throw new InvalidOperationException();\r
38                         status = MessageQueueTransactionStatus.Aborted;\r
39                         throw new NotImplementedException();\r
40                 }\r
41                 \r
42                 [MonoTODO]\r
43                 public void Begin()\r
44                 {\r
45                         if (status != MessageQueueTransactionStatus.Initialized)\r
46                                 throw new InvalidOperationException();\r
47                         status = MessageQueueTransactionStatus.Pending;\r
48                         throw new NotImplementedException();\r
49                 }\r
50                 \r
51                 [MonoTODO]\r
52                 public void Commit()\r
53                 {\r
54                         if (status != MessageQueueTransactionStatus.Pending)\r
55                                 throw new InvalidOperationException();\r
56                         status = MessageQueueTransactionStatus.Committed;\r
57                         throw new NotImplementedException();\r
58                 }\r
59 \r
60                 public virtual void Dispose()\r
61                 {\r
62                         if (status == MessageQueueTransactionStatus.Pending)\r
63                                 Abort();\r
64             // Do this only at the first time\r
65             if (!this.disposed)\r
66                                 Dispose(true);\r
67             disposed = true;         \r
68             // Take this object off the finalization queue \r
69             GC.SuppressFinalize(this);\r
70                 }\r
71                 \r
72                 [MonoTODO]\r
73                 protected virtual void Dispose(bool disposing)\r
74                 {\r
75                         //if (disposing)\r
76                         //  free managed resources, by calling dispose on them\r
77 \r
78                         // free external resources\r
79                         throw new NotImplementedException();\r
80                 }\r
81                 \r
82                 ~MessageQueueTransaction()\r
83                 {\r
84                         if (status == MessageQueueTransactionStatus.Pending)\r
85                                 Abort();\r
86                 if (!this.disposed)\r
87                                 Dispose(false);\r
88                 }\r
89         }\r
90 }\r