Class: OPCUA::Server::TypeTopNode

Inherits:
Node
  • Object
show all
Defined in:
ext/opcua/server/server.c

Instance Method Summary collapse

Methods inherited from Node

#description, #description=, #exists?, #id, #name, #to_s

Instance Method Details

#add_object_type(name) ⇒ Object

{{{



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'ext/opcua/server/server.c', line 71

static VALUE node_add_object_type(VALUE self, VALUE name) { //{{{
  node_struct *ns;

  Data_Get_Struct(self, node_struct, ns);
  if (!ns->exists) rb_raise(rb_eRuntimeError, "Node does not exist anymore.");

  VALUE str = rb_obj_as_string(name);
  if (NIL_P(str) || TYPE(str) != T_STRING)
    rb_raise(rb_eTypeError, "cannot convert obj to string");
  char *nstr = (char *)StringValuePtr(str);

  UA_NodeId n = UA_NODEID_NUMERIC(ns->master->default_ns, nodecounter++);

  UA_ObjectTypeAttributes dtAttr = UA_ObjectTypeAttributes_default;
                          dtAttr.displayName = UA_LOCALIZEDTEXT("en-US", nstr);
  UA_Server_addObjectTypeNode(ns->master->master,
                              n,
                              ns->id,
                              UA_NODEID_NUMERIC(0, UA_NS0ID_HASSUBTYPE),
                              UA_QUALIFIEDNAME(ns->master->default_ns, nstr),
                              dtAttr,
                              NULL,
                              NULL);

  return node_wrap(cTypeSubNode,node_alloc(ns->master,n));
}

#add_reference_type(name, type) ⇒ Object

{{{



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'ext/opcua/server/server.c', line 97

static VALUE node_add_reference_type(VALUE self, VALUE name, VALUE type) { //{{{
  node_struct *ns;

  Data_Get_Struct(self, node_struct, ns);
  if (!ns->exists) rb_raise(rb_eRuntimeError, "Node does not exist anymore.");

  VALUE str = rb_obj_as_string(name);
  if (NIL_P(str) || TYPE(str) != T_STRING)
    rb_raise(rb_eTypeError, "cannot convert arg 1 to string");
  char *nstr = (char *)StringValuePtr(str);
  if (TYPE(type) != T_FIXNUM)
    rb_raise(rb_eTypeError, "cannot convert arg 2 to integer");

  UA_NodeId n = UA_NODEID_NUMERIC(ns->master->default_ns, nodecounter++);

  UA_ReferenceTypeAttributes rtAttr = UA_ReferenceTypeAttributes_default;
                             rtAttr.displayName = UA_LOCALIZEDTEXT("en-US", nstr);
  UA_Server_addReferenceTypeNode(ns->master->master,
                                 n,
                                 ns->id,
                                 UA_NODEID_NUMERIC(0, NUM2INT(type)),
                                 UA_QUALIFIEDNAME(ns->master->default_ns, nstr),
                                 rtAttr,
                                 NULL,
                                 NULL);

  return node_wrap(cReferenceSubNode,node_alloc(ns->master,n));
}

#folderObject

{{{



65
66
67
68
69
70
# File 'ext/opcua/server/server.c', line 65

static VALUE node_type_folder(VALUE self) { //{{{
  node_struct *ns;
  Data_Get_Struct(self, node_struct, ns);
  if (!ns->exists) rb_raise(rb_eRuntimeError, "Node does not exist anymore.");
  return node_wrap(cTypeTopNode, node_alloc(ns->master, UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE)));
}