/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }