datawire_mdk 2.0.15 → 2.0.16

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mdk.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Quark 1.0.443 run at 2016-10-05 18:08:41.189562
1
+ # Quark 1.0.452 run at 2016-10-13 16:26:58.627837
2
2
  module Quark
3
3
  require "quark"
4
4
  def self.mdk; Mdk; end
@@ -8,12 +8,13 @@ require_relative 'quark/reflect' # 0 ('quark',) ()
8
8
  require_relative 'mdk_runtime' # 0 () ()
9
9
  require_relative 'mdk_discovery' # 0 () ()
10
10
  require_relative 'quark' # 0 () ()
11
+ require_relative 'mdk_protocol' # 0 () ()
11
12
  require_relative 'mdk_tracing' # 0 () ()
12
13
  require_relative 'quark/concurrent' # 0 ('quark',) ()
13
14
  require_relative 'mdk_introspection' # 0 () ()
14
15
  require_relative 'mdk_discovery/protocol' # 0 ('mdk_discovery',) ()
15
16
  require_relative 'mdk_discovery/synapse' # 0 ('mdk_discovery',) ()
16
- require_relative 'mdk_protocol' # 0 () ()
17
+ require_relative 'mdk_rtp' # 0 () ()
17
18
  require_relative 'mdk_runtime/promise' # 0 ('mdk_runtime',) ()
18
19
  require_relative 'mdk_util' # 0 () ()
19
20
 
@@ -123,6 +124,19 @@ class MDK < ::DatawireQuarkCore::QuarkObject
123
124
  nil
124
125
  end
125
126
 
127
+ ##
128
+ # Set the default timeout for MDK sessions.
129
+ #
130
+ # This is the maximum timeout; if a joined session has a lower
131
+ # timeout that will be used.
132
+ #
133
+
134
+ def setDefaultTimeout(seconds)
135
+ raise NotImplementedError, '`MDK.setDefaultTimeout` is an abstract method'
136
+
137
+ nil
138
+ end
139
+
126
140
  ##
127
141
  # Creates a new Session. A Session created in this way will
128
142
  # result in a new distributed trace. This should therefore
@@ -312,6 +326,8 @@ class Session < ::DatawireQuarkCore::QuarkObject
312
326
  ##
313
327
  # Locate a compatible service instance.
314
328
  #
329
+ # Uses a minimum of 10 seconds and the timeout set on the session.
330
+ #
315
331
 
316
332
  def resolve(service, version)
317
333
  raise NotImplementedError, '`Session.resolve` is an abstract method'
@@ -402,6 +418,40 @@ class Session < ::DatawireQuarkCore::QuarkObject
402
418
  nil
403
419
  end
404
420
 
421
+ ##
422
+ # Set how many seconds the session is expected to live from this point.
423
+ #
424
+ # If a timeout has previously been set the new timeout will only be
425
+ # used if it is lower than the existing timeout.
426
+ #
427
+ # The MDK will not enforce the timeout. Rather, it provides the
428
+ # information to any process or server in the same session (even if
429
+ # they are on different machines). By passing this timeout to
430
+ # blocking APIs you can ensure timeouts are enforced across a whole
431
+ # distributed session.
432
+ #
433
+
434
+ def setTimeout(seconds)
435
+ raise NotImplementedError, '`Session.setTimeout` is an abstract method'
436
+
437
+ nil
438
+ end
439
+
440
+ ##
441
+ # Return how many seconds until the session ought to end.
442
+ #
443
+ # This will only be accurate across multiple servers insofar as their
444
+ # clocks are in sync.
445
+ #
446
+ # If a timeout has not been set the result will be null.
447
+ #
448
+
449
+ def getRemainingTime()
450
+ raise NotImplementedError, '`Session.getRemainingTime` is an abstract method'
451
+
452
+ nil
453
+ end
454
+
405
455
  def __init_fields__()
406
456
 
407
457
 
@@ -414,7 +464,7 @@ Session.unlazy_statics
414
464
 
415
465
  def self.MDKImpl; MDKImpl; end
416
466
  class MDKImpl < ::DatawireQuarkCore::QuarkObject
417
- attr_accessor :logger, :_reflection_hack, :_runtime, :_disco, :_discoSource, :_tracer, :procUUID, :_running
467
+ attr_accessor :logger, :_reflection_hack, :_runtime, :_wsclient, :_openclose, :_disco, :_discoSource, :_tracer, :procUUID, :_running, :_defaultTimeout
418
468
  extend ::DatawireQuarkCore::Static
419
469
 
420
470
  static mdk_MDKImpl_ref: -> { nil }
@@ -432,20 +482,18 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
432
482
  (runtime).dependencies.registerService("failurepolicy_factory", self.getFailurePolicy(runtime))
433
483
  end
434
484
  @_disco = ::Quark.mdk_discovery.Discovery.new(runtime)
485
+ @_wsclient = self.getWSClient(runtime)
486
+ if ((@_wsclient) != (nil))
487
+ @_openclose = ::Quark.mdk_protocol.OpenCloseSubscriber.new(@_wsclient)
488
+ end
435
489
  env = runtime.getEnvVarsService()
436
- token = env.var("DATAWIRE_TOKEN").orElseGet("")
437
490
  discoFactory = self.getDiscoveryFactory(env)
438
491
  @_discoSource = discoFactory.create(@_disco, runtime)
439
492
  if (discoFactory.isRegistrar())
440
493
  (runtime).dependencies.registerService("discovery_registrar", @_discoSource)
441
494
  end
442
- if ((token) != (""))
443
- tracingURL = ::Quark.mdk._get(env, "MDK_TRACING_URL", "wss://tracing.datawire.io/ws/v1")
444
- tracingQueryURL = ::Quark.mdk._get(env, "MDK_TRACING_API_URL", "https://tracing.datawire.io/api/v1/logs")
445
- @_tracer = ::Quark.mdk_tracing.Tracer.new(runtime)
446
- (@_tracer).url = tracingURL
447
- (@_tracer).queryURL = tracingQueryURL
448
- (@_tracer).token = token
495
+ if ((@_wsclient) != (nil))
496
+ @_tracer = ::Quark.mdk_tracing.Tracer.new(runtime, @_wsclient)
449
497
  @_tracer.initContext()
450
498
  end
451
499
 
@@ -466,7 +514,7 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
466
514
  end
467
515
  result = ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_discovery.DiscoverySourceFactory }
468
516
  if ((config).start_with?("datawire:"))
469
- result = ::Quark.mdk_discovery.protocol.DiscoClientFactory.new((config)[(9)...((config).size)])
517
+ result = ::Quark.mdk_discovery.protocol.DiscoClientFactory.new(@_wsclient)
470
518
  else
471
519
  if ((config).start_with?("synapse:path="))
472
520
  result = ::Quark.mdk_discovery.synapse.Synapse.new((config)[(13)...((config).size)])
@@ -499,6 +547,28 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
499
547
  nil
500
548
  end
501
549
 
550
+ ##
551
+ # Get a WSClient, unless env variables suggest the user doesn't want one.
552
+
553
+ def getWSClient(runtime)
554
+
555
+ env = runtime.getEnvVarsService()
556
+ token = env.var("DATAWIRE_TOKEN").orElseGet("")
557
+ disco_config = env.var("MDK_DISCOVERY_SOURCE").orElseGet("")
558
+ if ((token) == (""))
559
+ if ((disco_config).start_with?("datawire:"))
560
+ token = (disco_config)[(9)...((disco_config).size)]
561
+ else
562
+ return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.WSClient }
563
+ end
564
+ end
565
+ ddu = env.var("MDK_SERVER_URL")
566
+ url = ddu.orElseGet("wss://mcp.datawire.io/rtp")
567
+ return ::Quark.mdk_protocol.WSClient.new(runtime, ::Quark.mdk_rtp.getRTPParser(), url, token)
568
+
569
+ nil
570
+ end
571
+
502
572
  def _timeout()
503
573
 
504
574
  return 10.0
@@ -509,12 +579,13 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
509
579
  def start()
510
580
 
511
581
  (self)._running = true
582
+ if ((@_wsclient) != (nil))
583
+ (@_runtime).dispatcher.startActor(@_wsclient)
584
+ (@_runtime).dispatcher.startActor(@_openclose)
585
+ (@_runtime).dispatcher.startActor(@_tracer)
586
+ end
512
587
  (@_runtime).dispatcher.startActor(@_disco)
513
588
  (@_runtime).dispatcher.startActor(@_discoSource)
514
- if ((@_tracer) != (nil))
515
- @_tracer._openIfNeeded()
516
- (@_tracer)._client._startIfNeeded()
517
- end
518
589
 
519
590
  nil
520
591
  end
@@ -522,9 +593,13 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
522
593
  def stop()
523
594
 
524
595
  (self)._running = false
525
- (@_runtime).dispatcher.stopActor(@_disco)
526
596
  (@_runtime).dispatcher.stopActor(@_discoSource)
527
- @_tracer.stop()
597
+ (@_runtime).dispatcher.stopActor(@_disco)
598
+ if ((@_wsclient) != (nil))
599
+ (@_runtime).dispatcher.stopActor(@_tracer)
600
+ (@_runtime).dispatcher.stopActor(@_openclose)
601
+ (@_runtime).dispatcher.stopActor(@_wsclient)
602
+ end
528
603
  @_runtime.stop()
529
604
 
530
605
  nil
@@ -542,16 +617,31 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
542
617
  nil
543
618
  end
544
619
 
620
+ def setDefaultTimeout(seconds)
621
+
622
+ (self)._defaultTimeout = seconds
623
+
624
+ nil
625
+ end
626
+
545
627
  def session()
546
628
 
547
- return ::Quark.mdk.SessionImpl.new(self, nil)
629
+ session = ::Quark.mdk.SessionImpl.new(self, nil)
630
+ if ((@_defaultTimeout) != (nil))
631
+ session.setTimeout(@_defaultTimeout)
632
+ end
633
+ return session
548
634
 
549
635
  nil
550
636
  end
551
637
 
552
638
  def join(encodedContext)
553
639
 
