Пример #1
0
 /// <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);
     }
 }
Пример #2
0
        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();
            }
        }
Пример #3
0
        /// <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);
            }
        }