Opc.Ua.Com.Server.ComHdaProxy.DoRead C# (CSharp) Method

DoRead() private method

Executes an asynchronous read operation.
private DoRead ( object state ) : void
state object
return void
        private void DoRead(object state)
        {
            Session session = null;
            ReadRequestTransaction transaction = (ReadRequestTransaction)state;

            try
            {
                bool done = false;

                while (!done)
                {
                    // check if the transaction is still active.
                    lock (Lock)
                    {
                        if (!m_transactions.ContainsKey(transaction.CancelId))
                        {
                            break;
                        }

                        session = Session;
                    }

                    // check for session error.
                    if (session == null)
                    {
                        for (int ii = 0; ii < transaction.Requests.Count; ii++)
                        {
                            transaction.Requests[ii].Error = ResultIds.E_FAIL;
                        }

                        SendCallback(transaction.TransactionId, transaction.TransationType, transaction.Requests);
                        break;
                    }

                    // fetch next batch.
                    if (transaction.TransationType == TransationType.ReadAttribute)
                    {
                        done = !ReadAttributes(session, transaction.Details, transaction.Requests, false);
                    }
                    else
                    {
                        done = !ReadNext(session, transaction.Details, transaction.Requests, false);
                    }

                    // send data to client.
                    SendCallback(transaction.TransactionId, transaction.TransationType, transaction.Requests);

                    // remove values that were sent.
                    for (int ii = 0; ii < transaction.Requests.Count; ii++)
                    {
                        transaction.Requests[ii].Values.Clear();

                        if (transaction.Requests[ii].ModificationInfos != null)
                        {
                            transaction.Requests[ii].ModificationInfos.Clear();
                        }
                    }
                }

                // release continuation points.
                if (!done && session != null)
                {
                    ReadNext(session, transaction.Details, transaction.Requests, true);
                }
            }
            catch (Exception e)
            {
                Utils.Trace(e, "Unexpected error reading history.");
            }
            finally
            {
                // remove transaction.
                lock (Lock)
                {
                    m_transactions.Remove(transaction.CancelId);
                }
            }
        }