554
- return ::Quark.mdk.SessionImpl.new(self, encodedContext)
640
+ session = ::Quark.mdk.SessionImpl.new(self, encodedContext)
641
+ if ((@_defaultTimeout) != (nil))
642
+ session.setTimeout(@_defaultTimeout)
643
+ end
644
+ return session
555
645
 
556
646
  nil
557
647
  end
@@ -577,6 +667,12 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
577
667
  if ((name) == ("_runtime"))
578
668
  return (self)._runtime
579
669
  end
670
+ if ((name) == ("_wsclient"))
671
+ return (self)._wsclient
672
+ end
673
+ if ((name) == ("_openclose"))
674
+ return (self)._openclose
675
+ end
580
676
  if ((name) == ("_disco"))
581
677
  return (self)._disco
582
678
  end
@@ -592,6 +688,9 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
592
688
  if ((name) == ("_running"))
593
689
  return (self)._running
594
690
  end
691
+ if ((name) == ("_defaultTimeout"))
692
+ return (self)._defaultTimeout
693
+ end
595
694
  return nil
596
695
 
597
696
  nil
@@ -608,6 +707,12 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
608
707
  if ((name) == ("_runtime"))
609
708
  (self)._runtime = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.MDKRuntime }
610
709
  end
710
+ if ((name) == ("_wsclient"))
711
+ (self)._wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
712
+ end
713
+ if ((name) == ("_openclose"))
714
+ (self)._openclose = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.OpenCloseSubscriber }
715
+ end
611
716
  if ((name) == ("_disco"))
612
717
  (self)._disco = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Discovery }
613
718
  end
@@ -623,6 +728,9 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
623
728
  if ((name) == ("_running"))
624
729
  (self)._running = ::DatawireQuarkCore.cast(value) { ::Object }
625
730
  end
731
+ if ((name) == ("_defaultTimeout"))
732
+ (self)._defaultTimeout = ::DatawireQuarkCore.cast(value) { ::Float }
733
+ end
626
734
 
627
735
  nil
628
736
  end
@@ -632,11 +740,14 @@ class MDKImpl < ::DatawireQuarkCore::QuarkObject
632
740
  self.logger = ::Quark.quark._getLogger("mdk")
633
741
  self._reflection_hack = nil
634
742
  self._runtime = nil
743
+ self._wsclient = nil
744
+ self._openclose = nil
635
745
  self._disco = nil
636
746
  self._discoSource = nil
637
747
  self._tracer = nil
638
748
  self.procUUID = ::Quark.quark.concurrent.Context.runtime().uuid()
639
749
  self._running = false
750
+ self._defaultTimeout = nil
640
751
 
641
752
  nil
642
753
  end
@@ -758,6 +869,31 @@ class SessionImpl < ::DatawireQuarkCore::QuarkObject
758
869
  nil
759
870
  end
760
871
 
872
+ def setTimeout(timeout)
873
+
874
+ current = self.getRemainingTime()
875
+ if ((current) == (nil))
876
+ current = timeout
877
+ end
878
+ if ((timeout) > (current))
879
+ timeout = current
880
+ end
881
+ self.set("timeout", ((@_mdk)._runtime.getTimeService().time()) + (timeout))
882
+
883
+ nil
884
+ end
885
+
886
+ def getRemainingTime()
887
+
888
+ deadline = ::DatawireQuarkCore.cast(self.get("timeout")) { ::Float }
889
+ if ((deadline) == (nil))
890
+ return ::DatawireQuarkCore.cast(nil) { ::Float }
891
+ end
892
+ return (deadline) - ((@_mdk)._runtime.getTimeService().time())
893
+
894
+ nil
895
+ end
896
+
761
897
  def route(service, version, target, targetVersion)
762
898
 
763
899
  routes = nil
@@ -900,7 +1036,12 @@ class SessionImpl < ::DatawireQuarkCore::QuarkObject
900
1036
 
901
1037
  def resolve(service, version)
902
1038
 
903
- return self.resolve_until(service, version, @_mdk._timeout())
1039
+ timeout = @_mdk._timeout()
1040
+ session_timeout = self.getRemainingTime()
1041
+ if (((session_timeout) != (nil)) && ((session_timeout) < (timeout)))
1042
+ timeout = session_timeout
1043
+ end
1044
+ return self.resolve_until(service, version, timeout)
904
1045
 
905
1046
  nil
906
1047
  end
data/lib/mdk_discovery.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Quark 1.0.443 run at 2016-10-05 18:08:41.189562
1
+ # Quark 1.0.452 run at 2016-10-13 16:26:58.627837
2
2
  module Quark
3
3
  require "quark"
4
4
  def self.mdk_discovery; MdkDiscovery; end
@@ -1,4 +1,4 @@
1
- # Quark 1.0.443 run at 2016-10-05 18:08:41.189562
1
+ # Quark 1.0.452 run at 2016-10-13 16:26:58.627837
2
2
  module Quark
3
3
  require "quark"
4
4
  def self.mdk_discovery; MdkDiscovery; end
@@ -8,9 +8,9 @@ module Protocol
8
8
  require "datawire-quark-core"
