Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TransactionInterop.cs
Go to the documentation of this file.
2
3namespace System.Transactions;
4
5public static class TransactionInterop
6{
7 public static readonly Guid PromoterTypeDtc = new Guid("14229753-FFE1-428D-82B7-DF73045CB8DA");
8
10 {
11 if (null == transaction)
12 {
13 throw new ArgumentNullException("transaction");
14 }
15 if (transaction.Disposed)
16 {
17 throw new ObjectDisposedException("Transaction");
18 }
19 if (transaction._complete)
20 {
22 }
23 DistributedTransaction distributedTransaction = transaction.Promote();
24 if (distributedTransaction == null)
25 {
27 }
28 return distributedTransaction;
29 }
30
31 public static byte[] GetExportCookie(Transaction transaction, byte[] whereabouts)
32 {
33 if (null == transaction)
34 {
35 throw new ArgumentNullException("transaction");
36 }
37 if (whereabouts == null)
38 {
39 throw new ArgumentNullException("whereabouts");
40 }
42 if (log.IsEnabled())
43 {
44 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetExportCookie");
45 }
46 byte[] array = new byte[whereabouts.Length];
47 Buffer.BlockCopy(whereabouts, 0, array, 0, whereabouts.Length);
48 DistributedTransaction distributedTransaction = ConvertToDistributedTransaction(transaction);
49 byte[] exportCookie = distributedTransaction.GetExportCookie(array);
50 if (log.IsEnabled())
51 {
52 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetExportCookie");
53 }
54 return exportCookie;
55 }
56
57 public static Transaction GetTransactionFromExportCookie(byte[] cookie)
58 {
59 if (cookie == null)
60 {
61 throw new ArgumentNullException("cookie");
62 }
63 if (cookie.Length < 32)
64 {
65 throw new ArgumentException(System.SR.InvalidArgument, "cookie");
66 }
68 if (log.IsEnabled())
69 {
70 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromExportCookie");
71 }
72 byte[] array = new byte[cookie.Length];
73 Buffer.BlockCopy(cookie, 0, array, 0, cookie.Length);
74 cookie = array;
75 Guid guid = new Guid(cookie.AsSpan(16, 16));
77 if (transaction != null)
78 {
79 if (log.IsEnabled())
80 {
81 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromExportCookie");
82 }
83 return transaction;
84 }
86 transaction = TransactionManager.FindOrCreatePromotedTransaction(guid, transactionFromExportCookie);
87 if (log.IsEnabled())
88 {
89 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromExportCookie");
90 }
91 return transaction;
92 }
93
94 public static byte[] GetTransmitterPropagationToken(Transaction transaction)
95 {
96 if (null == transaction)
97 {
98 throw new ArgumentNullException("transaction");
99 }
101 if (log.IsEnabled())
102 {
103 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransmitterPropagationToken");
104 }
105 DistributedTransaction distributedTransaction = ConvertToDistributedTransaction(transaction);
106 byte[] transmitterPropagationToken = distributedTransaction.GetTransmitterPropagationToken();
107 if (log.IsEnabled())
108 {
109 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransmitterPropagationToken");
110 }
111 return transmitterPropagationToken;
112 }
113
114 public static Transaction GetTransactionFromTransmitterPropagationToken(byte[] propagationToken)
115 {
116 if (propagationToken == null)
117 {
118 throw new ArgumentNullException("propagationToken");
119 }
120 if (propagationToken.Length < 24)
121 {
122 throw new ArgumentException(System.SR.InvalidArgument, "propagationToken");
123 }
125 if (log.IsEnabled())
126 {
127 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromTransmitterPropagationToken");
128 }
129 Guid transactionIdentifier = new Guid(propagationToken.AsSpan(8, 16));
130 Transaction transaction = TransactionManager.FindPromotedTransaction(transactionIdentifier);
131 if (null != transaction)
132 {
133 if (log.IsEnabled())
134 {
135 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromTransmitterPropagationToken");
136 }
137 return transaction;
138 }
139 DistributedTransaction distributedTransactionFromTransmitterPropagationToken = GetDistributedTransactionFromTransmitterPropagationToken(propagationToken);
140 Transaction result = TransactionManager.FindOrCreatePromotedTransaction(transactionIdentifier, distributedTransactionFromTransmitterPropagationToken);
141 if (log.IsEnabled())
142 {
143 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromTransmitterPropagationToken");
144 }
145 return result;
146 }
147
149 {
150 if (null == transaction)
151 {
152 throw new ArgumentNullException("transaction");
153 }
155 if (log.IsEnabled())
156 {
157 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetDtcTransaction");
158 }
159 DistributedTransaction distributedTransaction = ConvertToDistributedTransaction(transaction);
160 IDtcTransaction dtcTransaction = distributedTransaction.GetDtcTransaction();
161 if (log.IsEnabled())
162 {
163 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetDtcTransaction");
164 }
165 return dtcTransaction;
166 }
167
169 {
170 if (transactionNative == null)
171 {
172 throw new ArgumentNullException("transactionNative");
173 }
175 if (log.IsEnabled())
176 {
177 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromDtcTransaction");
178 }
179 Transaction transactionFromDtcTransaction = DistributedTransactionManager.GetTransactionFromDtcTransaction(transactionNative);
180 if (log.IsEnabled())
181 {
182 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetTransactionFromDtcTransaction");
183 }
184 return transactionFromDtcTransaction;
185 }
186
187 public static byte[] GetWhereabouts()
188 {
190 if (log.IsEnabled())
191 {
192 log.MethodEnter(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetWhereabouts");
193 }
195 byte[] whereabouts = distributedTransactionManager.GetWhereabouts();
196 if (log.IsEnabled())
197 {
198 log.MethodExit(TraceSourceType.TraceSourceDistributed, "TransactionInterop.GetWhereabouts");
199 }
200 return whereabouts;
201 }
202
204 {
205 if (propagationToken == null)
206 {
207 throw new ArgumentNullException("propagationToken");
208 }
209 if (propagationToken.Length < 24)
210 {
211 throw new ArgumentException(System.SR.InvalidArgument, "propagationToken");
212 }
213 byte[] array = new byte[propagationToken.Length];
214 Array.Copy(propagationToken, array, propagationToken.Length);
216 }
217}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
static void BlockCopy(Array src, int srcOffset, Array dst, int dstOffset, int count)
Definition Buffer.cs:102
static string InvalidArgument
Definition SR.cs:34
Definition SR.cs:7
static Transaction GetTransactionFromDtcTransaction(IDtcTransaction transactionNative)
static DistributedTransaction GetTransactionFromExportCookie(byte[] cookie, Guid txId)
static DistributedTransaction GetDistributedTransactionFromTransmitterPropagationToken(byte[] propagationToken)
static Exception CreateTransactionCompletedException(Guid distributedTxId)
static Transaction GetTransactionFromDtcTransaction(IDtcTransaction transactionNative)
static Transaction GetTransactionFromTransmitterPropagationToken(byte[] propagationToken)
static byte[] GetExportCookie(Transaction transaction, byte[] whereabouts)
static DistributedTransaction ConvertToDistributedTransaction(Transaction transaction)
static byte[] GetTransmitterPropagationToken(Transaction transaction)
static Transaction GetTransactionFromExportCookie(byte[] cookie)
static DistributedTransaction GetDistributedTransactionFromTransmitterPropagationToken(byte[] propagationToken)
static IDtcTransaction GetDtcTransaction(Transaction transaction)
static Transaction FindPromotedTransaction(Guid transactionIdentifier)
static DistributedTransactionManager DistributedTransactionManager
static Transaction FindOrCreatePromotedTransaction(Guid transactionIdentifier, DistributedTransaction dtx)
DistributedTransaction Promote()
void MethodExit(TraceSourceType traceSource, object thisOrContextObject, [CallerMemberName] string methodname=null)
static readonly TransactionsEtwProvider Log
void MethodEnter(TraceSourceType traceSource, object thisOrContextObject, [CallerMemberName] string methodname=null)