public void CreateServerDiagnostics(
ServerSystemContext systemContext,
ServerDiagnosticsSummaryDataType diagnostics,
NodeValueSimpleEventHandler updateCallback)
{
lock (Lock)
{
// get the node.
ServerDiagnosticsSummaryState diagnosticsNode = (ServerDiagnosticsSummaryState)FindPredefinedNode(
VariableIds.Server_ServerDiagnostics_ServerDiagnosticsSummary,
typeof(ServerDiagnosticsSummaryState));
// wrap diagnostics in a thread safe object.
ServerDiagnosticsSummaryValue diagnosticsValue = new ServerDiagnosticsSummaryValue(
diagnosticsNode,
diagnostics,
Lock);
// must ensure the first update gets sent.
diagnosticsValue.Value = null;
diagnosticsValue.Error = StatusCodes.BadWaitingForInitialData;
diagnosticsValue.CopyPolicy = Opc.Ua.VariableCopyPolicy.Never;
diagnosticsValue.OnBeforeRead = OnBeforeReadDiagnostics;
m_serverDiagnostics = diagnosticsValue;
m_serverDiagnosticsCallback = updateCallback;
// set up handler for session diagnostics array.
SessionDiagnosticsArrayState array1 = (SessionDiagnosticsArrayState)FindPredefinedNode(
VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,
typeof(SessionDiagnosticsArrayState));
if (array1 != null)
{
array1.OnSimpleReadValue = OnReadDiagnosticsArray;
}
// set up handler for session security diagnostics array.
SessionSecurityDiagnosticsArrayState array2 = (SessionSecurityDiagnosticsArrayState)FindPredefinedNode(
VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,
typeof(SessionSecurityDiagnosticsArrayState));
if (array2 != null)
{
array2.OnSimpleReadValue = OnReadDiagnosticsArray;
}
// set up handler for subscription security diagnostics array.
SubscriptionDiagnosticsArrayState array3 = (SubscriptionDiagnosticsArrayState)FindPredefinedNode(
VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray,
typeof(SubscriptionDiagnosticsArrayState));
if (array3 != null)
{
array3.OnSimpleReadValue = OnReadDiagnosticsArray;
}
// send initial update.
DoScan(true);
}
}