/// <summary> /// Constructor /// </summary> /// <param name="status">Overall status of batch processing</param> /// <param name="opCount">Number of operations performed on the batch</param> /// <param name="operationStatus">Array of statuses for each opearation</param> /// <param name="callbackCookie">Callback cookie</param> public TpBatchStatus( int status, short opCount, BTBatchOperationStatus[] operationStatus, object callbackCookie ) { this.status = status; this.opCount = opCount; this.operationStatus = operationStatus; this.callbackCookie = callbackCookie; }
/// <summary> /// Process the results of batch submission /// </summary> /// <param name="status">Overall status for the batch</param> /// <param name="opCount">Count of batch operations</param> /// <param name="operationStatus">Status for each operation on the batch</param> /// <param name="callbackCookie">Callback cookie</param> public void BatchComplete( int status, short opCount, BTBatchOperationStatus[] operationStatus, object callbackCookie) { try { _batchStatus = new TpBatchStatus(status, opCount, operationStatus, callbackCookie); _isCompleted = true; _evt.Set(); // If client registered for a call back... if ( null != _asyncCallBack ) { _asyncCallBack( _ar ); } } finally { if ( null != _responseCallback ) _responseCallback.SubmitComplete(_batchStatus); } }
// IBTBatchCallBack public void BatchComplete(Int32 hrStatus, Int16 nOpCount, BTBatchOperationStatus[] pOperationStatus, System.Object vCallbackCookie) { //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.SegmentLifeTime, "CoreAdapter: Entering Batch.BatchComplete"); if (0 != hrStatus) { //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.Error, "CoreAdapter: Batch.BatchComplete hrStatus: {0}", hrStatus); } this.hrStatus = hrStatus; StartBatchComplete(hrStatus); // nothing at all failed in this batch so we are done if (hrStatus < 0 || this.makeSuccessCall) { //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.Info, "CoreAdapter: Batch.BatchComplete (hrStatus < 0 || this.makeSuccessCall)"); StartProcessFailures(); foreach (BTBatchOperationStatus status in pOperationStatus) { // is this the correct behavior? if (status.Status >= 0 && !this.makeSuccessCall) continue; switch (status.OperationType) { case BatchOperationType.Submit: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = null; if (submitIsForSubmitResponse) { batchMessage = (BatchMessage)this.submitResponseMessageArray[i]; } else { batchMessage = (BatchMessage)this.submitArray[i]; } if (status.MessageStatus[i] < 0) SubmitFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) SubmitSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } break; } case BatchOperationType.Delete: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.deleteArray[i]; if (status.MessageStatus[i] < 0) DeleteFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) DeleteSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } break; } case BatchOperationType.Resubmit: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.resubmitArray[i]; if (status.MessageStatus[i] < 0) ResubmitFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) ResubmitSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } break; } case BatchOperationType.MoveToSuspendQ: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.moveToSuspendQArray[i]; if (status.MessageStatus[i] < 0) MoveToSuspendQFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) MoveToSuspendQSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } break; } case BatchOperationType.MoveToNextTransport: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.moveToNextTransportArray[i]; if (status.MessageStatus[i] < 0) MoveToNextTransportFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) MoveToNextTransportSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } break; } case BatchOperationType.SubmitRequest: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.submitRequestArray[i]; if (status.MessageStatus[i] < 0) SubmitRequestFailure(batchMessage.message, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) SubmitRequestSuccess(batchMessage.message, status.MessageStatus[i], batchMessage.userData); } break; } case BatchOperationType.CancelRequestForResponse: { for (int i = 0; i < status.MessageCount; i++) { BatchMessage batchMessage = (BatchMessage)this.cancelResponseMessageArray[i]; if (status.MessageStatus[i] < 0) CancelResponseMessageFailure(batchMessage.correlationToken, status.MessageStatus[i], batchMessage.userData); else if (this.makeSuccessCall) CancelResponseMessageSuccess(batchMessage.correlationToken, status.MessageStatus[i], batchMessage.userData); } break; } } // end switch } // end foreach EndProcessFailures(); } // end if EndBatchComplete(); //BT.Trace.Tracer.TraceMessage(BT.TraceLevel.SegmentLifeTime, "CoreAdapter: Leaving Batch.BatchComplete"); }
public void BatchComplete(int status, short opCount, BTBatchOperationStatus[] operationStatus, object callbackCookie) { //Ignoring BatchComplete for sample adapter. Ideally, the logic for status check and acting correspondingly should be present. _resetEvent.Set(); }