9
9
  require_relative '../quark/reflect' # 0 ('quark',) ('mdk_discovery',)
10
10
  require_relative '../mdk_discovery' # 0 () ('mdk_discovery',)
11
+ require_relative '../mdk_protocol' # 0 () ('mdk_discovery',)
11
12
  require_relative '../mdk_runtime/actors' # 0 ('mdk_runtime',) ('mdk_discovery',)
12
13
  require_relative '../mdk_runtime' # 0 () ('mdk_discovery',)
13
- require_relative '../mdk_protocol' # 0 () ('mdk_discovery',)
14
14
  require_relative '../quark' # 0 () ('mdk_discovery',)
15
15
 
16
16
 
@@ -21,17 +21,17 @@ def self.DiscoClientFactory; DiscoClientFactory; end
21
21
  #
22
22
 
23
23
  class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
24
- attr_accessor :token
24
+ attr_accessor :wsclient
25
25
  extend ::DatawireQuarkCore::Static
26
26
 
27
27
  static mdk_discovery_protocol_DiscoClientFactory_ref: -> { nil }
28
28
 
29
29
 
30
30
 
31
- def initialize(token)
31
+ def initialize(wsclient)
32
32
 
33
33
  self.__init_fields__
34
- (self).token = token
34
+ (self).wsclient = wsclient
35
35
 
36
36
  nil
37
37
  end
@@ -41,9 +41,7 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
41
41
 
42
42
  def create(subscriber, runtime)
43
43
 
44
- ddu = runtime.getEnvVarsService().var("MDK_DISCOVERY_URL")
45
- url = ddu.orElseGet("wss://discovery.datawire.io/ws/v1")
46
- return ::Quark.mdk_discovery.protocol.DiscoClient.new(subscriber, @token, url, runtime)
44
+ return ::Quark.mdk_discovery.protocol.DiscoClient.new(subscriber, @wsclient, runtime)
47
45
 
48
46
  nil
49
47
  end
@@ -64,8 +62,8 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
64
62
 
65
63
  def _getField(name)
66
64
 
67
- if ((name) == ("token"))
68
- return (self).token
65
+ if ((name) == ("wsclient"))
66
+ return (self).wsclient
69
67
  end
70
68
  return nil
71
69
 
@@ -74,8 +72,8 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
74
72
 
75
73
  def _setField(name, value)
76
74
 
77
- if ((name) == ("token"))
78
- (self).token = ::DatawireQuarkCore.cast(value) { ::String }
75
+ if ((name) == ("wsclient"))
76
+ (self).wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
79
77
  end
80
78
 
81
79
  nil
@@ -83,7 +81,7 @@ class DiscoClientFactory < ::DatawireQuarkCore::QuarkObject
83
81
 
84
82
  def __init_fields__()
85
83
 
86
- self.token = nil
84
+ self.wsclient = nil
87
85
 
88
86
  nil
89
87
  end
@@ -99,21 +97,22 @@ def self.DiscoClient; DiscoClient; end
99
97
  # Also supports registering discovery information with the server.
100
98
  #
101
99
 
102
- class DiscoClient < ::Quark.mdk_protocol.WSClient
103
- attr_accessor :_started, :_token, :_url, :_failurePolicyFactory, :_dispatcher, :_subscriber, :registered, :dlog
100
+ class DiscoClient < ::DatawireQuarkCore::QuarkObject
101
+ attr_accessor :_failurePolicyFactory, :_dispatcher, :_timeService, :_subscriber, :_wsclient, :registered, :dlog, :lastHeartbeat, :sock
104
102
  extend ::DatawireQuarkCore::Static
105
103
 
106
104
  static mdk_discovery_protocol_DiscoClient_ref: -> { nil }
107
105
 
108
106
 
109
107
 
110
- def initialize(subscriber, token, url, runtime)
108
+ def initialize(disco_subscriber, wsclient, runtime)
111
109
 
112
- super(runtime)
113
- (self)._subscriber = subscriber
110
+ self.__init_fields__
111
+ (self)._subscriber = disco_subscriber
112
+ (self)._wsclient = wsclient
113
+ (self)._wsclient.subscribe(self)
114
114
  (self)._failurePolicyFactory = ::DatawireQuarkCore.cast((runtime).dependencies.getService("failurepolicy_factory")) { ::Quark.mdk_discovery.FailurePolicyFactory }
115
- (self)._token = token
116
- (self)._url = url
115
+ (self)._timeService = runtime.getTimeService()
117
116
 
118
117
  nil
119
118
  end
@@ -124,49 +123,63 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
124
123
  def onStart(dispatcher)
125
124
 
126
125
  (self)._dispatcher = dispatcher
127
- (self)._started = true
128
- method(:onStart).super_method.call(dispatcher)
129
126
 
130
127
  nil
131
128
  end
132
129
 
133
130
  def onStop()
134
131
 
135
- (self)._started = false
136
- method(:onStop).super_method.call()
132
+ self.shutdown()
137
133
 
138
134
  nil
139
135
  end
140
136
 
141
137
  def onMessage(origin, message)
142
138
 
