datawire_mdk 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2135 @@
1
+ # Quark 1.0.406 run at 2016-08-31 13:21:53.028839
2
+ module Quark
3
+ require "quark"
4
+ def self.mdk_runtime; MdkRuntime; end
5
+ module MdkRuntime
6
+ require "datawire-quark-core"
7
+ require_relative 'quark/reflect' # 0 ('quark',) ()
8
+ require_relative 'datawire_mdk_md' # 0 () ()
9
+ require_relative 'mdk_runtime/actors' # 0 ('mdk_runtime',) ()
10
+ require_relative 'mdk_runtime/files' # 0 ('mdk_runtime',) ()
11
+ require_relative 'mdk_runtime/promise' # 0 ('mdk_runtime',) ()
12
+ require_relative 'quark/error' # 0 ('quark',) ()
13
+ require_relative 'quark' # 0 () ()
14
+ require_relative 'quark/concurrent' # 0 ('quark',) ()
15
+ require_relative 'quark/os' # 0 ('quark',) ()
16
+
17
+
18
+ def self.Dependencies; Dependencies; end
19
+ ##
20
+ # Trivial dependency injection setup.
21
+
22
+ class Dependencies < ::DatawireQuarkCore::QuarkObject
23
+ attr_accessor :_services
24
+ extend ::DatawireQuarkCore::Static
25
+
26
+ static mdk_runtime_Dependencies_ref: -> { nil }
27
+
28
+
29
+
30
+ def initialize()
31
+ self.__init_fields__
32
+
33
+ nil
34
+ end
35
+
36
+
37
+
38
+
39
+ ##
40
+ # Register a service object.
41
+
42
+ def registerService(name, service)
43
+
44
+ if (((self)._services).key?(name))
45
+ raise ((("Can't register service '") + (name)) + ("' twice."))
46
+ end
47
+ ((self)._services)[name] = (service)
48
+
49
+ nil
50
+ end
51
+
52
+ ##
53
+ # Look up a service by name.
54
+
55
+ def getService(name)
56
+
57
+ if (!(((self)._services).key?(name)))
58
+ raise ((("Service '") + (name)) + ("' not found!"))
59
+ end
60
+ return ((self)._services)[name]
61
+
62
+ nil
63
+ end
64
+
65
+ ##
66
+ # Return whether the service exists.
67
+
68
+ def hasService(name)
69
+
70
+ return ((self)._services).key?(name)
71
+
72
+ nil
73
+ end
74
+
75
+ def _getClass()
76
+
77
+ return "mdk_runtime.Dependencies"
78
+
79
+ nil
80
+ end
81
+
82
+ def _getField(name)
83
+
84
+ if ((name) == ("_services"))
85
+ return (self)._services
86
+ end
87
+ return nil
88
+
89
+ nil
90
+ end
91
+
92
+ def _setField(name, value)
93
+
94
+ if ((name) == ("_services"))
95
+ (self)._services = ::DatawireQuarkCore.cast(value) { ::Hash }
96
+ end
97
+
98
+ nil
99
+ end
100
+
101
+ def __init_fields__()
102
+
103
+ self._services = {}
104
+
105
+ nil
106
+ end
107
+
108
+
109
+ end
110
+ Dependencies.unlazy_statics
111
+
112
+ def self.MDKRuntime; MDKRuntime; end
113
+ ##
114
+ # Runtime environment for a particular MDK instance.
115
+ #
116
+ # Required registered services:
117
+ # - 'time': A provider of mdk_runtime.Time;
118
+ # - 'schedule': Implements the mdk_runtime.ScheduleActor actor protocol.
119
+ # - 'websockets': A provider of mdk_runtime.WebSockets.
120
+ #
121
+
122
+ class MDKRuntime < ::DatawireQuarkCore::QuarkObject
123
+ attr_accessor :dependencies, :dispatcher
124
+ extend ::DatawireQuarkCore::Static
125
+
126
+ static mdk_runtime_MDKRuntime_ref: -> { nil }
127
+
128
+
129
+
130
+ def initialize()
131
+ self.__init_fields__
132
+
133
+ nil
134
+ end
135
+
136
+
137
+
138
+
139
+ ##
140
+ # Return Time service.
141
+
142
+ def getTimeService()
143
+
144
+ return ::DatawireQuarkCore.cast((self).dependencies.getService("time")) { ::Quark.mdk_runtime.Time }
145
+
146
+ nil
147
+ end
148
+
149
+ ##
150
+ # Return Schedule service.
151
+
152
+ def getScheduleService()
153
+
154
+ return ::DatawireQuarkCore.cast((self).dependencies.getService("schedule")) { ::Quark.mdk_runtime.actors.Actor }
155
+
156
+ nil
157
+ end
158
+
159
+ ##
160
+ # Return WebSockets service.
161
+
162
+ def getWebSocketsService()
163
+
164
+ return ::DatawireQuarkCore.cast((self).dependencies.getService("websockets")) { ::Quark.mdk_runtime.WebSockets }
165
+
166
+ nil
167
+ end
168
+
169
+ ##
170
+ # Return File service.
171
+
172
+ def getFileService()
173
+
174
+ return ::DatawireQuarkCore.cast((self).dependencies.getService("files")) { ::Quark.mdk_runtime.files.FileActor }
175
+
176
+ nil
177
+ end
178
+
179
+ ##
180
+ # Return EnvironmentVariables service.
181
+
182
+ def getEnvVarsService()
183
+
184
+ return ::DatawireQuarkCore.cast((self).dependencies.getService("envvar")) { ::Quark.mdk_runtime.EnvironmentVariables }
185
+
186
+ nil
187
+ end
188
+
189
+ ##
190
+ # Stop all Actors that are started by default (i.e. files, schedule).
191
+
192
+ def stop()
193
+
194
+ (self).dispatcher.stopActor(self.getFileService())
195
+ (self).dispatcher.stopActor(self.getScheduleService())
196
+ (self).dispatcher.stopActor(self.getWebSocketsService())
197
+
198
+ nil
199
+ end
200
+
201
+ def _getClass()
202
+
203
+ return "mdk_runtime.MDKRuntime"
204
+
205
+ nil
206
+ end
207
+
208
+ def _getField(name)
209
+
210
+ if ((name) == ("dependencies"))
211
+ return (self).dependencies
212
+ end
213
+ if ((name) == ("dispatcher"))
214
+ return (self).dispatcher
215
+ end
216
+ return nil
217
+
218
+ nil
219
+ end
220
+
221
+ def _setField(name, value)
222
+
223
+ if ((name) == ("dependencies"))
224
+ (self).dependencies = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.Dependencies }
225
+ end
226
+ if ((name) == ("dispatcher"))
227
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
228
+ end
229
+
230
+ nil
231
+ end
232
+
233
+ def __init_fields__()
234
+
235
+ self.dependencies = ::Quark.mdk_runtime.Dependencies.new()
236
+ self.dispatcher = ::Quark.mdk_runtime.actors.MessageDispatcher.new()
237
+
238
+ nil
239
+ end
240
+
241
+
242
+ end
243
+ MDKRuntime.unlazy_statics
244
+
245
+ def self.Time; Time; end
246
+ ##
247
+ # Return current time.
248
+ #
249
+
250
+ class Time < ::DatawireQuarkCore::QuarkObject
251
+ extend ::DatawireQuarkCore::Static
252
+
253
+ static mdk_runtime_Time_ref: -> { nil }
254
+
255
+
256
+
257
+ def initialize()
258
+ self.__init_fields__
259
+
260
+ nil
261
+ end
262
+
263
+
264
+
265
+
266
+ ##
267
+ # Return the current time in seconds since the Unix epoch.
268
+ #
269
+
270
+ def time()
271
+ raise NotImplementedError, '`Time.time` is an abstract method'
272
+
273
+ nil
274
+ end
275
+
276
+ def __init_fields__()
277
+
278
+
279
+ nil
280
+ end
281
+
282
+
283
+ end
284
+ Time.unlazy_statics
285
+
286
+ def self.SchedulingActor; SchedulingActor; end
287
+ ##
288
+ # An actor that can schedule events.
289
+ #
290
+ # Accepts Schedule messages and send Happening events to originator at the
291
+ # appropriate time.
292
+ #
293
+
294
+ class SchedulingActor < ::DatawireQuarkCore::QuarkObject
295
+ extend ::DatawireQuarkCore::Static
296
+
297
+ static mdk_runtime_SchedulingActor_ref: -> { nil }
298
+
299
+
300
+
301
+ def initialize()
302
+ self.__init_fields__
303
+
304
+ nil
305
+ end
306
+
307
+
308
+
309
+
310
+ def __init_fields__()
311
+
312
+
313
+ nil
314
+ end
315
+
316
+
317
+ end
318
+ SchedulingActor.unlazy_statics
319
+
320
+ def self.WebSockets; WebSockets; end
321
+ ##
322
+ # Service that can open new WebSocket connections.
323
+ #
324
+ # When stopped it should close all connections.
325
+ #
326
+
327
+ class WebSockets < ::DatawireQuarkCore::QuarkObject
328
+ extend ::DatawireQuarkCore::Static
329
+
330
+ static mdk_runtime_WebSockets_ref: -> { nil }
331
+
332
+
333
+
334
+ def initialize()
335
+ self.__init_fields__
336
+
337
+ nil
338
+ end
339
+
340
+
341
+
342
+
343
+ ##
344
+ # The Promise resolves to a WSActor or WSConnectError. The originator will
345
+ # receive messages.
346
+ #
347
+
348
+ def connect(url, originator)
349
+ raise NotImplementedError, '`WebSockets.connect` is an abstract method'
350
+
351
+ nil
352
+ end
353
+
354
+ def __init_fields__()
355
+
356
+
357
+ nil
358
+ end
359
+
360
+
361
+ end
362
+ WebSockets.unlazy_statics
363
+
364
+ def self.WSConnectError; WSConnectError; end
365
+ ##
366
+ # Connection failed.
367
+
368
+ class WSConnectError < ::Quark.quark.error.Error
369
+ extend ::DatawireQuarkCore::Static
370
+
371
+ static mdk_runtime_WSConnectError_ref: -> { nil }
372
+
373
+
374
+
375
+ def initialize(message)
376
+
377
+ super(message)
378
+
379
+ nil
380
+ end
381
+
382
+
383
+
384
+
385
+ def toString()
386
+
387
+ return (("<WSConnectionError: ") + (method(:toString).super_method.call())) + (">")
388
+
389
+ nil
390
+ end
391
+
392
+ def _getClass()
393
+
394
+ return "mdk_runtime.WSConnectError"
395
+
396
+ nil
397
+ end
398
+
399
+ def _getField(name)
400
+
401
+ if ((name) == ("message"))
402
+ return (self).message
403
+ end
404
+ return nil
405
+
406
+ nil
407
+ end
408
+
409
+ def _setField(name, value)
410
+
411
+ if ((name) == ("message"))
412
+ (self).message = ::DatawireQuarkCore.cast(value) { ::String }
413
+ end
414
+
415
+ nil
416
+ end
417
+
418
+ def __init_fields__()
419
+
420
+ super
421
+
422
+ nil
423
+ end
424
+
425
+
426
+ end
427
+ WSConnectError.unlazy_statics
428
+
429
+ def self.WSActor; WSActor; end
430
+ ##
431
+ # Actor representing a specific WebSocket connection.
432
+ #
433
+ # Accepts String and WSClose messages, sends WSMessage and WSClosed
434
+ # messages to the originator of the connection (Actor passed to
435
+ # WebSockets.connect()).
436
+ #
437
+
438
+ class WSActor < ::DatawireQuarkCore::QuarkObject
439
+ extend ::DatawireQuarkCore::Static
440
+
441
+ static mdk_runtime_WSActor_ref: -> { nil }
442
+
443
+
444
+
445
+ def initialize()
446
+ self.__init_fields__
447
+
448
+ nil
449
+ end
450
+
451
+
452
+
453
+
454
+ def __init_fields__()
455
+
456
+
457
+ nil
458
+ end
459
+
460
+
461
+ end
462
+ WSActor.unlazy_statics
463
+
464
+ def self.WSMessage; WSMessage; end
465
+ ##
466
+ # A message was received from the server.
467
+
468
+ class WSMessage < ::DatawireQuarkCore::QuarkObject
469
+ attr_accessor :body
470
+ extend ::DatawireQuarkCore::Static
471
+
472
+ static mdk_runtime_WSMessage_ref: -> { nil }
473
+
474
+
475
+
476
+ def initialize(body)
477
+
478
+ self.__init_fields__
479
+ (self).body = body
480
+
481
+ nil
482
+ end
483
+
484
+
485
+
486
+
487
+ def _getClass()
488
+
489
+ return "mdk_runtime.WSMessage"
490
+
491
+ nil
492
+ end
493
+
494
+ def _getField(name)
495
+
496
+ if ((name) == ("body"))
497
+ return (self).body
498
+ end
499
+ return nil
500
+
501
+ nil
502
+ end
503
+
504
+ def _setField(name, value)
505
+
506
+ if ((name) == ("body"))
507
+ (self).body = ::DatawireQuarkCore.cast(value) { ::String }
508
+ end
509
+
510
+ nil
511
+ end
512
+
513
+ def __init_fields__()
514
+
515
+ self.body = nil
516
+
517
+ nil
518
+ end
519
+
520
+
521
+ end
522
+ WSMessage.unlazy_statics
523
+
524
+ def self.WSClose; WSClose; end
525
+ ##
526
+ # Tell WSActor to close the connection.
527
+
528
+ class WSClose < ::DatawireQuarkCore::QuarkObject
529
+ extend ::DatawireQuarkCore::Static
530
+
531
+ static mdk_runtime_WSClose_ref: -> { nil }
532
+
533
+
534
+
535
+ def initialize()
536
+ self.__init_fields__
537
+
538
+ nil
539
+ end
540
+
541
+
542
+
543
+
544
+ def _getClass()
545
+
546
+ return "mdk_runtime.WSClose"
547
+
548
+ nil
549
+ end
550
+
551
+ def _getField(name)
552
+
553
+ return nil
554
+
555
+ nil
556
+ end
557
+
558
+ def _setField(name, value)
559
+
560
+ nil
561
+
562
+ nil
563
+ end
564
+
565
+ def __init_fields__()
566
+
567
+
568
+ nil
569
+ end
570
+
571
+
572
+ end
573
+ WSClose.unlazy_statics
574
+
575
+ def self.WSClosed; WSClosed; end
576
+ ##
577
+ # Notify of WebSocket connection having closed.
578
+
579
+ class WSClosed < ::DatawireQuarkCore::QuarkObject
580
+ extend ::DatawireQuarkCore::Static
581
+
582
+ static mdk_runtime_WSClosed_ref: -> { nil }
583
+
584
+
585
+
586
+ def initialize()
587
+ self.__init_fields__
588
+
589
+ nil
590
+ end
591
+
592
+
593
+
594
+
595
+ def _getClass()
596
+
597
+ return "mdk_runtime.WSClosed"
598
+
599
+ nil
600
+ end
601
+
602
+ def _getField(name)
603
+
604
+ return nil
605
+
606
+ nil
607
+ end
608
+
609
+ def _setField(name, value)
610
+
611
+ nil
612
+
613
+ nil
614
+ end
615
+
616
+ def __init_fields__()
617
+
618
+
619
+ nil
620
+ end
621
+
622
+
623
+ end
624
+ WSClosed.unlazy_statics
625
+
626
+ def self.QuarkRuntimeWSActor; QuarkRuntimeWSActor; end
627
+ ##
628
+ # WSActor that uses current Quark runtime as temporary expedient.
629
+ #
630
+ # State can be 'ERROR', 'CONNECTING', 'CONNECTED', 'DISCONNECTING',
631
+ # 'DISCONNECTED'.
632
+ #
633
+
634
+ class QuarkRuntimeWSActor < ::DatawireQuarkCore::QuarkObject
635
+ attr_accessor :logger, :socket, :factory, :originator, :dispatcher, :state
636
+ extend ::DatawireQuarkCore::Static
637
+
638
+ static mdk_runtime_QuarkRuntimeWSActor_ref: -> { nil }
639
+
640
+
641
+
642
+ def initialize(originator, factory)
643
+
644
+ self.__init_fields__
645
+ (self).originator = originator
646
+ (self).factory = factory
647
+
648
+ nil
649
+ end
650
+
651
+
652
+
653
+
654
+ def onStart(dispatcher)
655
+
656
+ (self).dispatcher = dispatcher
657
+
658
+ nil
659
+ end
660
+
661
+ def onMessage(origin, message)
662
+
663
+ if ((((::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id) == ("quark.String")) && (((self).state) == ("CONNECTED")))
664
+ (self).socket.send(::DatawireQuarkCore.cast(message) { ::String })
665
+ return
666
+ end
667
+ if ((((::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id) == ("mdk_runtime.WSClose")) && (((self).state) == ("CONNECTED")))
668
+ (self).state = "DISCONNECTING"
669
+ (self).socket.close()
670
+ return
671
+ end
672
+
673
+ nil
674
+ end
675
+
676
+ def onWSConnected(socket)
677
+
678
+ @logger.debug(((((("onWSConnected, current state ") + ((self).state)) + ("originator: ")) + (((self).originator).to_s)) + (" and I am ")) + ((self).to_s))
679
+ if (((self).state) == ("ERROR"))
680
+ @logger.debug("Connection event after error event!")
681
+ return
682
+ end
683
+ (self).state = "CONNECTED"
684
+ (self).socket = socket
685
+ (self).factory.resolve(self)
686
+
687
+ nil
688
+ end
689
+
690
+ def onWSError(socket, error)
691
+
692
+ @logger.debug(((("onWSError, current state ") + ((self).state)) + ("originator: ")) + (((self).originator).to_s))
693
+ if (((self).state) == ("CONNECTING"))
694
+ @logger.error(("Error connecting to WebSocket: ") + (error.toString()))
695
+ (self).state = "ERROR"
696
+ (self).factory.reject(::Quark.mdk_runtime.WSConnectError.new(error.toString()))
697
+ return
698
+ end
699
+ @logger.error(("WebSocket error: ") + (error.toString()))
700
+
701
+ nil
702
+ end
703
+
704
+ def onWSMessage(socket, message)
705
+
706
+ @logger.debug(((("onWSMessage, current state: ") + ((self).state)) + ("originator: ")) + (((self).originator).to_s))
707
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.WSMessage.new(message), (self).originator)
708
+
709
+ nil
710
+ end
711
+
712
+ def onWSFinal(socket)
713
+
714
+ @logger.debug(((("onWSFinal, current state ") + ((self).state)) + ("originator: ")) + (((self).originator).to_s))
715
+ if ((((self).state) == ("DISCONNECTING")) || (((self).state) == ("CONNECTED")))
716
+ (self).state = "DISCONNECTED"
717
+ (self).socket = ::DatawireQuarkCore.cast(nil) { ::Quark.quark.WebSocket }
718
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.WSClosed.new(), (self).originator)
719
+ end
720
+
721
+ nil
722
+ end
723
+
724
+ def _getClass()
725
+
726
+ return "mdk_runtime.QuarkRuntimeWSActor"
727
+
728
+ nil
729
+ end
730
+
731
+ def _getField(name)
732
+
733
+ if ((name) == ("logger"))
734
+ return (self).logger
735
+ end
736
+ if ((name) == ("socket"))
737
+ return (self).socket
738
+ end
739
+ if ((name) == ("factory"))
740
+ return (self).factory
741
+ end
742
+ if ((name) == ("originator"))
743
+ return (self).originator
744
+ end
745
+ if ((name) == ("dispatcher"))
746
+ return (self).dispatcher
747
+ end
748
+ if ((name) == ("state"))
749
+ return (self).state
750
+ end
751
+ return nil
752
+
753
+ nil
754
+ end
755
+
756
+ def _setField(name, value)
757
+
758
+ if ((name) == ("logger"))
759
+ (self).logger = value
760
+ end
761
+ if ((name) == ("socket"))
762
+ (self).socket = ::DatawireQuarkCore.cast(value) { ::Quark.quark.WebSocket }
763
+ end
764
+ if ((name) == ("factory"))
765
+ (self).factory = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.promise.PromiseResolver }
766
+ end
767
+ if ((name) == ("originator"))
768
+ (self).originator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
769
+ end
770
+ if ((name) == ("dispatcher"))
771
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
772
+ end
773
+ if ((name) == ("state"))
774
+ (self).state = ::DatawireQuarkCore.cast(value) { ::String }
775
+ end
776
+
777
+ nil
778
+ end
779
+
780
+ ##
781
+ # The Actor should begin shutting down.
782
+
783
+ def onStop()
784
+
785
+ nil
786
+
787
+ nil
788
+ end
789
+
790
+ ##
791
+ # Called when the WebSocket is first created.
792
+
793
+ def onWSInit(socket)
794
+
795
+ nil
796
+
797
+ nil
798
+ end
799
+
800
+ ##
801
+ # Called when the WebSocket receives a binary message.
802
+
803
+ def onWSBinary(socket, message)
804
+
805
+ nil
806
+
807
+ nil
808
+ end
809
+
810
+ ##
811
+ # Called when the WebSocket disconnects cleanly.
812
+
813
+ def onWSClosed(socket)
814
+
815
+ nil
816
+
817
+ nil
818
+ end
819
+
820
+ def __init_fields__()
821
+
822
+ self.logger = ::Quark.quark._getLogger("protocol")
823
+ self.socket = nil
824
+ self.factory = nil
825
+ self.originator = nil
826
+ self.dispatcher = nil
827
+ self.state = "CONNECTING"
828
+
829
+ nil
830
+ end
831
+
832
+
833
+ end
834
+ QuarkRuntimeWSActor.unlazy_statics
835
+
836
+ def self.QuarkRuntimeWebSockets; QuarkRuntimeWebSockets; end
837
+ ##
838
+ # WebSocket that uses current Quark runtime as temporary expedient.
839
+ #
840
+
841
+ class QuarkRuntimeWebSockets < ::DatawireQuarkCore::QuarkObject
842
+ attr_accessor :logger, :dispatcher, :connections
843
+ extend ::DatawireQuarkCore::Static
844
+
845
+ static quark_List_mdk_runtime_WSActor__ref: -> { nil }
846
+ static mdk_runtime_QuarkRuntimeWebSockets_ref: -> { nil }
847
+
848
+
849
+
850
+ def initialize()
851
+ self.__init_fields__
852
+
853
+ nil
854
+ end
855
+
856
+
857
+
858
+
859
+ def connect(url, originator)
860
+
861
+ @logger.debug((((originator).to_s) + ("requested connection to ")) + (url))
862
+ factory = ::Quark.mdk_runtime.promise.PromiseResolver.new((self).dispatcher)
863
+ actor = ::Quark.mdk_runtime.QuarkRuntimeWSActor.new(originator, factory)
864
+ (@connections) << (actor)
865
+ (self).dispatcher.startActor(actor)
866
+ ::Quark.quark.concurrent.Context.runtime().open(url, actor)
867
+ return (factory).promise
868
+
869
+ nil
870
+ end
871
+
872
+ def onStart(dispatcher)
873
+
874
+ (self).dispatcher = dispatcher
875
+
876
+ nil
877
+ end
878
+
879
+ def onMessage(origin, message)
880
+
881
+ nil
882
+
883
+ nil
884
+ end
885
+
886
+ def onStop()
887
+
888
+ idx = 0
889
+ while ((idx) < ((@connections).size)) do
890
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.WSClose.new(), ((self).connections)[idx])
891
+ idx = (idx) + (1)
892
+ end
893
+
894
+ nil
895
+ end
896
+
897
+ def _getClass()
898
+
899
+ return "mdk_runtime.QuarkRuntimeWebSockets"
900
+
901
+ nil
902
+ end
903
+
904
+ def _getField(name)
905
+
906
+ if ((name) == ("logger"))
907
+ return (self).logger
908
+ end
909
+ if ((name) == ("dispatcher"))
910
+ return (self).dispatcher
911
+ end
912
+ if ((name) == ("connections"))
913
+ return (self).connections
914
+ end
915
+ return nil
916
+
917
+ nil
918
+ end
919
+
920
+ def _setField(name, value)
921
+
922
+ if ((name) == ("logger"))
923
+ (self).logger = value
924
+ end
925
+ if ((name) == ("dispatcher"))
926
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
927
+ end
928
+ if ((name) == ("connections"))
929
+ (self).connections = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
930
+ end
931
+
932
+ nil
933
+ end
934
+
935
+ def __init_fields__()
936
+
937
+ self.logger = ::Quark.quark._getLogger("protocol")
938
+ self.dispatcher = nil
939
+ self.connections = ::DatawireQuarkCore::List.new([])
940
+
941
+ nil
942
+ end
943
+
944
+
945
+ end
946
+ QuarkRuntimeWebSockets.unlazy_statics
947
+
948
+ def self.FakeWSActor; FakeWSActor; end
949
+ ##
950
+ # WSActor implementation for testing purposes.
951
+
952
+ class FakeWSActor < ::DatawireQuarkCore::QuarkObject
953
+ attr_accessor :url, :resolver, :resolved, :dispatcher, :originator, :sent, :state, :expectIdx
954
+ extend ::DatawireQuarkCore::Static
955
+
956
+ static mdk_runtime_FakeWSActor_ref: -> { nil }
957
+
958
+
959
+
960
+ def initialize(originator, resolver, url)
961
+
962
+ self.__init_fields__
963
+ (self).url = url
964
+ (self).originator = originator
965
+ (self).resolver = resolver
966
+
967
+ nil
968
+ end
969
+
970
+
971
+
972
+
973
+ def onStart(dispatcher)
974
+
975
+ (self).dispatcher = dispatcher
976
+
977
+ nil
978
+ end
979
+
980
+ def onMessage(origin, message)
981
+
982
+ if ((((::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id) == ("quark.String")) && (((self).state) == ("CONNECTED")))
983
+ ((self).sent) << (::DatawireQuarkCore.cast(message) { ::String })
984
+ return
985
+ end
986
+ if ((((::Quark.quark.reflect.QuarkClass.get(::DatawireQuarkCore._getClass(message))).id) == ("mdk_runtime.WSClose")) && (((self).state) == ("CONNECTED")))
987
+ self.close()
988
+ return
989
+ end
990
+
991
+ nil
992
+ end
993
+
994
+ ##
995
+ # Simulate the remote peer accepting the socket connect.
996
+ #
997
+
998
+ def accept()
999
+
1000
+ if (@resolved)
1001
+ ::Quark.quark.concurrent.Context.runtime().fail("Test bug. already accepted")
1002
+ else
1003
+ @resolved = true
1004
+ (self).state = "CONNECTED"
1005
+ (self).resolver.resolve(self)
1006
+ end
1007
+
1008
+ nil
1009
+ end
1010
+
1011
+ ##
1012
+ # Simulate the remote peer rejecting the socket connect.
1013
+
1014
+ def reject()
1015
+
1016
+ if (@resolved)
1017
+ ::Quark.quark.concurrent.Context.runtime().fail("Test bug. already accepted")
1018
+ else
1019
+ @resolved = true
1020
+ (self).resolver.reject(::Quark.mdk_runtime.WSConnectError.new("connection refused"))
1021
+ end
1022
+
1023
+ nil
1024
+ end
1025
+
1026
+ ##
1027
+ # Simulate the remote peer sending a text message to the client.
1028
+ #
1029
+
1030
+ def send(message)
1031
+
1032
+ if (((self).state) != ("CONNECTED"))
1033
+ ::Quark.quark.concurrent.Context.runtime().fail("Test bug. Can't send when not connected.")
1034
+ end
1035
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.WSMessage.new(message), @originator)
1036
+
1037
+ nil
1038
+ end
1039
+
1040
+ ##
1041
+ # Simulate the remote peer closing the socket.
1042
+ #
1043
+
1044
+ def close()
1045
+
1046
+ if (((self).state) == ("CONNECTED"))
1047
+ (self).state = "DISCONNECTED"
1048
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.WSClosed.new(), @originator)
1049
+ else
1050
+ ::Quark.quark.concurrent.Context.runtime().fail("Test bug. Can't close already closed socket.")
1051
+ end
1052
+
1053
+ nil
1054
+ end
1055
+
1056
+ ##
1057
+ # Check that a message has been sent via this actor.
1058
+ #
1059
+
1060
+ def expectTextMessage()
1061
+
1062
+ if (!(@resolved))
1063
+ ::Quark.quark.concurrent.Context.runtime().fail("not connected yet")
1064
+ return "unreachable"
1065
+ end
1066
+ if ((@expectIdx) < (((self).sent).size))
1067
+ msg = ((self).sent)[@expectIdx]
1068
+ @expectIdx = (@expectIdx) + (1)
1069
+ return msg
1070
+ end
1071
+ ::Quark.quark.concurrent.Context.runtime().fail("no remaining message found")
1072
+ return "unreachable"
1073
+
1074
+ nil
1075
+ end
1076
+
1077
+ def _getClass()
1078
+
1079
+ return "mdk_runtime.FakeWSActor"
1080
+
1081
+ nil
1082
+ end
1083
+
1084
+ def _getField(name)
1085
+
1086
+ if ((name) == ("url"))
1087
+ return (self).url
1088
+ end
1089
+ if ((name) == ("resolver"))
1090
+ return (self).resolver
1091
+ end
1092
+ if ((name) == ("resolved"))
1093
+ return (self).resolved
1094
+ end
1095
+ if ((name) == ("dispatcher"))
1096
+ return (self).dispatcher
1097
+ end
1098
+ if ((name) == ("originator"))
1099
+ return (self).originator
1100
+ end
1101
+ if ((name) == ("sent"))
1102
+ return (self).sent
1103
+ end
1104
+ if ((name) == ("state"))
1105
+ return (self).state
1106
+ end
1107
+ if ((name) == ("expectIdx"))
1108
+ return (self).expectIdx
1109
+ end
1110
+ return nil
1111
+
1112
+ nil
1113
+ end
1114
+
1115
+ def _setField(name, value)
1116
+
1117
+ if ((name) == ("url"))
1118
+ (self).url = ::DatawireQuarkCore.cast(value) { ::String }
1119
+ end
1120
+ if ((name) == ("resolver"))
1121
+ (self).resolver = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.promise.PromiseResolver }
1122
+ end
1123
+ if ((name) == ("resolved"))
1124
+ (self).resolved = ::DatawireQuarkCore.cast(value) { ::Object }
1125
+ end
1126
+ if ((name) == ("dispatcher"))
1127
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
1128
+ end
1129
+ if ((name) == ("originator"))
1130
+ (self).originator = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
1131
+ end
1132
+ if ((name) == ("sent"))
1133
+ (self).sent = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
1134
+ end
1135
+ if ((name) == ("state"))
1136
+ (self).state = ::DatawireQuarkCore.cast(value) { ::String }
1137
+ end
1138
+ if ((name) == ("expectIdx"))
1139
+ (self).expectIdx = ::DatawireQuarkCore.cast(value) { ::Integer }
1140
+ end
1141
+
1142
+ nil
1143
+ end
1144
+
1145
+ ##
1146
+ # The Actor should begin shutting down.
1147
+
1148
+ def onStop()
1149
+
1150
+ nil
1151
+
1152
+ nil
1153
+ end
1154
+
1155
+ def __init_fields__()
1156
+
1157
+ self.url = nil
1158
+ self.resolver = nil
1159
+ self.resolved = false
1160
+ self.dispatcher = nil
1161
+ self.originator = nil
1162
+ self.sent = ::DatawireQuarkCore::List.new([])
1163
+ self.state = "CONNECTING"
1164
+ self.expectIdx = 0
1165
+
1166
+ nil
1167
+ end
1168
+
1169
+
1170
+ end
1171
+ FakeWSActor.unlazy_statics
1172
+
1173
+ def self.FakeWebSockets; FakeWebSockets; end
1174
+ ##
1175
+ # WebSocket implementation for testing purposes.
1176
+ #
1177
+
1178
+ class FakeWebSockets < ::DatawireQuarkCore::QuarkObject
1179
+ attr_accessor :dispatcher, :fakeActors
1180
+ extend ::DatawireQuarkCore::Static
1181
+
1182
+ static quark_List_mdk_runtime_FakeWSActor__ref: -> { nil }
1183
+ static mdk_runtime_FakeWebSockets_ref: -> { nil }
1184
+
1185
+
1186
+
1187
+ def initialize()
1188
+ self.__init_fields__
1189
+
1190
+ nil
1191
+ end
1192
+
1193
+
1194
+
1195
+
1196
+ def connect(url, originator)
1197
+
1198
+ factory = ::Quark.mdk_runtime.promise.PromiseResolver.new((self).dispatcher)
1199
+ actor = ::Quark.mdk_runtime.FakeWSActor.new(originator, factory, url)
1200
+ (self).dispatcher.startActor(actor)
1201
+ ((self).fakeActors) << (actor)
1202
+ return (factory).promise
1203
+
1204
+ nil
1205
+ end
1206
+
1207
+ def lastConnection()
1208
+
1209
+ return ((self).fakeActors)[(((self).fakeActors).size) - (1)]
1210
+
1211
+ nil
1212
+ end
1213
+
1214
+ def onStart(dispatcher)
1215
+
1216
+ (self).dispatcher = dispatcher
1217
+
1218
+ nil
1219
+ end
1220
+
1221
+ def onMessage(origin, message)
1222
+
1223
+ nil
1224
+
1225
+ nil
1226
+ end
1227
+
1228
+ def _getClass()
1229
+
1230
+ return "mdk_runtime.FakeWebSockets"
1231
+
1232
+ nil
1233
+ end
1234
+
1235
+ def _getField(name)
1236
+
1237
+ if ((name) == ("dispatcher"))
1238
+ return (self).dispatcher
1239
+ end
1240
+ if ((name) == ("fakeActors"))
1241
+ return (self).fakeActors
1242
+ end
1243
+ return nil
1244
+
1245
+ nil
1246
+ end
1247
+
1248
+ def _setField(name, value)
1249
+
1250
+ if ((name) == ("dispatcher"))
1251
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
1252
+ end
1253
+ if ((name) == ("fakeActors"))
1254
+ (self).fakeActors = ::DatawireQuarkCore.cast(value) { ::DatawireQuarkCore::List }
1255
+ end
1256
+
1257
+ nil
1258
+ end
1259
+
1260
+ ##
1261
+ # The Actor should begin shutting down.
1262
+
1263
+ def onStop()
1264
+
1265
+ nil
1266
+
1267
+ nil
1268
+ end
1269
+
1270
+ def __init_fields__()
1271
+
1272
+ self.dispatcher = nil
1273
+ self.fakeActors = ::DatawireQuarkCore::List.new([])
1274
+
1275
+ nil
1276
+ end
1277
+
1278
+
1279
+ end
1280
+ FakeWebSockets.unlazy_statics
1281
+
1282
+ def self.Schedule; Schedule; end
1283
+ ##
1284
+ # Please send me a Happening message with given event name in given number of
1285
+ # seconds.
1286
+ #
1287
+
1288
+ class Schedule < ::DatawireQuarkCore::QuarkObject
1289
+ attr_accessor :event, :seconds
1290
+ extend ::DatawireQuarkCore::Static
1291
+
1292
+ static mdk_runtime_Schedule_ref: -> { nil }
1293
+
1294
+
1295
+
1296
+ def initialize(event, seconds)
1297
+
1298
+ self.__init_fields__
1299
+ (self).event = event
1300
+ (self).seconds = seconds
1301
+
1302
+ nil
1303
+ end
1304
+
1305
+
1306
+
1307
+
1308
+ def _getClass()
1309
+
1310
+ return "mdk_runtime.Schedule"
1311
+
1312
+ nil
1313
+ end
1314
+
1315
+ def _getField(name)
1316
+
1317
+ if ((name) == ("event"))
1318
+ return (self).event
1319
+ end
1320
+ if ((name) == ("seconds"))
1321
+ return (self).seconds
1322
+ end
1323
+ return nil
1324
+
1325
+ nil
1326
+ end
1327
+
1328
+ def _setField(name, value)
1329
+
1330
+ if ((name) == ("event"))
1331
+ (self).event = ::DatawireQuarkCore.cast(value) { ::String }
1332
+ end
1333
+ if ((name) == ("seconds"))
1334
+ (self).seconds = ::DatawireQuarkCore.cast(value) { ::Float }
1335
+ end
1336
+
1337
+ nil
1338
+ end
1339
+
1340
+ def __init_fields__()
1341
+
1342
+ self.event = nil
1343
+ self.seconds = nil
1344
+
1345
+ nil
1346
+ end
1347
+
1348
+
1349
+ end
1350
+ Schedule.unlazy_statics
1351
+
1352
+ def self.Happening; Happening; end
1353
+ ##
1354
+ # A scheduled event is now happening.
1355
+
1356
+ class Happening < ::DatawireQuarkCore::QuarkObject
1357
+ attr_accessor :event, :currentTime
1358
+ extend ::DatawireQuarkCore::Static
1359
+
1360
+ static mdk_runtime_Happening_ref: -> { nil }
1361
+
1362
+
1363
+
1364
+ def initialize(event, currentTime)
1365
+
1366
+ self.__init_fields__
1367
+ (self).event = event
1368
+ (self).currentTime = currentTime
1369
+
1370
+ nil
1371
+ end
1372
+
1373
+
1374
+
1375
+
1376
+ def _getClass()
1377
+
1378
+ return "mdk_runtime.Happening"
1379
+
1380
+ nil
1381
+ end
1382
+
1383
+ def _getField(name)
1384
+
1385
+ if ((name) == ("event"))
1386
+ return (self).event
1387
+ end
1388
+ if ((name) == ("currentTime"))
1389
+ return (self).currentTime
1390
+ end
1391
+ return nil
1392
+
1393
+ nil
1394
+ end
1395
+
1396
+ def _setField(name, value)
1397
+
1398
+ if ((name) == ("event"))
1399
+ (self).event = ::DatawireQuarkCore.cast(value) { ::String }
1400
+ end
1401
+ if ((name) == ("currentTime"))
1402
+ (self).currentTime = ::DatawireQuarkCore.cast(value) { ::Float }
1403
+ end
1404
+
1405
+ nil
1406
+ end
1407
+
1408
+ def __init_fields__()
1409
+
1410
+ self.event = nil
1411
+ self.currentTime = nil
1412
+
1413
+ nil
1414
+ end
1415
+
1416
+
1417
+ end
1418
+ Happening.unlazy_statics
1419
+
1420
+ def self._ScheduleTask; ScheduleTask; end
1421
+ class ScheduleTask < ::DatawireQuarkCore::QuarkObject
1422
+ attr_accessor :timeService, :requester, :event
1423
+ extend ::DatawireQuarkCore::Static
1424
+
1425
+ static mdk_runtime__ScheduleTask_ref: -> { nil }
1426
+
1427
+
1428
+
1429
+ def initialize(timeService, requester, event)
1430
+
1431
+ self.__init_fields__
1432
+ (self).timeService = timeService
1433
+ (self).requester = requester
1434
+ (self).event = event
1435
+
1436
+ nil
1437
+ end
1438
+
1439
+
1440
+
1441
+
1442
+ def onExecute(runtime)
1443
+
1444
+ (@timeService).dispatcher.tell((self).timeService, ::Quark.mdk_runtime.Happening.new((self).event, (self).timeService.time()), (self).requester)
1445
+
1446
+ nil
1447
+ end
1448
+
1449
+ def _getClass()
1450
+
1451
+ return "mdk_runtime._ScheduleTask"
1452
+
1453
+ nil
1454
+ end
1455
+
1456
+ def _getField(name)
1457
+
1458
+ if ((name) == ("timeService"))
1459
+ return (self).timeService
1460
+ end
1461
+ if ((name) == ("requester"))
1462
+ return (self).requester
1463
+ end
1464
+ if ((name) == ("event"))
1465
+ return (self).event
1466
+ end
1467
+ return nil
1468
+
1469
+ nil
1470
+ end
1471
+
1472
+ def _setField(name, value)
1473
+
1474
+ if ((name) == ("timeService"))
1475
+ (self).timeService = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.QuarkRuntimeTime }
1476
+ end
1477
+ if ((name) == ("requester"))
1478
+ (self).requester = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
1479
+ end
1480
+ if ((name) == ("event"))
1481
+ (self).event = ::DatawireQuarkCore.cast(value) { ::String }
1482
+ end
1483
+
1484
+ nil
1485
+ end
1486
+
1487
+ def __init_fields__()
1488
+
1489
+ self.timeService = nil
1490
+ self.requester = nil
1491
+ self.event = nil
1492
+
1493
+ nil
1494
+ end
1495
+
1496
+
1497
+ end
1498
+ ScheduleTask.unlazy_statics
1499
+
1500
+ def self.QuarkRuntimeTime; QuarkRuntimeTime; end
1501
+ ##
1502
+ # Temporary implementation based on Quark runtime, until we have native
1503
+ # implementation.
1504
+ #
1505
+
1506
+ class QuarkRuntimeTime < ::DatawireQuarkCore::QuarkObject
1507
+ attr_accessor :dispatcher, :stopped
1508
+ extend ::DatawireQuarkCore::Static
1509
+
1510
+ static mdk_runtime_QuarkRuntimeTime_ref: -> { nil }
1511
+
1512
+
1513
+
1514
+ def initialize()
1515
+ self.__init_fields__
1516
+
1517
+ nil
1518
+ end
1519
+
1520
+
1521
+
1522
+
1523
+ def onStart(dispatcher)
1524
+
1525
+ (self).dispatcher = dispatcher
1526
+
1527
+ nil
1528
+ end
1529
+
1530
+ def onStop()
1531
+
1532
+ (self).stopped = true
1533
+
1534
+ nil
1535
+ end
1536
+
1537
+ def onMessage(origin, msg)
1538
+
1539
+ if ((self).stopped)
1540
+ return
1541
+ end
1542
+ sched = ::DatawireQuarkCore.cast(msg) { ::Quark.mdk_runtime.Schedule }
1543
+ seconds = (sched).seconds
1544
+ if ((seconds) == (0.0))
1545
+ seconds = 0.001
1546
+ end
1547
+ ::Quark.quark.concurrent.Context.runtime().schedule(::Quark.mdk_runtime._ScheduleTask.new(self, origin, (sched).event), seconds)
1548
+
1549
+ nil
1550
+ end
1551
+
1552
+ def time()
1553
+
1554
+ milliseconds = (::Quark.quark.concurrent.Context.runtime().now()).to_f
1555
+ return (milliseconds) / (1000.0)
1556
+
1557
+ nil
1558
+ end
1559
+
1560
+ def _getClass()
1561
+
1562
+ return "mdk_runtime.QuarkRuntimeTime"
1563
+
1564
+ nil
1565
+ end
1566
+
1567
+ def _getField(name)
1568
+
1569
+ if ((name) == ("dispatcher"))
1570
+ return (self).dispatcher
1571
+ end
1572
+ if ((name) == ("stopped"))
1573
+ return (self).stopped
1574
+ end
1575
+ return nil
1576
+
1577
+ nil
1578
+ end
1579
+
1580
+ def _setField(name, value)
1581
+
1582
+ if ((name) == ("dispatcher"))
1583
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
1584
+ end
1585
+ if ((name) == ("stopped"))
1586
+ (self).stopped = ::DatawireQuarkCore.cast(value) { ::Object }
1587
+ end
1588
+
1589
+ nil
1590
+ end
1591
+
1592
+ def __init_fields__()
1593
+
1594
+ self.dispatcher = nil
1595
+ self.stopped = false
1596
+
1597
+ nil
1598
+ end
1599
+
1600
+
1601
+ end
1602
+ QuarkRuntimeTime.unlazy_statics
1603
+
1604
+ def self._FakeTimeRequest; FakeTimeRequest; end
1605
+ class FakeTimeRequest < ::DatawireQuarkCore::QuarkObject
1606
+ attr_accessor :requester, :event, :happensAt
1607
+ extend ::DatawireQuarkCore::Static
1608
+
1609
+ static mdk_runtime__FakeTimeRequest_ref: -> { nil }
1610
+
1611
+
1612
+
1613
+ def initialize(requester, event, happensAt)
1614
+
1615
+ self.__init_fields__
1616
+ (self).requester = requester
1617
+ (self).event = event
1618
+ (self).happensAt = happensAt
1619
+
1620
+ nil
1621
+ end
1622
+
1623
+
1624
+
1625
+
1626
+ def _getClass()
1627
+
1628
+ return "mdk_runtime._FakeTimeRequest"
1629
+
1630
+ nil
1631
+ end
1632
+
1633
+ def _getField(name)
1634
+
1635
+ if ((name) == ("requester"))
1636
+ return (self).requester
1637
+ end
1638
+ if ((name) == ("event"))
1639
+ return (self).event
1640
+ end
1641
+ if ((name) == ("happensAt"))
1642
+ return (self).happensAt
1643
+ end
1644
+ return nil
1645
+
1646
+ nil
1647
+ end
1648
+
1649
+ def _setField(name, value)
1650
+
1651
+ if ((name) == ("requester"))
1652
+ (self).requester = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.Actor }
1653
+ end
1654
+ if ((name) == ("event"))
1655
+ (self).event = ::DatawireQuarkCore.cast(value) { ::String }
1656
+ end
1657
+ if ((name) == ("happensAt"))
1658
+ (self).happensAt = ::DatawireQuarkCore.cast(value) { ::Float }
1659
+ end
1660
+
1661
+ nil
1662
+ end
1663
+
1664
+ def __init_fields__()
1665
+
1666
+ self.requester = nil
1667
+ self.event = nil
1668
+ self.happensAt = nil
1669
+
1670
+ nil
1671
+ end
1672
+
1673
+
1674
+ end
1675
+ FakeTimeRequest.unlazy_statics
1676
+
1677
+ def self.FakeTime; FakeTime; end
1678
+ ##
1679
+ # Testing fake.
1680
+
1681
+ class FakeTime < ::DatawireQuarkCore::QuarkObject
1682
+ attr_accessor :_now, :_scheduled, :dispatcher
1683
+ extend ::DatawireQuarkCore::Static
1684
+
1685
+ static quark_List_quark_long__ref: -> { nil }
1686
+ static quark_Map_quark_long_mdk_runtime__FakeTimeRequest__ref: -> { nil }
1687
+ static mdk_runtime_FakeTime_ref: -> { nil }
1688
+
1689
+
1690
+
1691
+ def initialize()
1692
+ self.__init_fields__
1693
+
1694
+ nil
1695
+ end
1696
+
1697
+
1698
+
1699
+
1700
+ def onStart(dispatcher)
1701
+
1702
+ (self).dispatcher = dispatcher
1703
+
1704
+ nil
1705
+ end
1706
+
1707
+ def onMessage(origin, msg)
1708
+
1709
+ sched = ::DatawireQuarkCore.cast(msg) { ::Quark.mdk_runtime.Schedule }
1710
+ (@_scheduled)[((::DatawireQuarkCore::List.new((@_scheduled).keys)).size)] = (::Quark.mdk_runtime._FakeTimeRequest.new(origin, (sched).event, ((self)._now) + ((sched).seconds)))
1711
+
1712
+ nil
1713
+ end
1714
+
1715
+ def time()
1716
+
1717
+ return (self)._now
1718
+
1719
+ nil
1720
+ end
1721
+
1722
+ ##
1723
+ # Run scheduled events whose time has come.
1724
+
1725
+ def pump()
1726
+
1727
+ idx = 0
1728
+ keys = ::DatawireQuarkCore::List.new(((self)._scheduled).keys)
1729
+ while ((idx) < ((keys).size)) do
1730
+ request = (@_scheduled)[(keys)[idx]]
1731
+ if (((request).happensAt) <= ((self)._now))
1732
+ ((self)._scheduled).delete((keys)[idx])
1733
+ (self).dispatcher.tell(self, ::Quark.mdk_runtime.Happening.new((request).event, self.time()), (request).requester)
1734
+ end
1735
+ idx = (idx) + (1)
1736
+ end
1737
+
1738
+ nil
1739
+ end
1740
+
1741
+ ##
1742
+ # Move time forward.
1743
+
1744
+ def advance(seconds)
1745
+
1746
+ (self)._now = ((self)._now) + (seconds)
1747
+
1748
+ nil
1749
+ end
1750
+
1751
+ ##
1752
+ # Number of scheduled events.
1753
+
1754
+ def scheduled()
1755
+
1756
+ return (::DatawireQuarkCore::List.new(((self)._scheduled).keys)).size
1757
+
1758
+ nil
1759
+ end
1760
+
1761
+ def _getClass()
1762
+
1763
+ return "mdk_runtime.FakeTime"
1764
+
1765
+ nil
1766
+ end
1767
+
1768
+ def _getField(name)
1769
+
1770
+ if ((name) == ("_now"))
1771
+ return (self)._now
1772
+ end
1773
+ if ((name) == ("_scheduled"))
1774
+ return (self)._scheduled
1775
+ end
1776
+ if ((name) == ("dispatcher"))
1777
+ return (self).dispatcher
1778
+ end
1779
+ return nil
1780
+
1781
+ nil
1782
+ end
1783
+
1784
+ def _setField(name, value)
1785
+
1786
+ if ((name) == ("_now"))
1787
+ (self)._now = ::DatawireQuarkCore.cast(value) { ::Float }
1788
+ end
1789
+ if ((name) == ("_scheduled"))
1790
+ (self)._scheduled = ::DatawireQuarkCore.cast(value) { ::Hash }
1791
+ end
1792
+ if ((name) == ("dispatcher"))
1793
+ (self).dispatcher = ::DatawireQuarkCore.cast(value) { ::Quark.mdk_runtime.actors.MessageDispatcher }
1794
+ end
1795
+
1796
+ nil
1797
+ end
1798
+
1799
+ ##
1800
+ # The Actor should begin shutting down.
1801
+
1802
+ def onStop()
1803
+
1804
+ nil
1805
+
1806
+ nil
1807
+ end
1808
+
1809
+ def __init_fields__()
1810
+
1811
+ self._now = 1000.0
1812
+ self._scheduled = {}
1813
+ self.dispatcher = nil
1814
+
1815
+ nil
1816
+ end
1817
+
1818
+
1819
+ end
1820
+ FakeTime.unlazy_statics
1821
+
1822
+ def self.EnvironmentVariable; EnvironmentVariable; end
1823
+ ##
1824
+ # EnvironmentVariable is a Supplier of Strings that come from the environment.
1825
+
1826
+ class EnvironmentVariable < ::DatawireQuarkCore::QuarkObject
1827
+ attr_accessor :variableName, :_value
1828
+ extend ::DatawireQuarkCore::Static
1829
+
1830
+ static mdk_runtime_EnvironmentVariable_ref: -> { nil }
1831
+
1832
+
1833
+
1834
+ def initialize(variableName, value)
1835
+
1836
+ self.__init_fields__
1837
+ (self).variableName = variableName
1838
+ (self)._value = value
1839
+
1840
+ nil
1841
+ end
1842
+
1843
+
1844
+
1845
+
1846
+ def isDefined()
1847
+
1848
+ return (self.get()) != (nil)
1849
+
1850
+ nil
1851
+ end
1852
+
1853
+ def get()
1854
+
1855
+ return (self)._value
1856
+
1857
+ nil
1858
+ end
1859
+
1860
+ def orElseGet(alternative)
1861
+
1862
+ result = self.get()
1863
+ if ((result) != (nil))
1864
+ return result
1865
+ else
1866
+ return alternative
1867
+ end
1868
+
1869
+ nil
1870
+ end
1871
+
1872
+ def _getClass()
1873
+
1874
+ return "mdk_runtime.EnvironmentVariable"
1875
+
1876
+ nil
1877
+ end
1878
+
1879
+ def _getField(name)
1880
+
1881
+ if ((name) == ("variableName"))
1882
+ return (self).variableName
1883
+ end
1884
+ if ((name) == ("_value"))
1885
+ return (self)._value
1886
+ end
1887
+ return nil
1888
+
1889
+ nil
1890
+ end
1891
+
1892
+ def _setField(name, value)
1893
+
1894
+ if ((name) == ("variableName"))
1895
+ (self).variableName = ::DatawireQuarkCore.cast(value) { ::String }
1896
+ end
1897
+ if ((name) == ("_value"))
1898
+ (self)._value = ::DatawireQuarkCore.cast(value) { ::String }
1899
+ end
1900
+
1901
+ nil
1902
+ end
1903
+
1904
+ def __init_fields__()
1905
+
1906
+ self.variableName = nil
1907
+ self._value = nil
1908
+
1909
+ nil
1910
+ end
1911
+
1912
+
1913
+ end
1914
+ EnvironmentVariable.unlazy_statics
1915
+
1916
+ def self.EnvironmentVariables; EnvironmentVariables; end
1917
+ ##
1918
+ # Inspect process environment variables.
1919
+
1920
+ class EnvironmentVariables < ::DatawireQuarkCore::QuarkObject
1921
+ extend ::DatawireQuarkCore::Static
1922
+
1923
+ static mdk_runtime_EnvironmentVariables_ref: -> { nil }
1924
+
1925
+
1926
+
1927
+ def initialize()
1928
+ self.__init_fields__
1929
+
1930
+ nil
1931
+ end
1932
+
1933
+
1934
+
1935
+
1936
+ ##
1937
+ # Return an EnvironmentVariable instance for the given var.
1938
+
1939
+ def var(name)
1940
+ raise NotImplementedError, '`EnvironmentVariables.var` is an abstract method'
1941
+
1942
+ nil
1943
+ end
1944
+
1945
+ def __init_fields__()
1946
+
1947
+
1948
+ nil
1949
+ end
1950
+
1951
+
1952
+ end
1953
+ EnvironmentVariables.unlazy_statics
1954
+
1955
+ def self.RealEnvVars; RealEnvVars; end
1956
+ ##
1957
+ # Use real environment variables.
1958
+
1959
+ class RealEnvVars < ::DatawireQuarkCore::QuarkObject
1960
+ extend ::DatawireQuarkCore::Static
1961
+
1962
+ static mdk_runtime_RealEnvVars_ref: -> { nil }
1963
+
1964
+
1965
+
1966
+ def initialize()
1967
+ self.__init_fields__
1968
+
1969
+ nil
1970
+ end
1971
+
1972
+
1973
+
1974
+
1975
+ def var(name)
1976
+
1977
+ return ::Quark.mdk_runtime.EnvironmentVariable.new(name, ::Quark.quark.os.Environment.getEnvironment().__get__(name))
1978
+
1979
+ nil
1980
+ end
1981
+
1982
+ def _getClass()
1983
+
1984
+ return "mdk_runtime.RealEnvVars"
1985
+
1986
+ nil
1987
+ end
1988
+
1989
+ def _getField(name)
1990
+
1991
+ return nil
1992
+
1993
+ nil
1994
+ end
1995
+
1996
+ def _setField(name, value)
1997
+
1998
+ nil
1999
+
2000
+ nil
2001
+ end
2002
+
2003
+ def __init_fields__()
2004
+
2005
+
2006
+ nil
2007
+ end
2008
+
2009
+
2010
+ end
2011
+ RealEnvVars.unlazy_statics
2012
+
2013
+ def self.FakeEnvVars; FakeEnvVars; end
2014
+ ##
2015
+ # Testing fake for EnvironmentVariables.
2016
+
2017
+ class FakeEnvVars < ::DatawireQuarkCore::QuarkObject
2018
+ attr_accessor :env
2019
+ extend ::DatawireQuarkCore::Static
2020
+
2021
+ static mdk_runtime_FakeEnvVars_ref: -> { nil }
2022
+
2023
+
2024
+
2025
+ def initialize()
2026
+ self.__init_fields__
2027
+
2028
+ nil
2029
+ end
2030
+
2031
+
2032
+
2033
+
2034
+ def set(name, value)
2035
+
2036
+ ((self).env)[name] = (value)
2037
+
2038
+ nil
2039
+ end
2040
+
2041
+ def var(name)
2042
+
2043
+ value = ::DatawireQuarkCore.cast(nil) { ::String }
2044
+ if (((self).env).key?(name))
2045
+ value = ((self).env)[name]
2046
+ end
2047
+ return ::Quark.mdk_runtime.EnvironmentVariable.new(name, value)
2048
+
2049
+ nil
2050
+ end
2051
+
2052
+ def _getClass()
2053
+
2054
+ return "mdk_runtime.FakeEnvVars"
2055
+
2056
+ nil
2057
+ end
2058
+
2059
+ def _getField(name)
2060
+
2061
+ if ((name) == ("env"))
2062
+ return (self).env
2063
+ end
2064
+ return nil
2065
+
2066
+ nil
2067
+ end
2068
+
2069
+ def _setField(name, value)
2070
+
2071
+ if ((name) == ("env"))
2072
+ (self).env = ::DatawireQuarkCore.cast(value) { ::Hash }
2073
+ end
2074
+
2075
+ nil
2076
+ end
2077
+
2078
+ def __init_fields__()
2079
+
2080
+ self.env = {}
2081
+
2082
+ nil
2083
+ end
2084
+
2085
+
2086
+ end
2087
+ FakeEnvVars.unlazy_statics
2088
+
2089
+ ##
2090
+ # Create a MDKRuntime with the default configuration and start its actors.
2091
+
2092
+ def self.defaultRuntime()
2093
+
2094
+ runtime = ::Quark.mdk_runtime.MDKRuntime.new()
2095
+ (runtime).dependencies.registerService("envvar", ::Quark.mdk_runtime.RealEnvVars.new())
2096
+ timeService = ::Quark.mdk_runtime.QuarkRuntimeTime.new()
2097
+ websockets = ::Quark.mdk_runtime.QuarkRuntimeWebSockets.new()
2098
+ (runtime).dependencies.registerService("time", timeService)
2099
+ (runtime).dependencies.registerService("schedule", timeService)
2100
+ (runtime).dependencies.registerService("websockets", websockets)
2101
+ fileActor = ::Quark.mdk_runtime.files.FileActorImpl.new(runtime)
2102
+ (runtime).dependencies.registerService("files", fileActor)
2103
+ (runtime).dispatcher.startActor(timeService)
2104
+ (runtime).dispatcher.startActor(websockets)
2105
+ (runtime).dispatcher.startActor(fileActor)
2106
+ return runtime
2107
+
2108
+
2109
+ nil
2110
+ end
2111
+
2112
+ def self.fakeRuntime()
2113
+
2114
+ runtime = ::Quark.mdk_runtime.MDKRuntime.new()
2115
+ (runtime).dependencies.registerService("envvar", ::Quark.mdk_runtime.FakeEnvVars.new())
2116
+ timeService = ::Quark.mdk_runtime.FakeTime.new()
2117
+ websockets = ::Quark.mdk_runtime.FakeWebSockets.new()
2118
+ (runtime).dependencies.registerService("time", timeService)
2119
+ (runtime).dependencies.registerService("schedule", timeService)
2120
+ (runtime).dependencies.registerService("websockets", websockets)
2121
+ fileActor = ::Quark.mdk_runtime.files.FileActorImpl.new(runtime)
2122
+ (runtime).dependencies.registerService("files", fileActor)
2123
+ (runtime).dispatcher.startActor(timeService)
2124
+ (runtime).dispatcher.startActor(websockets)
2125
+ (runtime).dispatcher.startActor(fileActor)
2126
+ return runtime
2127
+
2128
+
2129
+ nil
2130
+ end
2131
+
2132
+
2133
+
2134
+ end # module MdkRuntime
2135
+ end # module Quark