private void DoUpdate(object state)
{
Session session = null;
UpdateRequestTransaction transaction = (UpdateRequestTransaction)state;
try
{
// check if the transaction is still active.
lock (Lock)
{
if (!m_transactions.ContainsKey(transaction.CancelId))
{
return;
}
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);
return;
}
// send request to the server.
try
{
switch (transaction.TransationType)
{
case TransationType.Update:
{
UpdateHistory(session, transaction.Requests, true);
break;
}
case TransationType.DeleteAtTime:
case TransationType.DeleteRaw:
case TransationType.InsertAnnotation:
{
UpdateHistory(session, transaction.Requests, false);
break;
}
}
}
// handle network error.
catch (Exception)
{
for (int ii = 0; ii < transaction.Requests.Count; ii++)
{
transaction.Requests[ii].Error = ResultIds.E_FAIL;
}
}
// send data to client.
SendCallback(transaction.TransactionId, transaction.TransationType, transaction.Requests);
}
catch (Exception e)
{
Utils.Trace(e, "Unexpected error updating history.");
}
finally
{
// remove transaction.
lock (Lock)
{
m_transactions.Remove(transaction.CancelId);
}
}
}