143
- if (((::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id) == ("mdk_discovery.RegisterNode"))
139
+ klass = (::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id
140
+ if ((klass) == ("mdk_discovery.RegisterNode"))
144
141
  register = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_discovery.RegisterNode }
145
142
  self._register((register).node)
146
143
  return
147
144
  end
148
- method(:onMessage).super_method.call(origin, message)
145
+ ::Quark.mdk_protocol._subscriberDispatch(self, message)
149
146
 
150
147
  nil
151
148
  end
152
149
 
153
- def url()
150
+ def onMessageFromServer(message)
154
151
 
155
- return (self)._url
152
+ type = (::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id
153
+ if ((type) == ("mdk_discovery.protocol.Active"))
154
+ active = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_discovery.protocol.Active }
155
+ self.onActive(active)
156
+ return
157
+ end
158
+ if ((type) == ("mdk_discovery.protocol.Expire"))
159
+ expire = ::DatawireQuarkCore.cast(message) { ::Quark.mdk_discovery.protocol.Expire }
160
+ self.onExpire(expire)
161
+ return
162
+ end
156
163
 
157
164
  nil
158
165
  end
159
166
 
160
- def token()
167
+ def onWSConnected(websocket)
161
168
 
162
- return (self)._token
169
+ (self).sock = websocket
170
+ self.heartbeat()
163
171
 
164
172
  nil
165
173
  end
166
174
 
167
- def isStarted()
175
+ def onPump()
168
176
 
169
- return (self)._started
177
+ rightNow = (((self)._timeService.time()) * (1000.0)).round()
178
+ heartbeatInterval = (((((self)._wsclient).ttl) / (2.0)) * (1000.0)).round()
179
+ if (((rightNow) - ((self).lastHeartbeat)) >= (heartbeatInterval))
180
+ (self).lastHeartbeat = rightNow
181
+ self.heartbeat()
182
+ end
170
183
 
171
184
  nil
172
185
  end
@@ -181,7 +194,7 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
181
194
  (@registered)[service] = (::Quark.mdk_discovery.Cluster.new((self)._failurePolicyFactory))
182
195
  end
183
196
  (@registered)[service].add(node)
184
- if (self.isConnected())
197
+ if ((self)._wsclient.isConnected())
185
198
  self.active(node)
186
199
  end
187
200
 
@@ -192,8 +205,8 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
192
205
 
193
206
  active = ::Quark.mdk_discovery.protocol.Active.new()
194
207
  (active).node = node
195
- (active).ttl = (self).ttl
196
- (self).dispatcher.tell(self, active.encode(), (self).sock)
208
+ (active).ttl = ((self)._wsclient).ttl
209
+ (self)._dispatcher.tell(self, active.encode(), (self).sock)
197
210
  @dlog.info(("active ") + (node.toString()))
198
211
 
199
212
  nil
@@ -203,7 +216,7 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
203
216
 
204
217
  expire = ::Quark.mdk_discovery.protocol.Expire.new()
205
218
  (expire).node = node
206
- (self).dispatcher.tell(self, expire.encode(), (self).sock)
219
+ (self)._dispatcher.tell(self, expire.encode(), (self).sock)
207
220
  @dlog.info(("expire ") + (node.toString()))
208
221
 
209
222
  nil
@@ -230,19 +243,8 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
230
243
  nil
231
244
  end
232
245
 
233
- def onClear(reset)
234
-
235
- nil
236
-
237
- nil
238
- end
239
-
240
- def startup()
241
-
242
- self.heartbeat()
243
-
244
- nil
245
- end
246
+ ##
247
+ # Send all registered services.
246
248
 
247
249
  def heartbeat()
248
250
 
@@ -278,17 +280,6 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
278
280
  nil
279
281
  end
280
282
 
281
- def onWSMessage(message)
282
-
283
- event = ::Quark.mdk_discovery.protocol.DiscoveryEvent.decode(message)
284
- if ((event) == (nil))
285
- return
286
- end
287
- event.dispatch(self)
288
-
289
- nil
290
- end
291
-
292
283
  def _getClass()
293
284
 
294
285
  return "mdk_discovery.protocol.DiscoClient"
@@ -298,72 +289,33 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
298
289
 
299
290
  def _getField(name)
300
291
 
301
- if ((name) == ("logger"))
302
- return (self).logger
303
- end
304
- if ((name) == ("firstDelay"))
305
- return (self).firstDelay
306
- end
307
- if ((name) == ("maxDelay"))
308
- return (self).maxDelay
309
- end
310
- if ((name) == ("reconnectDelay"))
311
- return (self).reconnectDelay
312
- end
313
- if ((name) == ("ttl"))
314
- return (self).ttl
315
- end
316
- if ((name) == ("tick"))
317
- return (self).tick
318
- end
319
- if ((name) == ("sock"))
320
- return (self).sock
321
- end
322
- if ((name) == ("sockUrl"))
323
- return (self).sockUrl
324
- end
325
- if ((name) == ("lastConnectAttempt"))
326
- return (self).lastConnectAttempt
327
- end
328
- if ((name) == ("lastHeartbeat"))
329
- return (self).lastHeartbeat
330
- end
331
- if ((name) == ("timeService"))
332
- return (self).timeService
333
- end
334
- if ((name) == ("schedulingActor"))
335
- return (self).schedulingActor
336
- end
337
- if ((name) == ("websockets"))
338
- return (self).websockets
339
- end
340
- if ((name) == ("dispatcher"))
341
- return (self).dispatcher
342
- end
343
- if ((name) == ("_started"))
344
- return (self)._started
345
- end
346
- if ((name) == ("_token"))
347
- return (self)._token
348
- end
349
- if ((name) == ("_url"))
350
- return (self)._url
351
- end
352
292
  if ((name) == ("_failurePolicyFactory"))
353
293
  return (self)._failurePolicyFactory
354
294
  end
355
295
  if ((name) == ("_dispatcher"))
356
296
  return (self)._dispatcher
357
297
  end
298
+ if ((name) == ("_timeService"))
299
+ return (self)._timeService
300
+ end
358
301
  if ((name) == ("_subscriber"))
359
302
  return (self)._subscriber
360
303
  end
304
+ if ((name) == ("_wsclient"))
305
+ return (self)._wsclient
306
+ end
361
307
  if ((name) == ("registered"))
362
308
  return (self).registered
363
309
  end
364
310
  if ((name) == ("dlog"))
365
311
  return (self).dlog
366
312
  end
313
+ if ((name) == ("lastHeartbeat"))
314
+ return (self).lastHeartbeat
315
+ end
316
+ if ((name) == ("sock"))
317
+ return (self).sock
318
+ end
367
319
  return nil
368
320
 
369
321
  nil
@@ -371,87 +323,48 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
371
323
 
372
324
  def _setField(name, value)
373
325
 
374
- if ((name) == ("logger"))
375
- (self).logger = value
376
- end
377
- if ((name) == ("firstDelay"))
378
- (self).firstDelay = ::DatawireQuarkCore.cast(value) { ::Float }
379
- end
380
- if ((name) == ("maxDelay"))
381
- (self).maxDelay = ::DatawireQuarkCore.cast(value) { ::Float }
382
- end
383
- if ((name) == ("reconnectDelay"))
384
- (self).reconnectDelay = ::DatawireQuarkCore.cast(value) { ::Float }
385
- end
386
- if ((name) == ("ttl"))
387
- (self).ttl = ::DatawireQuarkCore.cast(value) { ::Float }
388
- end
389
- if ((name) == ("tick"))
390
- (self).tick = ::DatawireQuarkCore.cast(value) { ::Float }
391
- end
392
- if ((name) == ("sock"))
393
- (self).sock = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.WSActor }
394
- end
395
- if ((name) == ("sockUrl"))
396
- (self).sockUrl = ::DatawireQuarkCore.cast(value) { ::String }
397
- end
398
- if ((name) == ("lastConnectAttempt"))
399
- (self).lastConnectAttempt = ::DatawireQuarkCore.cast(value) { ::Integer }
400
- end
401
- if ((name) == ("lastHeartbeat"))
402
- (self).lastHeartbeat = ::DatawireQuarkCore.cast(value) { ::Integer }
403
- end
404
- if ((name) == ("timeService"))
405
- (self).timeService = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.Time }
406
- end
407
- if ((name) == ("schedulingActor"))
408
- (self).schedulingActor = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
409
- end
410
- if ((name) == ("websockets"))
411
- (self).websockets = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.WebSockets }
412
- end
413
- if ((name) == ("dispatcher"))
414
- (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
415
- end
416
- if ((name) == ("_started"))
417
- (self)._started = ::DatawireQuarkCore.cast(value) { ::Object }
418
- end
419
- if ((name) == ("_token"))
420
- (self)._token = ::DatawireQuarkCore.cast(value) { ::String }
421
- end
422
- if ((name) == ("_url"))
423
- (self)._url = ::DatawireQuarkCore.cast(value) { ::String }
424
- end
425
326
  if ((name) == ("_failurePolicyFactory"))
426
327
  (self)._failurePolicyFactory = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.FailurePolicyFactory }
