private void OnAsyncWrite(object state)
{
try
{
TraceState("OnAsyncWrite");
// find the request.
ComDaAsnycWriteRequest request = null;
IComDaGroupCallback callback = null;
lock (m_lock)
{
// check if dispoed.
if (m_disposed)
{
return;
}
// find request.
for (int ii = 0; ii < m_requests.Count; ii++)
{
if (Object.ReferenceEquals(state, m_requests[ii]))
{
request = (ComDaAsnycWriteRequest)state;
m_requests.RemoveAt(ii);
break;
}
}
callback = m_callback;
// request must have been cancelled.
if (request == null || callback == null)
{
return;
}
}
// report that the cancel succeeded.
if (request.Cancelled)
{
callback.CancelSucceeded(m_clientHandle, request.TransactionId);
TraceState("OnAsyncWrite Cancelled", request.TransactionId, request.CancelId);
return;
}
// write values.
int[] results = SyncWrite(request.ServerHandles, request.Values);
// send callback.
callback.WriteCompleted(
this.m_clientHandle,
request.TransactionId,
request.ClientHandles,
results);
TraceState("OnAsyncWrite Completed", request.TransactionId, request.CancelId);
}
catch (Exception e)
{
Utils.Trace("Unexpected error during AsyncWrite. {0}", e.Message);
}
}