private bool UpdateSessionSecurityDiagnostics(
SessionDiagnosticsData diagnostics,
SessionSecurityDiagnosticsDataType[] sessionArray,
int index)
{
// get the latest snapshot.
object value = null;
ServiceResult result = diagnostics.SecurityUpdateCallback(
SystemContext,
diagnostics.SecurityValue.Variable,
ref value);
SessionSecurityDiagnosticsDataType newValue = value as SessionSecurityDiagnosticsDataType;
sessionArray[index] = newValue;
// check for changes.
if (Utils.IsEqual(newValue, diagnostics.SecurityValue.Value))
{
return false;
}
diagnostics.SecurityValue.Error = null;
// check for bad value.
if (ServiceResult.IsNotBad(result) && newValue == null)
{
result = StatusCodes.BadOutOfService;
}
// check for bad result.
if (ServiceResult.IsBad(result))
{
diagnostics.SecurityValue.Error = result;
newValue = null;
}
// update the value.
diagnostics.SecurityValue.Value = newValue;
diagnostics.SecurityValue.Timestamp = DateTime.UtcNow;
// notify any monitored items.
diagnostics.SecurityValue.ChangesComplete(SystemContext);
return true;
}