427
328
  end
428
329
  if ((name) == ("_dispatcher"))
429
330
  (self)._dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
430
331
  end
332
+ if ((name) == ("_timeService"))
333
+ (self)._timeService = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.Time }
334
+ end
431
335
  if ((name) == ("_subscriber"))
432
336
  (self)._subscriber = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
433
337
  end
338
+ if ((name) == ("_wsclient"))
339
+ (self)._wsclient = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.WSClient }
340
+ end
434
341
  if ((name) == ("registered"))
435
342
  (self).registered = ::DatawireQuarkCore.cast(value) { ::Hash }
436
343
  end
437
344
  if ((name) == ("dlog"))
438
345
  (self).dlog = value
439
346
  end
347
+ if ((name) == ("lastHeartbeat"))
348
+ (self).lastHeartbeat = ::DatawireQuarkCore.cast(value) { ::Integer }
349
+ end
350
+ if ((name) == ("sock"))
351
+ (self).sock = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
352
+ end
440
353
 
441
354
  nil
442
355
  end
443
356
 
444
357
  def __init_fields__()
445
358
 
446
- super
447
- self._started = false
448
- self._token = nil
449
- self._url = nil
450
359
  self._failurePolicyFactory = nil
451
360
  self._dispatcher = nil
361
+ self._timeService = nil
452
362
  self._subscriber = nil
