cosmos 3.5.3 → 3.6.0
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.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Manifest.txt +3 -0
- data/autohotkey/procedures/script_test.rb +4 -0
- data/autohotkey/tools/script_runner2.ahk +13 -0
- data/cosmos.gemspec +2 -2
- data/data/crc.txt +17 -17
- data/demo/config/data/crc.txt +10 -7
- data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
- data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +19 -84
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +27 -110
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +3 -220
- data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +1 -1
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +1 -1
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +1 -1
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +1 -1
- data/lib/cosmos/config/config_parser.rb +54 -1
- data/lib/cosmos/gui/utilities/script_module_gui.rb +31 -20
- data/lib/cosmos/io/json_drb.rb +33 -23
- data/lib/cosmos/io/json_drb_object.rb +4 -1
- data/lib/cosmos/io/tcpip_server.rb +1 -1
- data/lib/cosmos/packets/packet_config.rb +5 -1
- data/lib/cosmos/packets/parsers/macro_parser.rb +1 -1
- data/lib/cosmos/script/scripting.rb +28 -0
- data/lib/cosmos/streams/tcpip_socket_stream.rb +72 -19
- data/lib/cosmos/system/target.rb +16 -2
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +28 -17
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +14 -2
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +27 -20
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +2 -2
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +40 -36
- data/lib/cosmos/version.rb +5 -5
- data/spec/config/config_parser_spec.rb +1 -1
- data/spec/io/json_drb_spec.rb +7 -21
- data/spec/packets/packet_config_spec.rb +12 -12
- data/spec/packets/parsers/format_string_parser_spec.rb +3 -3
- data/spec/packets/parsers/limits_parser_spec.rb +10 -10
- data/spec/packets/parsers/limits_response_parser_spec.rb +2 -2
- data/spec/packets/parsers/macro_parser_spec.rb +6 -6
- data/spec/packets/parsers/packet_parser_spec.rb +1 -1
- data/spec/packets/parsers/processor_parser_spec.rb +2 -2
- data/spec/packets/parsers/state_parser_spec.rb +1 -1
- data/spec/script/scripting_spec.rb +23 -0
- data/spec/streams/tcpip_socket_stream_spec.rb +28 -0
- data/spec/system/system_spec.rb +20 -20
- data/spec/system/target_spec.rb +10 -10
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +30 -22
- metadata +9 -6
@@ -25,224 +25,7 @@ TABLE "TLM Monitoring" "Telemetry Monitoring Table" TWO_DIMENSIONAL BIG_ENDIAN 4
|
|
25
25
|
STATE UNSIGNED 1
|
26
26
|
STATE SIGNED 2
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
32
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
33
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
34
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
35
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
36
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
37
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
38
|
-
|
39
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
40
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
41
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
42
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
43
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
44
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
45
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
46
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
47
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
48
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
49
|
-
|
50
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
51
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
52
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
53
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
54
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
55
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
56
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
57
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
58
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
59
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
60
|
-
|
61
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
62
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
63
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
64
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
65
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
66
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
67
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
68
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
69
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
70
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
71
|
-
|
72
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
73
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
74
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
75
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
76
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
77
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
78
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
79
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
80
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
81
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
82
|
-
|
83
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
84
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
85
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
86
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
87
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
88
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
89
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
90
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
91
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
92
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
93
|
-
|
94
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
95
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
96
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
97
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
98
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
99
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
100
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
101
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
102
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
103
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
104
|
-
|
105
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
106
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
107
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
108
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
109
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
110
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
111
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
112
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
113
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
114
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
115
|
-
|
116
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
117
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
118
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
119
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
120
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
121
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
122
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
123
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
124
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
125
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
126
|
-
|
127
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
128
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
129
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
130
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
131
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
132
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
133
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
134
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
135
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
136
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
137
|
-
|
138
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
139
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
140
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
141
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
142
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
143
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
144
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
145
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
146
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
147
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
148
|
-
|
149
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
150
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
151
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
152
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
153
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
154
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
155
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
156
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
157
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
158
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
159
|
-
|
160
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
161
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
162
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
163
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
164
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
165
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
166
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
167
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
168
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
169
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
170
|
-
|
171
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
172
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
173
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
174
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
175
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
176
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
177
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
178
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
179
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
180
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
181
|
-
|
182
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
183
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
184
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
185
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
186
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
187
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
188
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
189
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
190
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
191
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
192
|
-
|
193
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
194
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
195
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
196
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
197
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
198
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
199
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
200
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
201
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
202
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
203
|
-
|
204
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
205
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
206
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
207
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
208
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
209
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
210
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
211
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
212
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
213
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
214
|
-
|
215
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
216
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
217
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
218
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
219
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
220
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
221
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
222
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
223
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
224
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
225
|
-
|
226
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
227
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
228
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
229
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
230
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
231
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
232
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
233
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
234
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
235
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
236
|
-
|
237
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
238
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
239
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
240
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
241
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
242
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
243
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
244
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
245
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
246
|
-
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
247
|
-
|
28
|
+
<% 200.times do %>
|
29
|
+
DEFAULT 0x0 0 BITS 0x0 0 LESS_THAN NO_ACTION_REQUIRED ALL_MODES UNSIGNED
|
30
|
+
<% end %>
|
248
31
|
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
<%= render "_adcs_time.txt" %>
|
2
2
|
ITEM INST ADCS Q2 RAW
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
<%= render "_adcs_time.txt" %>
|
2
2
|
ITEM INST ADCS Q3 RAW
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
<%= render "_adcs_time.txt" %>
|
2
2
|
ITEM INST ADCS Q4 RAW
|
@@ -9,6 +9,7 @@
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
10
10
|
|
11
11
|
require 'cosmos/ext/config_parser'
|
12
|
+
require 'erb'
|
12
13
|
|
13
14
|
module Cosmos
|
14
15
|
|
@@ -143,6 +144,18 @@ module Cosmos
|
|
143
144
|
return Error.new(self, message, usage, url)
|
144
145
|
end
|
145
146
|
|
147
|
+
# Called by the ERB template to render a partial
|
148
|
+
def render(template_name, options = {})
|
149
|
+
b = binding
|
150
|
+
if options[:locals]
|
151
|
+
options[:locals].each do |key, value|
|
152
|
+
eval("#{key} = #{value}", b)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
# Assume the file is there. If not we raise a pretty obvious error
|
156
|
+
ERB.new(File.read(File.join(File.dirname(@filename), template_name))).result(b)
|
157
|
+
end
|
158
|
+
|
146
159
|
# Processes a file and yields |config| to the given block
|
147
160
|
#
|
148
161
|
# @param filename [String] The full name and path of the configuration file
|
@@ -158,8 +171,15 @@ module Cosmos
|
|
158
171
|
remove_quotes = true,
|
159
172
|
&block)
|
160
173
|
@filename = filename
|
161
|
-
file =
|
174
|
+
file = nil
|
175
|
+
unparsed_data = nil
|
162
176
|
begin
|
177
|
+
# Create a temp file where we can write the ERB parsed output
|
178
|
+
file = Tempfile.new("parsed_#{File.basename(filename)}")
|
179
|
+
unparsed_data = File.read(@filename)
|
180
|
+
file.write(ERB.new(unparsed_data).result(binding))
|
181
|
+
file.rewind
|
182
|
+
|
163
183
|
size = file.stat.size.to_f
|
164
184
|
|
165
185
|
# Callbacks for beginning of parsing
|
@@ -173,6 +193,13 @@ module Cosmos
|
|
173
193
|
size,
|
174
194
|
PARSING_REGEX,
|
175
195
|
&block)
|
196
|
+
rescue Exception => e
|
197
|
+
debug_file = create_debug_output_file(filename, file, unparsed_data, e)
|
198
|
+
if debug_file
|
199
|
+
raise e, "#{e}\nDebug output in #{debug_file}", e.backtrace
|
200
|
+
else
|
201
|
+
raise e
|
202
|
+
end
|
176
203
|
ensure
|
177
204
|
file.close unless file.closed?
|
178
205
|
end
|
@@ -309,6 +336,32 @@ module Cosmos
|
|
309
336
|
|
310
337
|
protected
|
311
338
|
|
339
|
+
# Writes the parsed results for debugging if we had an error parsing
|
340
|
+
def create_debug_output_file(filename, file, unparsed_data, exception)
|
341
|
+
begin
|
342
|
+
debug_file = nil
|
343
|
+
tmp_folder = File.join(Cosmos::USERPATH, 'outputs', 'tmp')
|
344
|
+
tmp_folder = Cosmos::USERPATH unless File.exist?(tmp_folder)
|
345
|
+
debug_file = File.join(tmp_folder, "parser_error_#{File.basename(filename)}")
|
346
|
+
File.open(debug_file, 'w') do |save_file|
|
347
|
+
save_file.puts exception.formatted
|
348
|
+
save_file.puts "\nParsed Data (will only be present if parse ran successfully):"
|
349
|
+
save_file.puts
|
350
|
+
if file
|
351
|
+
file.rewind
|
352
|
+
save_file.puts file.read
|
353
|
+
end
|
354
|
+
save_file.puts "\nUnparsed Data:"
|
355
|
+
save_file.puts
|
356
|
+
save_file.puts unparsed_data if unparsed_data
|
357
|
+
end
|
358
|
+
rescue Exception
|
359
|
+
# Oh well - we tried
|
360
|
+
debug_file = nil
|
361
|
+
end
|
362
|
+
debug_file
|
363
|
+
end
|
364
|
+
|
312
365
|
# Iterates over each line of the io object and yields the keyword and
|
313
366
|
# parameters
|
314
367
|
#~ def parse_loop(
|
@@ -71,6 +71,30 @@ module Cosmos
|
|
71
71
|
|
72
72
|
@@qt_boolean = Qt::Boolean.new
|
73
73
|
|
74
|
+
def _get_main_thread_gui
|
75
|
+
result = nil
|
76
|
+
Qt.execute_in_main_thread(true, 0.05) do
|
77
|
+
result = yield(get_cmd_tlm_gui_window())
|
78
|
+
end
|
79
|
+
return result
|
80
|
+
end
|
81
|
+
|
82
|
+
def save_file_dialog(directory = Cosmos::USERPATH, message = "Save File")
|
83
|
+
_get_main_thread_gui {|window| Qt::FileDialog.getSaveFileName(window, message, directory) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def open_file_dialog(directory = Cosmos::USERPATH, message = "Open File")
|
87
|
+
_get_main_thread_gui {|window| Qt::FileDialog.getOpenFileName(window, message, directory) }
|
88
|
+
end
|
89
|
+
|
90
|
+
def open_files_dialog(directory = Cosmos::USERPATH, message = "Open File(s)")
|
91
|
+
_get_main_thread_gui {|window| Qt::FileDialog.getOpenFileNames(window, message, directory) }
|
92
|
+
end
|
93
|
+
|
94
|
+
def open_directory_dialog(directory = Cosmos::USERPATH, message = "Open Directory")
|
95
|
+
_get_main_thread_gui {|window| Qt::FileDialog.getExistingDirectory(window, message, directory) }
|
96
|
+
end
|
97
|
+
|
74
98
|
def ask_string(question, blank_or_default = false, password = false)
|
75
99
|
answer = ''
|
76
100
|
if blank_or_default != true && blank_or_default != false
|
@@ -82,9 +106,7 @@ module Cosmos
|
|
82
106
|
end
|
83
107
|
loop do
|
84
108
|
canceled = false
|
85
|
-
|
86
|
-
window = nil
|
87
|
-
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
109
|
+
_get_main_thread_gui do |window|
|
88
110
|
# Create a special mutable QT variable that can return what button was pressed
|
89
111
|
if password
|
90
112
|
answer = Qt::InputDialog::getText(window, "Ask", question, Qt::LineEdit::Password, default, @@qt_boolean)
|
@@ -113,9 +135,7 @@ module Cosmos
|
|
113
135
|
|
114
136
|
def prompt_dialog_box(title, message)
|
115
137
|
result = nil
|
116
|
-
|
117
|
-
window = nil
|
118
|
-
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
138
|
+
_get_main_thread_gui do |window|
|
119
139
|
msg = Qt::MessageBox.new(window)
|
120
140
|
msg.setIcon(Qt::MessageBox::Warning)
|
121
141
|
msg.setText(message)
|
@@ -149,9 +169,7 @@ module Cosmos
|
|
149
169
|
def prompt_to_continue(string)
|
150
170
|
loop do
|
151
171
|
stop = false
|
152
|
-
|
153
|
-
window = nil
|
154
|
-
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
172
|
+
_get_main_thread_gui do |window|
|
155
173
|
result = Qt::MessageBox::question(window,
|
156
174
|
"COSMOS",
|
157
175
|
"#{string}\n\nOK to Continue?",
|
@@ -175,11 +193,8 @@ module Cosmos
|
|
175
193
|
def prompt_message_box(string, buttons)
|
176
194
|
loop do
|
177
195
|
result = nil
|
178
|
-
|
179
|
-
window = nil
|
180
|
-
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
196
|
+
_get_main_thread_gui do |window|
|
181
197
|
msg = Qt::MessageBox.new(window)
|
182
|
-
|
183
198
|
msg.setText(string)
|
184
199
|
msg.setWindowTitle("Message Box")
|
185
200
|
buttons.each {|text| msg.addButton(text, Qt::MessageBox::AcceptRole)}
|
@@ -250,9 +265,7 @@ module Cosmos
|
|
250
265
|
end
|
251
266
|
|
252
267
|
def _build_dialog(message)
|
253
|
-
|
254
|
-
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
255
|
-
dialog = Qt::Dialog.new(window)
|
268
|
+
dialog = Qt::Dialog.new(get_cmd_tlm_gui_window())
|
256
269
|
dialog.setWindowTitle("Message Box")
|
257
270
|
layout = Qt::VBoxLayout.new
|
258
271
|
layout.setContentsMargins(0,0,0,0)
|
@@ -300,9 +313,7 @@ module Cosmos
|
|
300
313
|
def get_scriptrunner_log_message(title_text = "Script Message Log Text Entry", prompt_text = 'Enter text to log to the script message log')
|
301
314
|
answer = ""
|
302
315
|
canceled = false
|
303
|
-
|
304
|
-
window = nil
|
305
|
-
window = get_cmd_tlm_gui_window() if get_cmd_tlm_gui_window()
|
316
|
+
_get_main_thread_gui do |window|
|
306
317
|
# Create a special mutable QT variable that can return what button was pressed
|
307
318
|
answer = Qt::InputDialog::getText(window, title_text, prompt_text, Qt::LineEdit::Normal, "", @@qt_boolean)
|
308
319
|
# @@qt_boolean is nil if the user presses cancel in the dialog
|
@@ -316,7 +327,7 @@ module Cosmos
|
|
316
327
|
end
|
317
328
|
end
|
318
329
|
|
319
|
-
def set_cmd_tlm_gui_window
|
330
|
+
def set_cmd_tlm_gui_window(window)
|
320
331
|
$cmd_tlm_gui_window = window
|
321
332
|
end
|
322
333
|
|
data/lib/cosmos/io/json_drb.rb
CHANGED
@@ -25,6 +25,7 @@ module Cosmos
|
|
25
25
|
# methods.
|
26
26
|
class JsonDRb
|
27
27
|
MINIMUM_REQUEST_TIME = 0.0001
|
28
|
+
FAST_READ = (RUBY_VERSION > "2.1")
|
28
29
|
|
29
30
|
@@debug = false
|
30
31
|
|
@@ -47,6 +48,7 @@ module Cosmos
|
|
47
48
|
@request_mutex = Mutex.new
|
48
49
|
@client_sockets = []
|
49
50
|
@client_threads = []
|
51
|
+
@client_pipe_writers = []
|
50
52
|
@client_mutex = Mutex.new
|
51
53
|
@thread_reader, @thread_writer = IO.pipe
|
52
54
|
end
|
@@ -68,6 +70,9 @@ module Cosmos
|
|
68
70
|
@client_sockets.each do |client_socket|
|
69
71
|
Cosmos.close_socket(client_socket)
|
70
72
|
end
|
73
|
+
@client_pipe_writers.each do |client_pipe_writer|
|
74
|
+
client_pipe_writer.write('.')
|
75
|
+
end
|
71
76
|
client_threads = @client_threads.clone
|
72
77
|
end
|
73
78
|
|
@@ -80,6 +85,7 @@ module Cosmos
|
|
80
85
|
@client_mutex.synchronize do
|
81
86
|
@client_threads.clear
|
82
87
|
@client_sockets.clear
|
88
|
+
@client_pipe_writers.clear
|
83
89
|
end
|
84
90
|
end
|
85
91
|
|
@@ -95,6 +101,7 @@ module Cosmos
|
|
95
101
|
# CmdTlmServer.
|
96
102
|
def start_service(hostname = nil, port = nil, object = nil)
|
97
103
|
if hostname and port and object
|
104
|
+
@thread_reader, @thread_writer = IO.pipe
|
98
105
|
@object = object
|
99
106
|
hostname = '127.0.0.1'.freeze if (hostname.to_s.upcase == 'LOCALHOST'.freeze)
|
100
107
|
|
@@ -125,14 +132,7 @@ module Cosmos
|
|
125
132
|
rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EINTR, Errno::EWOULDBLOCK
|
126
133
|
read_ready, _ = IO.select([@listen_socket, @thread_reader])
|
127
134
|
if read_ready and read_ready.include?(@thread_reader)
|
128
|
-
|
129
|
-
# Thread should be killed - Cleanout thread_reader first
|
130
|
-
# Don't let this break anything else though
|
131
|
-
@thread_reader.read(1)
|
132
|
-
rescue Exception
|
133
|
-
# Oh well - create a clean pipe in case we need one
|
134
|
-
@thread_reader, @thread_writer = IO.pipe
|
135
|
-
end
|
135
|
+
# Thread should be killed
|
136
136
|
break
|
137
137
|
else
|
138
138
|
retry
|
@@ -191,9 +191,10 @@ module Cosmos
|
|
191
191
|
# @param socket [Socket] The socket to the client
|
192
192
|
# @param data [String] Binary data which has already been read from the
|
193
193
|
# socket.
|
194
|
+
# @param pipe_reader [IO.pipe] Used to break out of select
|
194
195
|
# @return [String] The request message
|
195
|
-
def self.receive_message(socket, data)
|
196
|
-
self.get_at_least_x_bytes_of_data(socket, data, 4)
|
196
|
+
def self.receive_message(socket, data, pipe_reader)
|
197
|
+
self.get_at_least_x_bytes_of_data(socket, data, 4, pipe_reader)
|
197
198
|
if data.length >= 4
|
198
199
|
length = data[0..3].unpack('N'.freeze)[0]
|
199
200
|
data.replace(data[4..-1])
|
@@ -201,7 +202,7 @@ module Cosmos
|
|
201
202
|
return nil
|
202
203
|
end
|
203
204
|
|
204
|
-
self.get_at_least_x_bytes_of_data(socket, data, length)
|
205
|
+
self.get_at_least_x_bytes_of_data(socket, data, length, pipe_reader)
|
205
206
|
if data.length >= length
|
206
207
|
message = data[0..(length - 1)]
|
207
208
|
data.replace(data[length..-1])
|
@@ -214,19 +215,24 @@ module Cosmos
|
|
214
215
|
# @param socket [Socket] The socket to the client
|
215
216
|
# @param current_data [String] Binary data read from the socket
|
216
217
|
# @param required_num_bytes [Integer] The minimum number of bytes to read
|
218
|
+
# @param pipe_reader [IO.pipe] Used to break out of select
|
217
219
|
# before returning
|
218
|
-
def self.get_at_least_x_bytes_of_data(socket, current_data, required_num_bytes)
|
220
|
+
def self.get_at_least_x_bytes_of_data(socket, current_data, required_num_bytes, pipe_reader)
|
219
221
|
while (current_data.length < required_num_bytes)
|
220
|
-
|
221
|
-
data = socket.
|
222
|
-
|
223
|
-
|
224
|
-
|
222
|
+
if FAST_READ
|
223
|
+
data = socket.read_nonblock(65535, exception: false)
|
224
|
+
raise EOFError, 'end of file reached' unless data
|
225
|
+
if data == :wait_readable
|
226
|
+
IO.fast_select([socket, pipe_reader], nil, nil, nil)
|
227
|
+
else
|
228
|
+
current_data << data
|
229
|
+
end
|
230
|
+
else
|
231
|
+
begin
|
232
|
+
current_data << socket.read_nonblock(65535)
|
233
|
+
rescue IO::WaitReadable
|
234
|
+
IO.fast_select([socket, pipe_reader], nil, nil, nil)
|
225
235
|
end
|
226
|
-
current_data << data
|
227
|
-
rescue IO::WaitReadable
|
228
|
-
IO.fast_select([socket], nil, nil, nil)
|
229
|
-
retry
|
230
236
|
end
|
231
237
|
end
|
232
238
|
end
|
@@ -278,19 +284,22 @@ module Cosmos
|
|
278
284
|
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, 1)
|
279
285
|
|
280
286
|
Thread.new(socket) do |my_socket|
|
287
|
+
pipe_reader, pipe_writer = IO.pipe
|
281
288
|
@client_mutex.synchronize do
|
282
289
|
@client_sockets << my_socket
|
283
290
|
@client_threads << Thread.current
|
291
|
+
@client_pipe_writers << pipe_writer
|
284
292
|
end
|
285
293
|
|
286
294
|
data = ''
|
295
|
+
|
287
296
|
begin
|
288
297
|
while true
|
289
298
|
begin
|
290
|
-
request_data = JsonDRb.receive_message(my_socket, data)
|
299
|
+
request_data = JsonDRb.receive_message(my_socket, data, pipe_reader)
|
291
300
|
start_time = Time.now
|
292
301
|
@request_count += 1
|
293
|
-
rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ENOTSOCK
|
302
|
+
rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ENOTSOCK, IOError
|
294
303
|
# Socket was closed
|
295
304
|
break
|
296
305
|
end
|
@@ -309,6 +318,7 @@ module Cosmos
|
|
309
318
|
Cosmos.close_socket(my_socket)
|
310
319
|
@client_sockets.delete(my_socket)
|
311
320
|
@client_threads.delete(Thread.current)
|
321
|
+
@client_pipe_writers.delete(pipe_writer)
|
312
322
|
end
|
313
323
|
end
|
314
324
|
end
|