/// <summary> /// Updates the base event. /// </summary> private void UpdateBaseEvent(BaseEventState instance, EventType eventType, ONEVENTSTRUCT e) { BinaryEncoder encoder = new BinaryEncoder(ServiceMessageContext.GlobalContext); encoder.WriteString(null, e.szSource); encoder.WriteString(null, e.szConditionName); encoder.WriteInt32(null, e.ftActiveTime.dwHighDateTime); encoder.WriteInt32(null, e.ftActiveTime.dwLowDateTime); encoder.WriteInt32(null, e.dwCookie); byte[] eventId = encoder.CloseAndReturnBuffer(); NodeId eventTypeId = AeParsedNodeId.Construct(e.dwEventType, e.dwEventCategory, e.szConditionName, m_namespaceIndex); NodeId sourceNode = AeModelUtils.ConstructIdForSource(e.szSource, null, m_namespaceIndex); string sourceName = e.szSource; DateTime time = ComUtils.GetDateTime(e.ftTime); DateTime receiveTime = DateTime.UtcNow; LocalizedText message = e.szMessage; ushort severity = (ushort)e.dwSeverity; instance.TypeDefinitionId = eventTypeId; instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.EventId, eventId, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.EventType, eventTypeId, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.SourceNode, sourceNode, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.SourceName, sourceName, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.Time, time, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.ReceiveTime, receiveTime, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.Message, message, false); instance.SetChildValue(m_defaultContext, Opc.Ua.BrowseNames.Severity, severity, false); }
/// <summary> /// Initializes a new instance of the <see cref="AeAreaState"/> class. /// </summary> /// <param name="context">The context.</param> /// <param name="qualifiedName">The qualified name for the area.</param> /// <param name="name">The name of the area.</param> /// <param name="namespaceIndex">Index of the namespace.</param> public AeAreaState( ISystemContext context, string qualifiedName, string name, ushort namespaceIndex) : base(null) { m_qualifiedName = qualifiedName; this.SymbolicName = name; this.TypeDefinitionId = Opc.Ua.ObjectTypeIds.FolderType; this.NodeId = AeModelUtils.ConstructIdForArea(qualifiedName, namespaceIndex); this.BrowseName = new QualifiedName(name, namespaceIndex); this.DisplayName = this.BrowseName.Name; this.Description = null; this.WriteMask = 0; this.UserWriteMask = 0; this.EventNotifier = EventNotifiers.SubscribeToEvents; }
/// <summary> /// Initializes a new instance of the <see cref="AeSourceState"/> class. /// </summary> /// <param name="context">The context.</param> /// <param name="areaId">The area id.</param> /// <param name="qualifiedName">The qualified name for the source.</param> /// <param name="name">The name of the source.</param> /// <param name="namespaceIndex">Index of the namespace.</param> public AeSourceState( ISystemContext context, string areaId, string qualifiedName, string name, ushort namespaceIndex) : base(null) { m_areaId = areaId; m_qualifiedName = qualifiedName; this.TypeDefinitionId = Opc.Ua.ObjectTypeIds.BaseObjectType; this.NodeId = AeModelUtils.ConstructIdForSource(m_areaId, name, namespaceIndex); this.BrowseName = new QualifiedName(name, namespaceIndex); this.DisplayName = this.BrowseName.Name; this.Description = null; this.WriteMask = 0; this.UserWriteMask = 0; this.EventNotifier = EventNotifiers.None; this.AddReference(ReferenceTypeIds.HasNotifier, true, AeModelUtils.ConstructIdForArea(m_areaId, namespaceIndex)); }
/// <summary> /// Does any initialization required before the address space can be used. /// </summary> /// <remarks> /// The externalReferences is an out parameter that allows the node manager to link to nodes /// in other node managers. For example, the 'Objects' node is managed by the CoreNodeManager and /// should have a reference to the root folder node(s) exposed by this node manager. /// </remarks> public override void CreateAddressSpace(IDictionary <NodeId, IList <IReference> > externalReferences) { lock (Lock) { // check if the type model needs to be loaded. if (NamespaceIndexes.Length > 1) { LoadPredefinedNodes(SystemContext, externalReferences); } IList <IReference> references = null; // create the root node. string serverName = m_configuration.ServerName; if (String.IsNullOrEmpty(serverName)) { serverName = "ComAeServer"; } AeAreaState root = new AeAreaState(SystemContext, String.Empty, serverName, NamespaceIndex); root.AddReference(ReferenceTypeIds.Organizes, true, ObjectIds.ObjectsFolder); // link root to objects folder. if (!externalReferences.TryGetValue(ObjectIds.ObjectsFolder, out references)) { externalReferences[ObjectIds.ObjectsFolder] = references = new List <IReference>(); } references.Add(new NodeStateReference(ReferenceTypeIds.Organizes, false, root.NodeId)); // link root to server object. if (!externalReferences.TryGetValue(ObjectIds.Server, out references)) { externalReferences[ObjectIds.Server] = references = new List <IReference>(); } references.Add(new NodeStateReference(ReferenceTypeIds.HasNotifier, false, root.NodeId)); // create the status node. ComServerStatusState status = new ComServerStatusState(root); status.ReferenceTypeId = ReferenceTypeIds.Organizes; // get the type namepace for the browse name. int typeNamepaceIndex = Server.NamespaceUris.GetIndex(Namespaces.ComInterop); if (typeNamepaceIndex < 0) { typeNamepaceIndex = NamespaceIndex; } status.Create( SystemContext, AeModelUtils.ConstructIdForInternalNode("ServerStatus", NamespaceIndex), new QualifiedName("ServerStatus", (ushort)typeNamepaceIndex), null, true); root.AddChild(status); // store root folder in the pre-defined nodes. AddPredefinedNode(SystemContext, root); AddRootNotifier(root); // create the COM server. m_system.Initialize(SystemContext, m_configuration, status, Lock, OnServerReconnected); // create a template condition that can be used to initialize static metadata. m_templateAlarm = new AlarmConditionState(null); m_templateAlarm.SymbolicName = "TemplateAlarm"; m_templateAlarm.Create( SystemContext, null, new QualifiedName(m_templateAlarm.SymbolicName, NamespaceIndex), null, false); m_templateAlarm.Acknowledge.OnCall = OnAcknowledge; StartMetadataUpdates(DoMetadataUpdate, null, 5000, m_configuration.MaxReconnectWait); } }