363
+ self._wsclient = nil
453
364
  self.registered = ::Hash.new()
454
365
  self.dlog = ::Quark.quark._getLogger("discovery")
366
+ self.lastHeartbeat = 0
367
+ self.sock = nil
455
368
 
456
369
  nil
457
370
  end
@@ -460,147 +373,12 @@ class DiscoClient < ::Quark.mdk_protocol.WSClient
460
373
  end
461
374
  DiscoClient.unlazy_statics
462
375
 
463
- def self.DiscoHandler; DiscoHandler; end
464
- class DiscoHandler < ::DatawireQuarkCore::QuarkObject
465
- extend ::DatawireQuarkCore::Static
466
-
467
- static mdk_discovery_protocol_DiscoHandler_ref: -> { nil }
468
-
469
-
470
-
471
- def initialize()
472
- self.__init_fields__
473
-
474
- nil
475
- end
476
-
477
-
478
-
479
-
480
- def onActive(active)
481
- raise NotImplementedError, '`DiscoHandler.onActive` is an abstract method'
482
-
483
- nil
484
- end
485
-
486
- def onExpire(expire)
487
- raise NotImplementedError, '`DiscoHandler.onExpire` is an abstract method'
488
-
489
- nil
490
- end
491
-
492
- def onClear(reset)
493
- raise NotImplementedError, '`DiscoHandler.onClear` is an abstract method'
494
-
495
- nil
496
- end
497
-
498
- def __init_fields__()
499
-
500
-
501
- nil
502
- end
503
-
504
-
505
- end
506
- DiscoHandler.unlazy_statics
507
-
508
- def self.DiscoveryEvent; DiscoveryEvent; end
509
- class DiscoveryEvent < ::Quark.mdk_protocol.ProtocolEvent
510
- extend ::DatawireQuarkCore::Static
511
-
512
- static mdk_discovery_protocol_DiscoveryEvent_ref: -> { nil }
513
-
514
-
515
-
516
- def initialize()
517
-
518
- super()
519
-
520
- nil
521
- end
522
-
523
-
524
-
525
-
526
- def self.construct(type)
527
-
528
- result = ::Quark.mdk_protocol.ProtocolEvent.construct(type)
529
- if ((result) != (nil))
530
- return result
531
- end
532
- if (::Quark.mdk_discovery.protocol.Active._discriminator.matches(type))
533
- return ::Quark.mdk_discovery.protocol.Active.new()
534
- end
535
- if (::Quark.mdk_discovery.protocol.Expire._discriminator.matches(type))
536
- return ::Quark.mdk_discovery.protocol.Expire.new()
537
- end
538
- if (::Quark.mdk_discovery.protocol.Clear._discriminator.matches(type))
539
- return ::Quark.mdk_discovery.protocol.Clear.new()
540
- end
541
- return ::DatawireQuarkCore.cast(nil) { ::Quark.mdk_protocol.ProtocolEvent }
542
-
543
- nil
544
- end
545
-
546
- def self.decode(message)
547
-
548
- return ::DatawireQuarkCore.cast(::Quark.mdk_protocol.Serializable.decodeClassName("mdk_discovery.protocol.DiscoveryEvent", message)) { ::Quark.mdk_protocol.ProtocolEvent }
549
-
550
- nil
551
- end
552
-
553
- def dispatch(handler)
554
-
555
- self.dispatchDiscoveryEvent(::DatawireQuarkCore.cast(handler) { ::Quark.mdk_discovery.protocol.DiscoHandler })
556
-
557
- nil
558
- end
559
-
560
- def dispatchDiscoveryEvent(handler)
561
- raise NotImplementedError, '`DiscoveryEvent.dispatchDiscoveryEvent` is an abstract method'
562
-
563
- nil
564
- end
565
-
566
- def _getClass()
567
-
568
- return "mdk_discovery.protocol.DiscoveryEvent"
569
-
570
- nil
571
- end
572
-
573
- def _getField(name)
574
-
575
- return nil
576
-
577
- nil
578
- end
579
-
580
- def _setField(name, value)
581
-
582
- nil
583
-
584
- nil
585
- end
586
-
587
- def __init_fields__()
588
-
589
- super
590
-
591
- nil
592
- end
593
-
594
-
595
- end
596
- DiscoveryEvent.unlazy_statics
597
-
598
376
  def self.Active; Active; end
599
- class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
377
+ class Active < ::Quark.mdk_protocol.Serializable
600
378
  attr_accessor :node, :ttl
601
379
  extend ::DatawireQuarkCore::Static
602
380
 
603
- static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["active", "discovery.protocol.Active"])) }
381
+ static _json_type: -> { "active" }
604
382
  static mdk_discovery_protocol_Active_ref: -> { nil }
605
383
 
606
384
 
@@ -615,13 +393,6 @@ class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
615
393
 
616
394
 
617
395
 
