Ejemplo n.º 1
0
        /// <summary>
        /// Sends the callback for a read request.
        /// </summary>
        private bool SendCallback(
            int transactionId,
            TransationType transactionType,
            List<HdaReadRequest> requests)
        {
            try
            {
                IComHdaDataCallback callback = m_callback;

                if (callback == null)
                {
                    return false;
                }

                switch (transactionType)
                {
                    case TransationType.Read:
                    {
                        callback.OnReadComplete(transactionId, requests);
                        break;
                    }

                    case TransationType.ReadModified:
                    {
                        callback.OnReadModifiedComplete(transactionId, requests);
                        break;
                    }

                    case TransationType.ReadAttribute:
                    {
                        callback.OnReadAttributeComplete(transactionId, requests);
                        break;
                    }

                    case TransationType.ReadAnnotation:
                    {
                        callback.OnReadAnnotations(transactionId, requests);
                        break;
                    }
                }

                return true;
            }
            catch (Exception e)
            {
                Utils.Trace(e, "Unexpected error sending callback to HDA client.");
                return false;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sends the callback for a read request.
        /// </summary>
        private bool SendCallback(
            int transactionId,
            TransationType transactionType,
            List<HdaUpdateRequest> requests)
        {
            try
            {
                IComHdaDataCallback callback = m_callback;

                if (callback == null)
                {
                    return false;
                }

                switch (transactionType)
                {
                    case TransationType.Update:
                    case TransationType.DeleteRaw:
                    case TransationType.DeleteAtTime:
                    {
                        callback.OnUpdateComplete(transactionId, requests);
                        break;
                    }

                    case TransationType.InsertAnnotation:
                    {
                        callback.OnInsertAnnotations(transactionId, requests);
                        break;
                    }
                }

                return true;
            }
            catch (Exception e)
            {
                Utils.Trace(e, "Unexpected error sending callback to HDA client.");
                return false;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Creates and queues a new transaction.
        /// </summary>
        private int[] CreateTransaction(
            TransationType transationType,
            int transactionId,
            ExtensionObject details,
            List<HdaReadRequest> requests,
            bool asyncReportErrors,
            out int cancelId)
        {

            lock (Lock)
            {
                cancelId = ++m_lastCancelId;

                // create the transaction.
                ReadRequestTransaction transaction = new ReadRequestTransaction();

                transaction.TransationType = transationType;
                transaction.TransactionId = transactionId;
                transaction.CancelId = cancelId;
                transaction.Details = details;
                transaction.Requests = new List<HdaReadRequest>();

                // keep only the valid requests.
                int[] errors = new int[requests.Count];

                for (int ii = 0; ii < requests.Count; ii++)
                {
                    if (!asyncReportErrors)
                    {
                        errors[ii] = requests[ii].Error;

                        if (errors[ii] < 0)
                        {
                            continue;
                        }
                    }

                    transaction.Requests.Add(requests[ii]);
                }
                
                // queue the transaction.
                if (transaction.Requests.Count > 0)
                {
                    m_transactions.Add(transaction.CancelId, transaction);
                    ThreadPool.QueueUserWorkItem(DoRead, transaction);
                }

                // return the error list.
                return errors;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Creates and queues a new transaction.
        /// </summary>
        private int[] CreateTransaction(
            TransationType transationType,
            int transactionId,
            List<HdaUpdateRequest> requests,
            out int cancelId)
        {

            lock (Lock)
            {
                cancelId = ++m_lastCancelId;

                // create the transaction.
                UpdateRequestTransaction transaction = new UpdateRequestTransaction();

                transaction.TransationType = transationType;
                transaction.TransactionId = transactionId;
                transaction.CancelId = cancelId;
                transaction.Requests = new List<HdaUpdateRequest>();

                // keep only the valid requests.
                int[] errors = new int[requests.Count];

                for (int ii = 0; ii < requests.Count; ii++)
                {
                    errors[ii] = requests[ii].Error;

                    if (errors[ii] < 0)
                    {
                        continue;
                    }

                    transaction.Requests.Add(requests[ii]);
                }
                
                // queue the transaction.
                if (transaction.Requests.Count > 0)
                {
                    m_transactions.Add(transaction.CancelId, transaction);
                    ThreadPool.QueueUserWorkItem(DoUpdate, transaction);
                }

                // return the error list.
                return errors;
            }
        }