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

{{{



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

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

Instance Method Details

#check_subscriptionObject

{{{



591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
# File 'ext/opcua/client/client.c', line 591

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->firstrun) {
    pss->firstrun = false;
    pss->subs_changed = false;
    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.");

    for (int i = 0; i < RARRAY_LEN(pss->subs); i++) {
      client_run_iterate(rb_ary_entry(pss->subs,i));
    }
  }
  UA_Client_run_iterate(pss->master, 100);

  return self;
}

#debugObject

{{{



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

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

{{{



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

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

{{{



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

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

{{{



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

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

{{{



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

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->firstrun) {
    // 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

{{{



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

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

{{{



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

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

{{{



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

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

{{{



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

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;
}