618
- def dispatchDiscoveryEvent(handler)
619
-
620
- handler.onActive(self)
621
-
622
- nil
623
- end
624
-
625
396
  def _getClass()
626
397
 
627
398
  return "mdk_discovery.protocol.Active"
@@ -631,8 +402,8 @@ class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
631
402
 
632
403
  def _getField(name)
633
404
 
634
- if ((name) == ("_discriminator"))
635
- return ::Quark.mdk_discovery.protocol.Active._discriminator
405
+ if ((name) == ("_json_type"))
406
+ return ::Quark.mdk_discovery.protocol.Active._json_type
636
407
  end
637
408
  if ((name) == ("node"))
638
409
  return (self).node
@@ -647,8 +418,8 @@ class Active < ::Quark.mdk_discovery.protocol.DiscoveryEvent
647
418
 
648
419
  def _setField(name, value)
649
420
 
650
- if ((name) == ("_discriminator"))
651
- ::Quark.mdk_discovery.protocol.Active._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
421
+ if ((name) == ("_json_type"))
422
+ ::Quark.mdk_discovery.protocol.Active._json_type = ::DatawireQuarkCore.cast(value) { ::String }
652
423
  end
653
424
  if ((name) == ("node"))
654
425
  (self).node = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Node }
@@ -677,11 +448,11 @@ def self.Expire; Expire; end
677
448
  ##
678
449
  # Expire a node.
679
450
 
680
- class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
451
+ class Expire < ::Quark.mdk_protocol.Serializable
681
452
  attr_accessor :node
682
453
  extend ::DatawireQuarkCore::Static
683
454
 
684
- static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["expire", "discovery.protocol.Expire"])) }
455
+ static _json_type: -> { "expire" }
685
456
  static mdk_discovery_protocol_Expire_ref: -> { nil }
686
457
 
687
458
 
@@ -696,13 +467,6 @@ class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
696
467
 
697
468
 
698
469
 
699
- def dispatchDiscoveryEvent(handler)
700
-
701
- handler.onExpire(self)
702
-
703
- nil
704
- end
705
-
706
470
  def _getClass()
707
471
 
708
472
  return "mdk_discovery.protocol.Expire"
@@ -712,8 +476,8 @@ class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
712
476
 
713
477
  def _getField(name)
714
478
 
715
- if ((name) == ("_discriminator"))
716
- return ::Quark.mdk_discovery.protocol.Expire._discriminator
479
+ if ((name) == ("_json_type"))
480
+ return ::Quark.mdk_discovery.protocol.Expire._json_type
717
481
  end
718
482
  if ((name) == ("node"))
719
483
  return (self).node
@@ -725,8 +489,8 @@ class Expire < ::Quark.mdk_discovery.protocol.DiscoveryEvent
725
489
 
726
490
  def _setField(name, value)
727
491
 
728
- if ((name) == ("_discriminator"))
729
- ::Quark.mdk_discovery.protocol.Expire._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
492
+ if ((name) == ("_json_type"))
493
+ ::Quark.mdk_discovery.protocol.Expire._json_type = ::DatawireQuarkCore.cast(value) { ::String }
730
494
  end
731
495
  if ((name) == ("node"))
732
496
  (self).node = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_discovery.Node }
@@ -751,10 +515,10 @@ def self.Clear; Clear; end
751
515
  ##
752
516
  # Expire all nodes.
753
517
 
754
- class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
518
+ class Clear < ::Quark.mdk_protocol.Serializable
755
519
  extend ::DatawireQuarkCore::Static
756
520
 
757
- static _discriminator: -> { ::Quark.mdk_protocol.anyof(::DatawireQuarkCore::List.new(["clear", "discovery.protocol.Clear"])) }
521
+ static _json_type: -> { "clear" }
758
522
  static mdk_discovery_protocol_Clear_ref: -> { nil }
759
523
 
760
524
 
@@ -769,13 +533,6 @@ class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
769
533
 
770
534
 
771
535
 
772
- def dispatchDiscoveryEvent(handler)
773
-
774
- handler.onClear(self)
775
-
776
- nil
777
- end
778
-
779
536
  def _getClass()
780
537
 
781
538
  return "mdk_discovery.protocol.Clear"
@@ -785,8 +542,8 @@ class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
785
542
 
786
543
  def _getField(name)
787
544
 
788
- if ((name) == ("_discriminator"))
789
- return ::Quark.mdk_discovery.protocol.Clear._discriminator
545
+ if ((name) == ("_json_type"))
546
+ return ::Quark.mdk_discovery.protocol.Clear._json_type
790
547
  end
791
548
  return nil
792
549
 
@@ -795,8 +552,8 @@ class Clear < ::Quark.mdk_discovery.protocol.DiscoveryEvent
795
552
 
796
553
  def _setField(name, value)
797
554
 
798
- if ((name) == ("_discriminator"))
799
- ::Quark.mdk_discovery.protocol.Clear._discriminator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_protocol.Discriminator }
555
+ if ((name) == ("_json_type"))
556
+ ::Quark.mdk_discovery.protocol.Clear._json_type = ::DatawireQuarkCore.cast(value) { ::String }
800
557
  end
801
558
 
802
559
  nil