/// <summary> /// Sends a confirmed request /// </summary> /// <param name="handle">The handle used to control the transaction</param> /// <param name="instance">The address of the destination device</param> /// <param name="request">The request to send</param> public void SendConfirmedRequest(ClientTransactionHandle handle, uint instance, IConfirmedRequest request) { lock (_lock) { var bytes = _saveConfirmedRequest(request); _txManager.SendConfirmedRequest(handle, instance, (byte)request.ServiceChoice, bytes); } }
public virtual void TestHandles() { IConfiguration config = Db4oFactory.NewConfiguration(); config.Storage = new MemoryStorage(); LocalObjectContainer db = (LocalObjectContainer)Db4oFactory.OpenFile(config, ClientTransactionTestUtil .MainfileName); ClientTransactionPool pool = new ClientTransactionPool(db); try { ClientTransactionHandle handleA = new ClientTransactionHandle(pool); Assert.AreEqual(db, handleA.Transaction().Container()); ClientTransactionHandle handleB = new ClientTransactionHandle(pool); Assert.AreNotEqual(handleA.Transaction(), handleB.Transaction()); Assert.AreEqual(db, handleB.Transaction().Container()); Assert.AreEqual(2, pool.OpenTransactionCount()); Assert.AreEqual(1, pool.OpenFileCount()); handleA.AcquireTransactionForFile(ClientTransactionTestUtil.FilenameA); Assert.AreEqual(3, pool.OpenTransactionCount()); Assert.AreEqual(2, pool.OpenFileCount()); Assert.AreNotEqual(db, handleA.Transaction().Container()); handleB.AcquireTransactionForFile(ClientTransactionTestUtil.FilenameA); Assert.AreEqual(4, pool.OpenTransactionCount()); Assert.AreEqual(2, pool.OpenFileCount()); Assert.AreNotEqual(handleA.Transaction(), handleB.Transaction()); Assert.AreEqual(handleA.Transaction().Container(), handleB.Transaction().Container ()); handleA.ReleaseTransaction(ShutdownMode.Normal); Assert.AreEqual(db, handleA.Transaction().Container()); Assert.AreNotEqual(db, handleB.Transaction().Container()); Assert.AreEqual(3, pool.OpenTransactionCount()); Assert.AreEqual(2, pool.OpenFileCount()); handleB.ReleaseTransaction(ShutdownMode.Normal); Assert.AreEqual(db, handleB.Transaction().Container()); Assert.AreEqual(2, pool.OpenTransactionCount()); Assert.AreEqual(1, pool.OpenFileCount()); handleB.Close(ShutdownMode.Normal); Assert.AreEqual(1, pool.OpenTransactionCount()); handleA.Close(ShutdownMode.Normal); Assert.AreEqual(0, pool.OpenTransactionCount()); } finally { pool.Close(); } }
/// <summary> /// Sends a confirmed request /// </summary> /// <param name="handle">The transaction handle</param> /// <param name="destination">The destination address</param> /// <param name="serviceChoice">The service choice of the request</param> /// <param name="request">The request to send</param> public void SendConfirmedRequest(ClientTransactionHandle handle, Address destination, byte serviceChoice, byte[] request) { lock (_lock) { byte invokeId = _getClientInvokeId(); var transaction = new ClientTransaction( _host, this, handle, invokeId, destination, serviceChoice, request); this._clientTransactions.Add(transaction); } }