Create an event based on an event type. Per default is BaseEventType used. Object members are dynamically created from the base event type and send to client when event is triggered (see example code in source) Arguments to constructor are: server: The InternalSession obje
| 11 | |
| 12 | |
| 13 | class EventGenerator(object): |
| 14 | |
| 15 | """ |
| 16 | Create an event based on an event type. Per default is BaseEventType used. |
| 17 | Object members are dynamically created from the base event type and send to |
| 18 | client when event is triggered (see example code in source) |
| 19 | |
| 20 | Arguments to constructor are: |
| 21 | |
| 22 | server: The InternalSession object to use for query and event triggering |
| 23 | |
| 24 | source: The emiting source for the node, either an objectId, NodeId or a Node |
| 25 | |
| 26 | etype: The event type, either an objectId, a NodeId or a Node object |
| 27 | """ |
| 28 | |
| 29 | def __init__(self, isession, etype=None, emitting_node=ua.ObjectIds.Server): |
| 30 | if not etype: |
| 31 | etype = event_objects.BaseEvent() |
| 32 | |
| 33 | self.logger = logging.getLogger(__name__) |
| 34 | self.isession = isession |
| 35 | self.event = None |
| 36 | node = None |
| 37 | |
| 38 | if isinstance(etype, event_objects.BaseEvent): |
| 39 | self.event = etype |
| 40 | elif isinstance(etype, Node): |
| 41 | node = etype |
| 42 | elif isinstance(etype, ua.NodeId): |
| 43 | node = Node(self.isession, etype) |
| 44 | else: |
| 45 | node = Node(self.isession, ua.NodeId(etype)) |
| 46 | |
| 47 | if node: |
| 48 | self.event = events.get_event_obj_from_type_node(node) |
| 49 | |
| 50 | if isinstance(emitting_node, Node): |
| 51 | pass |
| 52 | elif isinstance(emitting_node, ua.NodeId): |
| 53 | emitting_node = Node(isession, emitting_node) |
| 54 | else: |
| 55 | emitting_node = Node(isession, ua.NodeId(emitting_node)) |
| 56 | |
| 57 | self.event.emitting_node = emitting_node.nodeid |
| 58 | |
| 59 | if not self.event.SourceNode: |
| 60 | self.event.SourceNode = emitting_node.nodeid |
| 61 | self.event.SourceName = emitting_node.get_browse_name().Name |
| 62 | |
| 63 | emitting_node.set_event_notifier([ua.EventNotifier.SubscribeToEvents]) |
| 64 | refs = [] |
| 65 | ref = ua.AddReferencesItem() |
| 66 | ref.IsForward = True |
| 67 | ref.ReferenceTypeId = ua.NodeId(ua.ObjectIds.GeneratesEvent) |
| 68 | ref.SourceNodeId = emitting_node.nodeid |
| 69 | ref.TargetNodeClass = ua.NodeClass.ObjectType |
| 70 | ref.TargetNodeId = self.event.EventType |