Class: OPCUA::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/opcua/client.rb,
ext/opcua/client/client.c

Defined Under Namespace

Classes: cMethodNode, cNode, cVarNode

Instance Method Summary collapse

Constructor Details

#initialize(url, user, pass) ⇒ Object

{{{



223
224
225
226
227
228
229
# File 'ext/opcua/client/client.c', line 223

def initialize(url)
  if url =~ /(^[^:]+):\/\/([^:]+):([^@]+)@(.*)$/
    initialize_base("#{$1}://#{$4}",$2,$3)
  else
    initialize_base(url,nil,nil)
  end
end

Instance Method Details

#check_subscriptionObject

{{{



607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
# File 'ext/opcua/client/client.c', line 607

static VALUE client_run(VALUE self) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  if (!pss->subrun) {
    pss->subrun = true;
    pss->subscription_response = UA_Client_Subscriptions_create(pss->master, pss->subscription_request, NULL, NULL, NULL);
    if (pss->subscription_response.responseHeader.serviceResult != UA_STATUSCODE_GOOD)
      rb_raise(rb_eRuntimeError, "Subscription could not be created.");
  }
  while (RARRAY_LEN(pss->subs)>0) {
    VALUE aentry = rb_ary_pop(pss->subs);
    client_run_iterate(aentry);
  }
  UA_Client_run_iterate(pss->master, 100);

  return self;
}

#debugObject

{{{



419
420
421
422
423
424
425
# File 'ext/opcua/client/client.c', line 419

static VALUE client_debug(VALUE self) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  return (pss->debug) ? Qtrue : Qfalse;
}

#debug=(val) ⇒ Object

{{{



426
427
428
429
430
431
432
433
434
435
436
437
438
439
# File 'ext/opcua/client/client.c', line 426

static VALUE client_debug_set(VALUE self, VALUE val) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  if (val == Qtrue) {
    pss->config->logger = UA_Log_Stdout_;
    pss->debug = Qtrue;
  } else {
    pss->config->logger = UA_Log_None_;
    pss->debug = Qfalse;
  }
  return self;
}

#default_nsObject

{{{



401
402
403
404
405
406
407
# File 'ext/opcua/client/client.c', line 401

static VALUE client_default_ns(VALUE self) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  return UINT2NUM(pss->default_ns);
}

#default_ns=(val) ⇒ Object

{{{



408
409
410
411
412
413
414
415
416
417
418
# File 'ext/opcua/client/client.c', line 408

static VALUE client_default_ns_set(VALUE self, VALUE val) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  if (NIL_P(val) || TYPE(val) != T_FIXNUM)
    rb_raise(rb_eTypeError, "subscription interval is not an integer");

  pss->default_ns = NUM2UINT(val);
  return self;
}

#disconnectObject

{{{



626
627
628
629
630
631
632
633
634
635
636
637
638
639
# File 'ext/opcua/client/client.c', line 626

static VALUE client_disconnect(VALUE self) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  if (pss->subrun) {
    // do we need to delete the individual monResponse (#UA_MonitoredItemCreateResult_clear)?
    UA_Client_Subscriptions_deleteSingle(pss->master,pss->subscription_response.subscriptionId);
  }
  UA_Client_disconnect(pss->master);
  pss->started = false;

  return self;
}

#get(*args) ⇒ Object

{{{



331
332
333
334
335
336
337
338
339
# File 'ext/opcua/client/client.c', line 331

def get(*a)
  if a.length == 1 && a[0].to_s =~ /ns=(\d+);i=(.*)/
    get_base $1.to_i, $2.to_i
  elsif a.length == 1 && a[0].to_s =~ /ns=(\d+);s=(.*)/
    get_base $1.to_i, $2
  else
    get_base *a
  end
end

#get_baseObject



11
# File 'lib/opcua/client.rb', line 11

alias_method :get_base, :get

#initialize_baseObject



10
# File 'lib/opcua/client.rb', line 10

alias_method :initialize_base, :initialize

#namespacesObject

{{{



441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
# File 'ext/opcua/client/client.c', line 441

static VALUE client_namespaces(VALUE self) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  UA_Variant value;
  UA_Variant_init(&value);
  UA_StatusCode retval = UA_Client_readValueAttribute(pss->master, UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_NAMESPACEARRAY), &value);

  VALUE ret = Qnil;
  if (retval == UA_STATUSCODE_GOOD) {
    ret = extract_value(value);
  }

  UA_Variant_clear(&value);
  RB_OBJ_FREEZE(ret);
  return rb_ary_entry(ret,0);
}

#subscription_intervalObject

{{{



383
384
385
386
387
388
389
# File 'ext/opcua/client/client.c', line 383

static VALUE client_subscription_interval(VALUE self) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  return UINT2NUM(pss->subscription_request.requestedPublishingInterval);
}

#subscription_interval=(val) ⇒ Object

{{{



390
391
392
393
394
395
396
397
398
399
400
# File 'ext/opcua/client/client.c', line 390

static VALUE client_subscription_interval_set(VALUE self, VALUE val) { //{{{
  client_struct *pss;
  Data_Get_Struct(self, client_struct, pss);
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");

  if (NIL_P(val) || TYPE(val) != T_FIXNUM)
    rb_raise(rb_eTypeError, "subscription interval is not an integer");

  pss->subscription_request.requestedPublishingInterval = NUM2UINT(val);
  return self;
}