datawire_mdk 2.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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