cosmos 3.5.1 → 3.5.2
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/.coveralls.yml +1 -1
- data/.gitattributes +3 -3
- data/.gitignore +48 -48
- data/.travis.yml +8 -8
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +10 -10
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1414 -1414
- data/README.md +111 -111
- data/Rakefile +218 -214
- data/autohotkey/config/data/diamond.STL +57 -57
- data/autohotkey/config/system/system.txt +34 -34
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/autohotkey/config/targets/COSMOS/target.txt +5 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
- data/autohotkey/config/targets/INST/screens/array.txt +7 -7
- data/autohotkey/config/targets/INST/screens/block.txt +8 -8
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
- data/autohotkey/config/targets/INST/screens/image.txt +21 -21
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
- data/autohotkey/config/targets/INST/screens/other.txt +25 -25
- data/autohotkey/config/targets/INST/screens/params.txt +25 -25
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
- data/autohotkey/config/targets/INST/target.txt +26 -26
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/autohotkey/config/tools/launcher/launcher.txt +38 -38
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
- data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
- data/autohotkey/lib/example_background_task.rb +42 -42
- data/autohotkey/lib/user_version.rb +3 -3
- data/autohotkey/procedures/clear_util.rb +7 -7
- data/autohotkey/procedures/collect_util.rb +14 -14
- data/autohotkey/procedures/example_test.rb +67 -67
- data/autohotkey/procedures/example_test2.rb +74 -74
- data/autohotkey/procedures/script_test.rb +17 -17
- data/autohotkey/procedures/syntax_error.rb +18 -18
- data/autohotkey/tools/CmdExtractorAHK +16 -16
- data/autohotkey/tools/CmdSender +14 -14
- data/autohotkey/tools/CmdSenderAHK +18 -18
- data/autohotkey/tools/CmdTlmServer +14 -14
- data/autohotkey/tools/CmdTlmServerAHK +28 -28
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
- data/autohotkey/tools/DataViewer +14 -14
- data/autohotkey/tools/DataViewerAHK +17 -17
- data/autohotkey/tools/HandbookCreatorAHK +20 -20
- data/autohotkey/tools/LauncherAHK +17 -17
- data/autohotkey/tools/LimitsMonitorAHK +20 -20
- data/autohotkey/tools/OpenGLBuilderAHK +24 -24
- data/autohotkey/tools/PacketViewer +14 -14
- data/autohotkey/tools/PacketViewerAHK +18 -18
- data/autohotkey/tools/PacketViewerAHK2 +17 -17
- data/autohotkey/tools/Replay +14 -14
- data/autohotkey/tools/ReplayAHK +17 -17
- data/autohotkey/tools/ScriptRunner +14 -14
- data/autohotkey/tools/ScriptRunnerAHK +20 -20
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
- data/autohotkey/tools/TableManager +14 -14
- data/autohotkey/tools/TableManagerAHK +30 -30
- data/autohotkey/tools/TestRunner +15 -15
- data/autohotkey/tools/TestRunnerAHK +17 -17
- data/autohotkey/tools/TestRunnerAHK2 +17 -17
- data/autohotkey/tools/TestRunnerAHK3 +17 -17
- data/autohotkey/tools/TestRunnerAHK4 +17 -17
- data/autohotkey/tools/TestRunnerAHK5 +17 -17
- data/autohotkey/tools/TestRunnerAHK6 +17 -17
- data/autohotkey/tools/TlmExtractor +15 -15
- data/autohotkey/tools/TlmExtractorAHK +19 -19
- data/autohotkey/tools/TlmExtractorAHK2 +16 -16
- data/autohotkey/tools/TlmExtractorAHK3 +16 -16
- data/autohotkey/tools/TlmGrapher +14 -14
- data/autohotkey/tools/TlmGrapherAHK +19 -19
- data/autohotkey/tools/TlmGrapherAHK2 +23 -23
- data/autohotkey/tools/TlmGrapherAHK3 +17 -17
- data/autohotkey/tools/TlmGrapherAHK4 +17 -17
- data/autohotkey/tools/TlmViewer +14 -14
- data/autohotkey/tools/TlmViewerAHK +28 -28
- data/autohotkey/tools/TlmViewerAHK2 +22 -22
- data/autohotkey/tools/TlmViewerAHK3 +23 -23
- data/autohotkey/tools/TlmViewerAHK4 +22 -22
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +33 -33
- data/autohotkey/tools/cmd_sender.ahk +182 -182
- data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +141 -141
- data/autohotkey/tools/handbook_creator.ahk +32 -32
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +123 -123
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +196 -196
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +104 -104
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +38 -38
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -262
- data/autohotkey/tools/test_runner2.ahk +53 -53
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/test_runner5.ahk +8 -8
- data/autohotkey/tools/test_runner6.ahk +5 -5
- data/autohotkey/tools/tlm_extractor.ahk +296 -296
- data/autohotkey/tools/tlm_grapher.ahk +660 -660
- data/autohotkey/tools/tlm_grapher2.ahk +115 -115
- data/autohotkey/tools/tlm_grapher3.ahk +24 -24
- data/autohotkey/tools/tlm_viewer.ahk +133 -133
- data/autohotkey/tools/tlm_viewer2.ahk +50 -50
- data/autohotkey/tools/tlm_viewer4.ahk +4 -4
- data/autohotkey/tools/tlm_viewer5.ahk +20 -20
- data/bin/cosmos +96 -96
- data/bin/cstol_converter +1166 -1166
- data/bin/rubysloc +85 -85
- data/cosmos.gemspec +99 -99
- data/data/about.txt +4 -4
- data/data/crc.txt +326 -326
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +10 -10
- data/demo/Launcher +16 -16
- data/demo/Launcher.bat +0 -0
- data/demo/Rakefile +77 -77
- data/demo/config/data/crc.txt +224 -226
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +35 -35
- data/demo/config/system/system2.txt +33 -33
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/demo/config/targets/COSMOS/screens/version.txt +19 -19
- data/demo/config/targets/COSMOS/target.txt +11 -11
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
- data/demo/config/targets/EXAMPLE/target.txt +6 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
- data/demo/config/targets/INST/screens/adcs.txt +46 -46
- data/demo/config/targets/INST/screens/array.txt +15 -15
- data/demo/config/targets/INST/screens/block.txt +8 -8
- data/demo/config/targets/INST/screens/commanding.txt +30 -30
- data/demo/config/targets/INST/screens/graphs.txt +14 -14
- data/demo/config/targets/INST/screens/ground.txt +25 -25
- data/demo/config/targets/INST/screens/hs.txt +44 -44
- data/demo/config/targets/INST/screens/latest.txt +23 -23
- data/demo/config/targets/INST/screens/other.txt +29 -29
- data/demo/config/targets/INST/screens/tabs.txt +70 -70
- data/demo/config/targets/INST/target.txt +33 -33
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/demo/config/tools/launcher/launcher.txt +45 -45
- data/demo/config/tools/launcher/launcher2.txt +45 -45
- data/demo/config/tools/script_runner/script_runner.txt +3 -3
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/demo/config/tools/test_runner/test_runner.txt +17 -17
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
- data/demo/lib/example_background_task.rb +57 -57
- data/demo/lib/example_target.rb +113 -113
- data/demo/lib/scpi_target.rb +74 -74
- data/demo/lib/user_version.rb +3 -3
- data/demo/procedures/checks.rb +11 -11
- data/demo/procedures/clear_util.rb +7 -7
- data/demo/procedures/collect.rb +18 -18
- data/demo/procedures/collect_util.rb +14 -14
- data/demo/procedures/cosmos_api_test.rb +293 -293
- data/demo/procedures/disconnect.rb +29 -29
- data/demo/procedures/example_test.rb +183 -183
- data/demo/procedures/plot_test.rb +8 -8
- data/demo/procedures/run_example_test.rb +3 -3
- data/demo/procedures/test.rb +51 -51
- data/demo/tools/CmdExtractor +16 -16
- data/demo/tools/CmdExtractor.bat +0 -0
- data/demo/tools/CmdSender +16 -16
- data/demo/tools/CmdSender.bat +0 -0
- data/demo/tools/CmdTlmServer +16 -16
- data/demo/tools/CmdTlmServer.bat +0 -0
- data/demo/tools/DataViewer +16 -16
- data/demo/tools/DataViewer.bat +0 -0
- data/demo/tools/ExampleTarget +16 -16
- data/demo/tools/ExampleTarget.bat +0 -0
- data/demo/tools/HandbookCreator +16 -16
- data/demo/tools/HandbookCreator.bat +0 -0
- data/demo/tools/Launcher +16 -16
- data/demo/tools/Launcher.bat +0 -0
- data/demo/tools/LimitsMonitor +16 -16
- data/demo/tools/LimitsMonitor.bat +0 -0
- data/demo/tools/OpenGLBuilder +16 -16
- data/demo/tools/OpenGLBuilder.bat +0 -0
- data/demo/tools/PacketViewer +16 -16
- data/demo/tools/PacketViewer.bat +0 -0
- data/demo/tools/Replay +16 -16
- data/demo/tools/Replay.bat +0 -0
- data/demo/tools/ScpiTarget +16 -16
- data/demo/tools/ScpiTarget.bat +0 -0
- data/demo/tools/ScriptRunner +16 -16
- data/demo/tools/ScriptRunner.bat +0 -0
- data/demo/tools/TableManager +16 -16
- data/demo/tools/TableManager.bat +0 -0
- data/demo/tools/TestRunner +16 -16
- data/demo/tools/TestRunner.bat +0 -0
- data/demo/tools/TlmExtractor +16 -16
- data/demo/tools/TlmExtractor.bat +0 -0
- data/demo/tools/TlmGrapher +16 -16
- data/demo/tools/TlmGrapher.bat +0 -0
- data/demo/tools/TlmViewer +16 -16
- data/demo/tools/TlmViewer.bat +0 -0
- data/demo/tools/ToolLaunch.bat +14 -5
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/tool_launch.rb +38 -38
- data/ext/cosmos/ext/array/array.c +111 -111
- data/ext/cosmos/ext/array/extconf.rb +13 -13
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
- data/ext/cosmos/ext/crc/crc.c +341 -341
- data/ext/cosmos/ext/crc/extconf.rb +12 -12
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
- data/ext/cosmos/ext/packet/extconf.rb +13 -13
- data/ext/cosmos/ext/packet/packet.c +339 -339
- data/ext/cosmos/ext/platform/extconf.rb +13 -13
- data/ext/cosmos/ext/platform/platform.c +101 -101
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
- data/ext/cosmos/ext/string/extconf.rb +13 -13
- data/ext/cosmos/ext/string/string.c +49 -49
- data/ext/cosmos/ext/structure/structure.c +1428 -1428
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
- data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +10 -10
- data/install/Launcher +16 -16
- data/install/Launcher.bat +0 -0
- data/install/Rakefile +77 -77
- data/install/config/data/crc.txt +151 -151
- data/install/config/system/system.txt +29 -29
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/install/config/targets/COSMOS/target.txt +8 -8
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/install/config/tools/data_viewer/data_viewer.txt +3 -3
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/install/config/tools/launcher/launcher.txt +40 -40
- data/install/config/tools/script_runner/script_runner.txt +3 -3
- data/install/config/tools/test_runner/test_runner.txt +8 -8
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/install/lib/user_version.rb +3 -3
- data/install/tools/CmdExtractor +16 -16
- data/install/tools/CmdExtractor.bat +0 -0
- data/install/tools/CmdSender +16 -16
- data/install/tools/CmdSender.bat +0 -0
- data/install/tools/CmdTlmServer +16 -16
- data/install/tools/CmdTlmServer.bat +0 -0
- data/install/tools/DataViewer +16 -16
- data/install/tools/DataViewer.bat +0 -0
- data/install/tools/HandbookCreator +16 -16
- data/install/tools/HandbookCreator.bat +0 -0
- data/install/tools/Launcher +16 -16
- data/install/tools/Launcher.bat +0 -0
- data/install/tools/LimitsMonitor +16 -16
- data/install/tools/LimitsMonitor.bat +0 -0
- data/install/tools/OpenGLBuilder +16 -16
- data/install/tools/OpenGLBuilder.bat +0 -0
- data/install/tools/PacketViewer +16 -16
- data/install/tools/PacketViewer.bat +0 -0
- data/install/tools/Replay +16 -16
- data/install/tools/Replay.bat +0 -0
- data/install/tools/ScriptRunner +16 -16
- data/install/tools/ScriptRunner.bat +0 -0
- data/install/tools/TableManager +16 -16
- data/install/tools/TableManager.bat +0 -0
- data/install/tools/TestRunner +16 -16
- data/install/tools/TestRunner.bat +0 -0
- data/install/tools/TlmExtractor +16 -16
- data/install/tools/TlmExtractor.bat +0 -0
- data/install/tools/TlmGrapher +16 -16
- data/install/tools/TlmGrapher.bat +0 -0
- data/install/tools/TlmViewer +16 -16
- data/install/tools/TlmViewer.bat +0 -0
- data/install/tools/ToolLaunch.bat +14 -5
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/tool_launch.rb +38 -38
- data/lib/cosmos.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
- data/lib/cosmos/config/config_parser.rb +324 -324
- data/lib/cosmos/conversions.rb +13 -13
- data/lib/cosmos/conversions/conversion.rb +47 -47
- data/lib/cosmos/conversions/generic_conversion.rb +55 -55
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
- data/lib/cosmos/conversions/processor_conversion.rb +46 -46
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
- data/lib/cosmos/core_ext.rb +18 -18
- data/lib/cosmos/core_ext/array.rb +354 -354
- data/lib/cosmos/core_ext/class.rb +51 -51
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
- data/lib/cosmos/core_ext/exception.rb +52 -52
- data/lib/cosmos/core_ext/file.rb +75 -75
- data/lib/cosmos/core_ext/hash.rb +28 -28
- data/lib/cosmos/core_ext/io.rb +75 -75
- data/lib/cosmos/core_ext/kernel.rb +38 -38
- data/lib/cosmos/core_ext/math.rb +119 -119
- data/lib/cosmos/core_ext/matrix.rb +146 -146
- data/lib/cosmos/core_ext/objectspace.rb +29 -29
- data/lib/cosmos/core_ext/range.rb +22 -22
- data/lib/cosmos/core_ext/socket.rb +32 -32
- data/lib/cosmos/core_ext/string.rb +311 -311
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +448 -448
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
- data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
- data/lib/cosmos/gui/dialogs/splash.rb +135 -135
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
- data/lib/cosmos/gui/line_graph/lines.rb +290 -290
- data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
- data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
- data/lib/cosmos/gui/opengl/opengl.rb +8 -8
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
- data/lib/cosmos/gui/qt.rb +860 -860
- data/lib/cosmos/gui/qt_tool.rb +380 -380
- data/lib/cosmos/gui/text/completion.rb +381 -381
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
- data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
- data/lib/cosmos/interfaces.rb +11 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
- data/lib/cosmos/interfaces/interface.rb +225 -225
- data/lib/cosmos/interfaces/linc_interface.rb +360 -360
- data/lib/cosmos/interfaces/serial_interface.rb +76 -76
- data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
- data/lib/cosmos/interfaces/stream_interface.rb +136 -136
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
- data/lib/cosmos/interfaces/udp_interface.rb +161 -161
- data/lib/cosmos/io/buffered_file.rb +11 -11
- data/lib/cosmos/io/cosmos_snmp.rb +50 -50
- data/lib/cosmos/io/io_multiplexer.rb +89 -89
- data/lib/cosmos/io/json_drb.rb +376 -376
- data/lib/cosmos/io/json_drb_object.rb +198 -198
- data/lib/cosmos/io/json_rpc.rb +365 -365
- data/lib/cosmos/io/posix_serial_driver.rb +145 -145
- data/lib/cosmos/io/raw_logger.rb +174 -174
- data/lib/cosmos/io/raw_logger_pair.rb +71 -71
- data/lib/cosmos/io/serial_driver.rb +85 -85
- data/lib/cosmos/io/stderr.rb +36 -36
- data/lib/cosmos/io/stdout.rb +36 -36
- data/lib/cosmos/io/tcpip_server.rb +571 -571
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +145 -145
- data/lib/cosmos/packet_logs.rb +7 -7
- data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
- data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +634 -634
- data/lib/cosmos/packets/commands.rb +293 -293
- data/lib/cosmos/packets/limits.rb +267 -267
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +786 -786
- data/lib/cosmos/packets/packet_config.rb +482 -482
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
- data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
- data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
- data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
- data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
- data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
- data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
- data/lib/cosmos/packets/structure.rb +458 -458
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +350 -350
- data/lib/cosmos/processors.rb +6 -6
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
- data/lib/cosmos/processors/processor.rb +71 -71
- data/lib/cosmos/processors/statistics_processor.rb +65 -65
- data/lib/cosmos/processors/watermark_processor.rb +44 -44
- data/lib/cosmos/script.rb +9 -9
- data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
- data/lib/cosmos/script/commands.rb +184 -184
- data/lib/cosmos/script/extract.rb +123 -123
- data/lib/cosmos/script/limits.rb +114 -114
- data/lib/cosmos/script/script.rb +76 -76
- data/lib/cosmos/script/scripting.rb +897 -897
- data/lib/cosmos/script/telemetry.rb +174 -174
- data/lib/cosmos/script/tools.rb +138 -138
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
- data/lib/cosmos/streams/serial_stream.rb +157 -157
- data/lib/cosmos/streams/stream.rb +63 -63
- data/lib/cosmos/streams/stream_protocol.rb +373 -373
- data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
- data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
- data/lib/cosmos/system.rb +4 -4
- data/lib/cosmos/system/system.rb +618 -618
- data/lib/cosmos/system/target.rb +197 -197
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
- data/lib/cosmos/tools/launcher/launcher.rb +188 -188
- data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
- data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
- data/lib/cosmos/tools/replay/replay.rb +501 -501
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
- data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
- data/lib/cosmos/tools/table_manager/table.rb +70 -70
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
- data/lib/cosmos/tools/test_runner/test.rb +539 -539
- data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
- data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
- data/lib/cosmos/top_level.rb +759 -759
- data/lib/cosmos/utilities.rb +11 -11
- data/lib/cosmos/utilities/crc.rb +166 -166
- data/lib/cosmos/utilities/csv.rb +83 -83
- data/lib/cosmos/utilities/logger.rb +137 -137
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
- data/lib/cosmos/utilities/message_log.rb +79 -79
- data/lib/cosmos/utilities/quaternion.rb +258 -258
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
- data/lib/cosmos/utilities/simulated_target.rb +99 -99
- data/lib/cosmos/utilities/sleeper.rb +44 -44
- data/lib/cosmos/version.rb +12 -12
- data/lib/cosmos/win32/excel.rb +66 -66
- data/lib/cosmos/win32/win32.rb +387 -387
- data/lib/cosmos/win32/win32_main.rb +321 -321
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +0 -0
- data/spec/ccsds/ccsds_packet_spec.rb +67 -67
- data/spec/ccsds/ccsds_parser_spec.rb +148 -148
- data/spec/config/config_parser_spec.rb +322 -322
- data/spec/conversions/conversion_spec.rb +31 -31
- data/spec/conversions/generic_conversion_spec.rb +45 -45
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
- data/spec/conversions/polynomial_conversion_spec.rb +40 -40
- data/spec/conversions/processor_conversion_spec.rb +45 -45
- data/spec/conversions/received_count_conversion_spec.rb +43 -43
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
- data/spec/core_ext/array_spec.rb +186 -186
- data/spec/core_ext/class_spec.rb +36 -36
- data/spec/core_ext/cosmos_io_spec.rb +77 -77
- data/spec/core_ext/exception_spec.rb +91 -91
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +24 -24
- data/spec/core_ext/io_spec.rb +46 -46
- data/spec/core_ext/kernel_spec.rb +54 -54
- data/spec/core_ext/math_spec.rb +116 -116
- data/spec/core_ext/matrix_spec.rb +66 -66
- data/spec/core_ext/objectspace_spec.rb +29 -29
- data/spec/core_ext/range_spec.rb +21 -21
- data/spec/core_ext/socket_spec.rb +32 -32
- data/spec/core_ext/string_spec.rb +223 -223
- data/spec/core_ext/stringio_spec.rb +21 -21
- data/spec/core_ext/time_spec.rb +202 -202
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- data/spec/gui/qt_spec.rb +102 -102
- data/spec/install/config/system/system.txt +33 -33
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/spec/install/config/targets/COSMOS/target.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
- data/spec/install/config/targets/INST/target.txt +10 -10
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
- data/spec/interfaces/interface_spec.rb +130 -130
- data/spec/interfaces/linc_interface_spec.rb +259 -259
- data/spec/interfaces/serial_interface_spec.rb +56 -56
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
- data/spec/interfaces/stream_interface_spec.rb +157 -157
- data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
- data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
- data/spec/interfaces/udp_interface_spec.rb +175 -175
- data/spec/io/buffered_file_spec.rb +113 -113
- data/spec/io/io_multiplexer_spec.rb +94 -94
- data/spec/io/json_drb_object_spec.rb +119 -119
- data/spec/io/json_drb_spec.rb +311 -311
- data/spec/io/json_rpc_spec.rb +264 -264
- data/spec/io/raw_logger_pair_spec.rb +76 -76
- data/spec/io/raw_logger_spec.rb +133 -133
- data/spec/io/serial_driver_spec.rb +60 -60
- data/spec/io/stderr_spec.rb +32 -32
- data/spec/io/stdout_spec.rb +32 -32
- data/spec/io/tcpip_server_spec.rb +338 -338
- data/spec/io/udp_sockets_spec.rb +94 -94
- data/spec/io/win32_serial_driver_spec.rb +88 -88
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
- data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
- data/spec/packets/binary_accessor_spec.rb +2326 -2326
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +344 -344
- data/spec/packets/packet_config_spec.rb +805 -805
- data/spec/packets/packet_item_limits_spec.rb +161 -161
- data/spec/packets/packet_item_spec.rb +386 -386
- data/spec/packets/packet_spec.rb +1317 -1317
- data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
- data/spec/packets/parsers/limits_parser_spec.rb +282 -282
- data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
- data/spec/packets/parsers/macro_parser_spec.rb +212 -212
- data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
- data/spec/packets/parsers/packet_parser_spec.rb +99 -99
- data/spec/packets/parsers/processor_parser_spec.rb +114 -114
- data/spec/packets/parsers/state_parser_spec.rb +156 -156
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +565 -565
- data/spec/packets/telemetry_spec.rb +578 -578
- data/spec/processors/new_packet_log_processor_spec.rb +39 -39
- data/spec/processors/processor_spec.rb +55 -55
- data/spec/processors/statistics_processor_spec.rb +60 -60
- data/spec/processors/watermark_processor_spec.rb +51 -51
- data/spec/script/cmd_tlm_server_spec.rb +110 -110
- data/spec/script/commands_disconnect_spec.rb +270 -270
- data/spec/script/commands_spec.rb +302 -302
- data/spec/script/limits_spec.rb +153 -153
- data/spec/script/script_spec.rb +86 -86
- data/spec/script/scripting_spec.rb +440 -440
- data/spec/script/telemetry_spec.rb +165 -165
- data/spec/script/tools_spec.rb +117 -117
- data/spec/spec_helper.rb +190 -190
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
- data/spec/streams/length_stream_protocol_spec.rb +300 -300
- data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
- data/spec/streams/serial_stream_spec.rb +117 -117
- data/spec/streams/stream_protocol_spec.rb +346 -346
- data/spec/streams/stream_spec.rb +30 -30
- data/spec/streams/tcpip_client_stream_spec.rb +57 -57
- data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
- data/spec/streams/template_stream_protocol_spec.rb +156 -156
- data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
- data/spec/system/system_spec.rb +665 -665
- data/spec/system/target_spec.rb +250 -250
- data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
- data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
- data/spec/tools/launcher/launcher_config_spec.rb +464 -464
- data/spec/top_level/top_level_spec.rb +334 -334
- data/spec/utilities/crc_spec.rb +45 -45
- data/spec/utilities/csv_spec.rb +97 -97
- data/spec/utilities/logger_spec.rb +102 -102
- data/spec/utilities/message_log_spec.rb +89 -89
- data/spec/utilities/quaternion_spec.rb +107 -107
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
- data/tasks/manifest.rake +22 -22
- data/tasks/spec.rake +23 -23
- data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
- data/test/benchmarks/gsub_benchmark.rb +152 -152
- data/test/benchmarks/is_a_benchmark.rb +34 -34
- data/test/performance/PACKETS.bat +0 -0
- data/test/performance/Rakefile +77 -77
- data/test/performance/THREADS.bat +0 -0
- data/test/performance/config/data/crc.txt +196 -196
- data/test/performance/config/data/diamond.STL +57 -57
- data/test/performance/config/data/meta_init.txt +4 -4
- data/test/performance/config/system/system_packets.txt +39 -39
- data/test/performance/config/system/system_threads.txt +59 -59
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
- data/test/performance/config/targets/COSMOS/target.txt +11 -11
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
- data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
- data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
- data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
- data/test/performance/config/targets/PACKET/target.txt +28 -28
- data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
- data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
- data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
- data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
- data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
- data/test/performance/config/targets/THREAD/target.txt +6 -6
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
- data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
- data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
- data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
- data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
- data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
- data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
- data/test/performance/lib/packet_target.rb +126 -126
- data/test/performance/lib/thread_target.rb +120 -120
- data/test/performance/lib/user_version.rb +3 -3
- data/test/performance/procedures/checks.rb +11 -11
- data/test/performance/procedures/clear_util.rb +7 -7
- data/test/performance/procedures/collect.rb +18 -18
- data/test/performance/procedures/collect_util.rb +14 -14
- data/test/performance/procedures/cosmos_api_test.rb +293 -293
- data/test/performance/procedures/disconnect.rb +29 -29
- data/test/performance/procedures/example_test.rb +182 -182
- data/test/performance/procedures/plot_test.rb +8 -8
- data/test/performance/procedures/procedure.rb +2 -2
- data/test/performance/procedures/run_example_test.rb +3 -3
- data/test/performance/procedures/test.rb +51 -51
- data/test/performance/tools/CmdExtractor +14 -14
- data/test/performance/tools/CmdExtractor.bat +0 -0
- data/test/performance/tools/CmdSender +14 -14
- data/test/performance/tools/CmdSender.bat +0 -0
- data/test/performance/tools/CmdTlmServer +16 -16
- data/test/performance/tools/CmdTlmServer.bat +0 -0
- data/test/performance/tools/CmdTlmServerMemProf +20 -20
- data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
- data/test/performance/tools/DataViewer +14 -14
- data/test/performance/tools/DataViewer.bat +0 -0
- data/test/performance/tools/HandbookCreator +14 -14
- data/test/performance/tools/HandbookCreator.bat +0 -0
- data/test/performance/tools/Launcher +14 -14
- data/test/performance/tools/Launcher.bat +0 -0
- data/test/performance/tools/LimitsMonitor +14 -14
- data/test/performance/tools/LimitsMonitor.bat +0 -0
- data/test/performance/tools/OpenGLBuilder +14 -14
- data/test/performance/tools/OpenGLBuilder.bat +0 -0
- data/test/performance/tools/PacketTarget +14 -14
- data/test/performance/tools/PacketTarget.bat +0 -0
- data/test/performance/tools/PacketViewer +14 -14
- data/test/performance/tools/PacketViewer.bat +0 -0
- data/test/performance/tools/Replay +14 -14
- data/test/performance/tools/Replay.bat +0 -0
- data/test/performance/tools/ScpiTarget +14 -14
- data/test/performance/tools/ScpiTarget.bat +0 -0
- data/test/performance/tools/ScriptRunner +14 -14
- data/test/performance/tools/ScriptRunner.bat +0 -0
- data/test/performance/tools/TableManager +14 -14
- data/test/performance/tools/TableManager.bat +0 -0
- data/test/performance/tools/TestRunner +14 -14
- data/test/performance/tools/TestRunner.bat +0 -0
- data/test/performance/tools/ThreadTarget +14 -14
- data/test/performance/tools/ThreadTarget.bat +0 -0
- data/test/performance/tools/TlmExtractor +14 -14
- data/test/performance/tools/TlmExtractor.bat +0 -0
- data/test/performance/tools/TlmGrapher +14 -14
- data/test/performance/tools/TlmGrapher.bat +0 -0
- data/test/performance/tools/TlmGrapherMemProf +19 -19
- data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
- data/test/performance/tools/TlmViewer +14 -14
- data/test/performance/tools/TlmViewer.bat +0 -0
- data/test/performance/tools/TlmViewerMemProf +19 -19
- data/test/performance/tools/TlmViewerMemProf.bat +0 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- metadata +3 -3
|
@@ -1,198 +1,198 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
|
|
3
|
-
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
-
# All Rights Reserved.
|
|
5
|
-
#
|
|
6
|
-
# This program is free software; you can modify and/or redistribute it
|
|
7
|
-
# under the terms of the GNU Lesser General Public License
|
|
8
|
-
# as published by the Free Software Foundation; version 3 with
|
|
9
|
-
# attribution addendums as found in the LICENSE.txt
|
|
10
|
-
|
|
11
|
-
require 'cosmos'
|
|
12
|
-
require 'thread'
|
|
13
|
-
require 'socket'
|
|
14
|
-
require 'json'
|
|
15
|
-
require 'drb/acl'
|
|
16
|
-
require 'drb/drb'
|
|
17
|
-
require 'cosmos/io/json_drb'
|
|
18
|
-
|
|
19
|
-
module Cosmos
|
|
20
|
-
|
|
21
|
-
# Used to forward all method calls to the remote server object. Before using
|
|
22
|
-
# this class ensure the remote service has been started in the server class:
|
|
23
|
-
#
|
|
24
|
-
# json = JsonDrb.new
|
|
25
|
-
# json.start_service('127.0.0.1', 7777, self)
|
|
26
|
-
#
|
|
27
|
-
# Now the JsonDRbObject can be used to call server methods directly:
|
|
28
|
-
#
|
|
29
|
-
# server = JsonDRbObject('127.0.0.1', 7777)
|
|
30
|
-
# server.cmd(*args)
|
|
31
|
-
#
|
|
32
|
-
class JsonDRbObject
|
|
33
|
-
# @param hostname [String] The name of the machine which has started
|
|
34
|
-
# the JSON service
|
|
35
|
-
# @param port [Integer] The port number of the JSON service
|
|
36
|
-
def initialize(hostname, port, connect_timeout = 1.0)
|
|
37
|
-
hostname = '127.0.0.1' if (hostname.to_s.upcase == 'LOCALHOST')
|
|
38
|
-
begin
|
|
39
|
-
@addr = Socket.pack_sockaddr_in(port, hostname)
|
|
40
|
-
rescue => error
|
|
41
|
-
if error.message =~ /getaddrinfo/
|
|
42
|
-
raise "Invalid hostname: #{hostname}"
|
|
43
|
-
else
|
|
44
|
-
raise error
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
@hostname = hostname
|
|
48
|
-
@port = port
|
|
49
|
-
@mutex = Mutex.new
|
|
50
|
-
@socket = nil
|
|
51
|
-
@id = 0
|
|
52
|
-
@request_in_progress = false
|
|
53
|
-
@connect_timeout = connect_timeout
|
|
54
|
-
@connect_timeout = @connect_timeout.to_f if @connect_timeout
|
|
55
|
-
@shutdown = false
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Disconnects from the JSON server
|
|
59
|
-
def disconnect
|
|
60
|
-
Cosmos.close_socket(@socket)
|
|
61
|
-
# Cannot set @socket to nil here because this method can be called by
|
|
62
|
-
# other threads and @socket being nil would cause unexpected errors in method_missing
|
|
63
|
-
# Also don't want to take the mutex so that we can interrupt method_missing if necessary
|
|
64
|
-
# Only method_missing can set @socket to nil
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Permanently disconnects from the JSON server
|
|
68
|
-
def shutdown
|
|
69
|
-
@shutdown = true
|
|
70
|
-
disconnect()
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# Forwards all method calls to the remote service.
|
|
74
|
-
#
|
|
75
|
-
# @param method_name [Symbol] Name of the method to call
|
|
76
|
-
# @param method_params [Array] Array of parameters to pass to the method
|
|
77
|
-
# @return The result of the method call. If the method raises an exception
|
|
78
|
-
# the same exception is also raised. If something goes wrong with the
|
|
79
|
-
# protocol a DRb::DRbConnError exception is raised.
|
|
80
|
-
def method_missing(method_name, *method_params)
|
|
81
|
-
@mutex.synchronize do
|
|
82
|
-
# This flag and loop are used to automatically reconnect and retry if something goes
|
|
83
|
-
# wrong on the first attempt writing to the socket. Sockets can become disconnected
|
|
84
|
-
# between function calls, but as long as the remote server is back up and running the
|
|
85
|
-
# call should succeed even when it discovers a broken socket on the first attempt.
|
|
86
|
-
first_try = true
|
|
87
|
-
loop do
|
|
88
|
-
raise DRb::DRbConnError, "Shutdown" if @shutdown
|
|
89
|
-
connect() if !@socket or @socket.closed? or @request_in_progress
|
|
90
|
-
|
|
91
|
-
response = make_request(method_name, method_params, first_try)
|
|
92
|
-
unless response
|
|
93
|
-
disconnect()
|
|
94
|
-
@socket = nil
|
|
95
|
-
was_first_try = first_try
|
|
96
|
-
first_try = false
|
|
97
|
-
next if was_first_try
|
|
98
|
-
end
|
|
99
|
-
return handle_response(response)
|
|
100
|
-
end # loop
|
|
101
|
-
end # @mutex.synchronize
|
|
102
|
-
end # def method_missing
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
|
|
106
|
-
def connect
|
|
107
|
-
if @request_in_progress
|
|
108
|
-
disconnect()
|
|
109
|
-
@socket = nil
|
|
110
|
-
@request_in_progress = false
|
|
111
|
-
end
|
|
112
|
-
begin
|
|
113
|
-
addr = Socket.pack_sockaddr_in(@port, @hostname)
|
|
114
|
-
@socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
|
|
115
|
-
@socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
|
116
|
-
begin
|
|
117
|
-
@socket.connect_nonblock(addr)
|
|
118
|
-
rescue IO::WaitWritable
|
|
119
|
-
begin
|
|
120
|
-
_, sockets, _ = IO.select(nil, [@socket], nil, @connect_timeout) # wait 3-way handshake completion
|
|
121
|
-
rescue IOError, Errno::ENOTSOCK
|
|
122
|
-
disconnect()
|
|
123
|
-
@socket = nil
|
|
124
|
-
raise "Connect canceled"
|
|
125
|
-
end
|
|
126
|
-
if sockets and !sockets.empty?
|
|
127
|
-
begin
|
|
128
|
-
@socket.connect_nonblock(addr) # check connection failure
|
|
129
|
-
rescue IOError, Errno::ENOTSOCK
|
|
130
|
-
disconnect()
|
|
131
|
-
@socket = nil
|
|
132
|
-
raise "Connect canceled"
|
|
133
|
-
rescue Errno::EINPROGRESS
|
|
134
|
-
retry
|
|
135
|
-
rescue Errno::EISCONN, Errno::EALREADY
|
|
136
|
-
end
|
|
137
|
-
else
|
|
138
|
-
disconnect()
|
|
139
|
-
@socket = nil
|
|
140
|
-
raise "Connect timeout"
|
|
141
|
-
end
|
|
142
|
-
rescue IOError, Errno::ENOTSOCK
|
|
143
|
-
disconnect()
|
|
144
|
-
@socket = nil
|
|
145
|
-
raise "Connect canceled"
|
|
146
|
-
end
|
|
147
|
-
rescue => e
|
|
148
|
-
raise DRb::DRbConnError, e.message
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
def make_request(method_name, method_params, first_try)
|
|
153
|
-
request = JsonRpcRequest.new(method_name, method_params, @id)
|
|
154
|
-
@id += 1
|
|
155
|
-
|
|
156
|
-
request_data = request.to_json(:allow_nan => true)
|
|
157
|
-
begin
|
|
158
|
-
STDOUT.puts "Request:\n" if JsonDRb.debug?
|
|
159
|
-
STDOUT.puts request_data if JsonDRb.debug?
|
|
160
|
-
@request_in_progress = true
|
|
161
|
-
JsonDRb.send_data(@socket, request_data)
|
|
162
|
-
response_data = JsonDRb.receive_message(@socket, '')
|
|
163
|
-
@request_in_progress = false
|
|
164
|
-
STDOUT.puts "\nResponse:\n" if JsonDRb.debug?
|
|
165
|
-
STDOUT.puts response_data if JsonDRb.debug?
|
|
166
|
-
rescue => e
|
|
167
|
-
disconnect()
|
|
168
|
-
@socket = nil
|
|
169
|
-
return false if first_try
|
|
170
|
-
raise DRb::DRbConnError, e.message, e.backtrace
|
|
171
|
-
end
|
|
172
|
-
response_data
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
def handle_response(response_data)
|
|
176
|
-
# The code below will always either raise or return breaking out of the loop
|
|
177
|
-
if response_data
|
|
178
|
-
response = JsonRpcResponse.from_json(response_data)
|
|
179
|
-
if JsonRpcErrorResponse === response
|
|
180
|
-
if response.error.data
|
|
181
|
-
raise Exception.from_hash(response.error.data)
|
|
182
|
-
else
|
|
183
|
-
raise "JsonDRb Error (#{response.error.code}): #{response.error.message}"
|
|
184
|
-
end
|
|
185
|
-
else
|
|
186
|
-
return response.result
|
|
187
|
-
end
|
|
188
|
-
else
|
|
189
|
-
# Socket was closed by server
|
|
190
|
-
disconnect()
|
|
191
|
-
@socket = nil
|
|
192
|
-
raise DRb::DRbConnError, "Socket closed by server"
|
|
193
|
-
end
|
|
194
|
-
end
|
|
195
|
-
|
|
196
|
-
end # class JsonDRbObject
|
|
197
|
-
|
|
198
|
-
end # module Cosmos
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU Lesser General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'cosmos'
|
|
12
|
+
require 'thread'
|
|
13
|
+
require 'socket'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'drb/acl'
|
|
16
|
+
require 'drb/drb'
|
|
17
|
+
require 'cosmos/io/json_drb'
|
|
18
|
+
|
|
19
|
+
module Cosmos
|
|
20
|
+
|
|
21
|
+
# Used to forward all method calls to the remote server object. Before using
|
|
22
|
+
# this class ensure the remote service has been started in the server class:
|
|
23
|
+
#
|
|
24
|
+
# json = JsonDrb.new
|
|
25
|
+
# json.start_service('127.0.0.1', 7777, self)
|
|
26
|
+
#
|
|
27
|
+
# Now the JsonDRbObject can be used to call server methods directly:
|
|
28
|
+
#
|
|
29
|
+
# server = JsonDRbObject('127.0.0.1', 7777)
|
|
30
|
+
# server.cmd(*args)
|
|
31
|
+
#
|
|
32
|
+
class JsonDRbObject
|
|
33
|
+
# @param hostname [String] The name of the machine which has started
|
|
34
|
+
# the JSON service
|
|
35
|
+
# @param port [Integer] The port number of the JSON service
|
|
36
|
+
def initialize(hostname, port, connect_timeout = 1.0)
|
|
37
|
+
hostname = '127.0.0.1' if (hostname.to_s.upcase == 'LOCALHOST')
|
|
38
|
+
begin
|
|
39
|
+
@addr = Socket.pack_sockaddr_in(port, hostname)
|
|
40
|
+
rescue => error
|
|
41
|
+
if error.message =~ /getaddrinfo/
|
|
42
|
+
raise "Invalid hostname: #{hostname}"
|
|
43
|
+
else
|
|
44
|
+
raise error
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
@hostname = hostname
|
|
48
|
+
@port = port
|
|
49
|
+
@mutex = Mutex.new
|
|
50
|
+
@socket = nil
|
|
51
|
+
@id = 0
|
|
52
|
+
@request_in_progress = false
|
|
53
|
+
@connect_timeout = connect_timeout
|
|
54
|
+
@connect_timeout = @connect_timeout.to_f if @connect_timeout
|
|
55
|
+
@shutdown = false
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Disconnects from the JSON server
|
|
59
|
+
def disconnect
|
|
60
|
+
Cosmos.close_socket(@socket)
|
|
61
|
+
# Cannot set @socket to nil here because this method can be called by
|
|
62
|
+
# other threads and @socket being nil would cause unexpected errors in method_missing
|
|
63
|
+
# Also don't want to take the mutex so that we can interrupt method_missing if necessary
|
|
64
|
+
# Only method_missing can set @socket to nil
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Permanently disconnects from the JSON server
|
|
68
|
+
def shutdown
|
|
69
|
+
@shutdown = true
|
|
70
|
+
disconnect()
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# Forwards all method calls to the remote service.
|
|
74
|
+
#
|
|
75
|
+
# @param method_name [Symbol] Name of the method to call
|
|
76
|
+
# @param method_params [Array] Array of parameters to pass to the method
|
|
77
|
+
# @return The result of the method call. If the method raises an exception
|
|
78
|
+
# the same exception is also raised. If something goes wrong with the
|
|
79
|
+
# protocol a DRb::DRbConnError exception is raised.
|
|
80
|
+
def method_missing(method_name, *method_params)
|
|
81
|
+
@mutex.synchronize do
|
|
82
|
+
# This flag and loop are used to automatically reconnect and retry if something goes
|
|
83
|
+
# wrong on the first attempt writing to the socket. Sockets can become disconnected
|
|
84
|
+
# between function calls, but as long as the remote server is back up and running the
|
|
85
|
+
# call should succeed even when it discovers a broken socket on the first attempt.
|
|
86
|
+
first_try = true
|
|
87
|
+
loop do
|
|
88
|
+
raise DRb::DRbConnError, "Shutdown" if @shutdown
|
|
89
|
+
connect() if !@socket or @socket.closed? or @request_in_progress
|
|
90
|
+
|
|
91
|
+
response = make_request(method_name, method_params, first_try)
|
|
92
|
+
unless response
|
|
93
|
+
disconnect()
|
|
94
|
+
@socket = nil
|
|
95
|
+
was_first_try = first_try
|
|
96
|
+
first_try = false
|
|
97
|
+
next if was_first_try
|
|
98
|
+
end
|
|
99
|
+
return handle_response(response)
|
|
100
|
+
end # loop
|
|
101
|
+
end # @mutex.synchronize
|
|
102
|
+
end # def method_missing
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def connect
|
|
107
|
+
if @request_in_progress
|
|
108
|
+
disconnect()
|
|
109
|
+
@socket = nil
|
|
110
|
+
@request_in_progress = false
|
|
111
|
+
end
|
|
112
|
+
begin
|
|
113
|
+
addr = Socket.pack_sockaddr_in(@port, @hostname)
|
|
114
|
+
@socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
|
|
115
|
+
@socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
|
116
|
+
begin
|
|
117
|
+
@socket.connect_nonblock(addr)
|
|
118
|
+
rescue IO::WaitWritable
|
|
119
|
+
begin
|
|
120
|
+
_, sockets, _ = IO.select(nil, [@socket], nil, @connect_timeout) # wait 3-way handshake completion
|
|
121
|
+
rescue IOError, Errno::ENOTSOCK
|
|
122
|
+
disconnect()
|
|
123
|
+
@socket = nil
|
|
124
|
+
raise "Connect canceled"
|
|
125
|
+
end
|
|
126
|
+
if sockets and !sockets.empty?
|
|
127
|
+
begin
|
|
128
|
+
@socket.connect_nonblock(addr) # check connection failure
|
|
129
|
+
rescue IOError, Errno::ENOTSOCK
|
|
130
|
+
disconnect()
|
|
131
|
+
@socket = nil
|
|
132
|
+
raise "Connect canceled"
|
|
133
|
+
rescue Errno::EINPROGRESS
|
|
134
|
+
retry
|
|
135
|
+
rescue Errno::EISCONN, Errno::EALREADY
|
|
136
|
+
end
|
|
137
|
+
else
|
|
138
|
+
disconnect()
|
|
139
|
+
@socket = nil
|
|
140
|
+
raise "Connect timeout"
|
|
141
|
+
end
|
|
142
|
+
rescue IOError, Errno::ENOTSOCK
|
|
143
|
+
disconnect()
|
|
144
|
+
@socket = nil
|
|
145
|
+
raise "Connect canceled"
|
|
146
|
+
end
|
|
147
|
+
rescue => e
|
|
148
|
+
raise DRb::DRbConnError, e.message
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def make_request(method_name, method_params, first_try)
|
|
153
|
+
request = JsonRpcRequest.new(method_name, method_params, @id)
|
|
154
|
+
@id += 1
|
|
155
|
+
|
|
156
|
+
request_data = request.to_json(:allow_nan => true)
|
|
157
|
+
begin
|
|
158
|
+
STDOUT.puts "Request:\n" if JsonDRb.debug?
|
|
159
|
+
STDOUT.puts request_data if JsonDRb.debug?
|
|
160
|
+
@request_in_progress = true
|
|
161
|
+
JsonDRb.send_data(@socket, request_data)
|
|
162
|
+
response_data = JsonDRb.receive_message(@socket, '')
|
|
163
|
+
@request_in_progress = false
|
|
164
|
+
STDOUT.puts "\nResponse:\n" if JsonDRb.debug?
|
|
165
|
+
STDOUT.puts response_data if JsonDRb.debug?
|
|
166
|
+
rescue => e
|
|
167
|
+
disconnect()
|
|
168
|
+
@socket = nil
|
|
169
|
+
return false if first_try
|
|
170
|
+
raise DRb::DRbConnError, e.message, e.backtrace
|
|
171
|
+
end
|
|
172
|
+
response_data
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def handle_response(response_data)
|
|
176
|
+
# The code below will always either raise or return breaking out of the loop
|
|
177
|
+
if response_data
|
|
178
|
+
response = JsonRpcResponse.from_json(response_data)
|
|
179
|
+
if JsonRpcErrorResponse === response
|
|
180
|
+
if response.error.data
|
|
181
|
+
raise Exception.from_hash(response.error.data)
|
|
182
|
+
else
|
|
183
|
+
raise "JsonDRb Error (#{response.error.code}): #{response.error.message}"
|
|
184
|
+
end
|
|
185
|
+
else
|
|
186
|
+
return response.result
|
|
187
|
+
end
|
|
188
|
+
else
|
|
189
|
+
# Socket was closed by server
|
|
190
|
+
disconnect()
|
|
191
|
+
@socket = nil
|
|
192
|
+
raise DRb::DRbConnError, "Socket closed by server"
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
end # class JsonDRbObject
|
|
197
|
+
|
|
198
|
+
end # module Cosmos
|
data/lib/cosmos/io/json_rpc.rb
CHANGED
|
@@ -1,365 +1,365 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
|
|
3
|
-
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
-
# All Rights Reserved.
|
|
5
|
-
#
|
|
6
|
-
# This program is free software; you can modify and/or redistribute it
|
|
7
|
-
# under the terms of the GNU Lesser General Public License
|
|
8
|
-
# as published by the Free Software Foundation; version 3 with
|
|
9
|
-
# attribution addendums as found in the LICENSE.txt
|
|
10
|
-
|
|
11
|
-
require 'json'
|
|
12
|
-
|
|
13
|
-
class Object
|
|
14
|
-
def as_json(options = nil) #:nodoc:
|
|
15
|
-
if respond_to?(:to_hash)
|
|
16
|
-
to_hash
|
|
17
|
-
else
|
|
18
|
-
instance_variables
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
class Struct #:nodoc:
|
|
24
|
-
def as_json(options = nil)
|
|
25
|
-
pairs = []
|
|
26
|
-
self.each_pair { |k, v| pairs << k.to_s; pairs << v.as_json(options) }
|
|
27
|
-
Hash[*pairs]
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class TrueClass
|
|
32
|
-
def as_json(options = nil) self end #:nodoc:
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
class FalseClass
|
|
36
|
-
def as_json(options = nil) self end #:nodoc:
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
class NilClass
|
|
40
|
-
def as_json(options = nil) self end #:nodoc:
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
class String
|
|
44
|
-
NON_ASCII_PRINTABLE = /[^\x21-\x7e\s]/
|
|
45
|
-
|
|
46
|
-
def as_json(options = nil)
|
|
47
|
-
if self =~ NON_ASCII_PRINTABLE
|
|
48
|
-
self.to_json_raw_object
|
|
49
|
-
else
|
|
50
|
-
self
|
|
51
|
-
end
|
|
52
|
-
end #:nodoc:
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
class Symbol
|
|
56
|
-
def as_json(options = nil) to_s end #:nodoc:
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
class Numeric
|
|
60
|
-
def as_json(options = nil) self end #:nodoc:
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
class Regexp
|
|
64
|
-
def as_json(options = nil) to_s end #:nodoc:
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
module Enumerable
|
|
68
|
-
def as_json(options = nil) #:nodoc:
|
|
69
|
-
to_a.as_json(options)
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
class Array
|
|
74
|
-
def as_json(options = nil) #:nodoc:
|
|
75
|
-
map { |v| v.as_json(options) }
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
class Hash
|
|
80
|
-
def as_json(options = nil) #:nodoc:
|
|
81
|
-
pairs = []
|
|
82
|
-
self.each { |k, v| pairs << k.to_s; pairs << v.as_json(options) }
|
|
83
|
-
Hash[*pairs]
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
class Time
|
|
88
|
-
def as_json(options = nil) #:nodoc:
|
|
89
|
-
to_json(options).remove_quotes
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
class Date
|
|
94
|
-
def as_json(options = nil) #:nodoc:
|
|
95
|
-
to_json(options).remove_quotes
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
class DateTime
|
|
100
|
-
def as_json(options = nil) #:nodoc:
|
|
101
|
-
to_json(options).remove_quotes
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
class Exception
|
|
106
|
-
def as_json(*a)
|
|
107
|
-
hash = {}
|
|
108
|
-
hash['class'] = self.class.name
|
|
109
|
-
hash['message'] = self.message
|
|
110
|
-
hash['backtrace'] = self.backtrace
|
|
111
|
-
instance_vars = {}
|
|
112
|
-
self.instance_variables.each do |instance_var_name|
|
|
113
|
-
instance_vars[instance_var_name.to_s] = self.instance_variable_get(instance_var_name.to_s.intern)
|
|
114
|
-
end
|
|
115
|
-
hash['instance_variables'] = instance_vars
|
|
116
|
-
hash.as_json(*a)
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def to_json(*a)
|
|
120
|
-
as_json(*a).to_json(*a)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def self.from_hash(hash)
|
|
124
|
-
begin
|
|
125
|
-
# Get Error class handling namespaced constants
|
|
126
|
-
split_error_class_name = hash['class'].split("::")
|
|
127
|
-
error_class = Object
|
|
128
|
-
split_error_class_name.each do |name|
|
|
129
|
-
error_class = error_class.const_get(name)
|
|
130
|
-
end
|
|
131
|
-
rescue
|
|
132
|
-
error = Cosmos::JsonDRbUnknownError.new(hash['message'])
|
|
133
|
-
error.set_backtrace(hash['backtrace'].concat(caller()))
|
|
134
|
-
raise error
|
|
135
|
-
end
|
|
136
|
-
error = error_class.new(hash['message'])
|
|
137
|
-
error.set_backtrace(hash['backtrace'].concat(caller())) if hash['backtrace']
|
|
138
|
-
hash['instance_variables'].each do |name, value|
|
|
139
|
-
error.instance_variable_set(name.intern, value)
|
|
140
|
-
end
|
|
141
|
-
error
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
module Cosmos
|
|
146
|
-
# An unknown JSON DRb error which can be re-raised by Exception
|
|
147
|
-
class JsonDRbUnknownError < StandardError; end
|
|
148
|
-
|
|
149
|
-
# Base class for all JSON Remote Procedure Calls. Provides basic
|
|
150
|
-
# comparison and Hash to JSON conversions.
|
|
151
|
-
class JsonRpc
|
|
152
|
-
include Comparable
|
|
153
|
-
|
|
154
|
-
def initialize
|
|
155
|
-
@hash = {}
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# @param other [JsonRpc] Another JsonRpc to compare hash values with
|
|
159
|
-
def <=>(other)
|
|
160
|
-
self.as_json <=> other.as_json
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# @param a [Array] Array of options
|
|
164
|
-
# @return [Hash] Hash representing the object
|
|
165
|
-
def as_json(*a)
|
|
166
|
-
@hash.as_json(*a)
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# @param a [Array] Array of options
|
|
170
|
-
# @return [String] The JSON encoded String
|
|
171
|
-
def to_json(*a)
|
|
172
|
-
as_json(*a).to_json(*a)
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
# Represents a JSON Remote Procedure Call Request
|
|
177
|
-
class JsonRpcRequest < JsonRpc
|
|
178
|
-
DANGEROUS_METHODS = ['__send__', 'send', 'instance_eval', 'instance_exec']
|
|
179
|
-
|
|
180
|
-
# @param method_name [String] The name of the method to call
|
|
181
|
-
# @param method_params [Array<String>] Array of strings which represent the
|
|
182
|
-
# parameters to send to the method
|
|
183
|
-
# @param id [Integer] The identifier which will be matched to the response
|
|
184
|
-
def initialize(method_name, method_params, id)
|
|
185
|
-
super()
|
|
186
|
-
@hash['jsonrpc'.freeze] = "2.0".freeze
|
|
187
|
-
@hash['method'.freeze] = method_name.to_s
|
|
188
|
-
if method_params and method_params.length != 0
|
|
189
|
-
@hash['params'.freeze] = method_params
|
|
190
|
-
end
|
|
191
|
-
@hash['id'.freeze] = id.to_i
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
# @return [String] The method to call
|
|
195
|
-
def method
|
|
196
|
-
@hash['method'.freeze]
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
# @return [Array<String>] Array of strings which represent the
|
|
200
|
-
# parameters to send to the method
|
|
201
|
-
def params
|
|
202
|
-
@hash['params'.freeze] || []
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
# @return [Integer] The request identifier
|
|
206
|
-
def id
|
|
207
|
-
@hash['id'.freeze]
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
# Creates a JsonRpcRequest object from a JSON encoded String. The version
|
|
211
|
-
# must be 2.0 and the JSON must include the method and id members.
|
|
212
|
-
#
|
|
213
|
-
# @param request_data [String] JSON encoded string representing the request
|
|
214
|
-
# @return [JsonRpcRequest]
|
|
215
|
-
def self.from_json(request_data)
|
|
216
|
-
begin
|
|
217
|
-
hash = JSON.parse(request_data, :allow_nan => true, :create_additions => true)
|
|
218
|
-
# Verify the jsonrpc version is correct and there is a method and id
|
|
219
|
-
raise unless (hash['jsonrpc'.freeze] == "2.0".freeze && hash['method'.freeze] && hash['id'.freeze])
|
|
220
|
-
self.from_hash(hash)
|
|
221
|
-
rescue
|
|
222
|
-
raise "Invalid JSON-RPC 2.0 Request"
|
|
223
|
-
end
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
# Creates a JsonRpcRequest object from a Hash
|
|
227
|
-
#
|
|
228
|
-
# @param hash [Hash] Hash containing the following keys: method, params,
|
|
229
|
-
# and id
|
|
230
|
-
# @return [JsonRpcRequest]
|
|
231
|
-
def self.from_hash(hash)
|
|
232
|
-
self.new(hash['method'.freeze], hash['params'.freeze], hash['id'.freeze])
|
|
233
|
-
end
|
|
234
|
-
end
|
|
235
|
-
|
|
236
|
-
# Represents a JSON Remote Procedure Call Response
|
|
237
|
-
class JsonRpcResponse < JsonRpc
|
|
238
|
-
|
|
239
|
-
# @param id [Integer] The identifier which will be matched to the request
|
|
240
|
-
def initialize(id)
|
|
241
|
-
super()
|
|
242
|
-
@hash['jsonrpc'.freeze] = "2.0".freeze
|
|
243
|
-
@hash['id'.freeze] = id
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
# Creates a JsonRpcResponse object from a JSON encoded String. The version
|
|
247
|
-
# must be 2.0 and the JSON must include the id members. It must also
|
|
248
|
-
# include either result for success or error for failure but never both.
|
|
249
|
-
#
|
|
250
|
-
# @param response_data [String] JSON encoded string representing the response
|
|
251
|
-
# @return [JsonRpcResponse]
|
|
252
|
-
def self.from_json(response_data)
|
|
253
|
-
msg = "Invalid JSON-RPC 2.0 Response"
|
|
254
|
-
begin
|
|
255
|
-
hash = JSON.parse(response_data, :allow_nan => true, :create_additions => true)
|
|
256
|
-
rescue
|
|
257
|
-
raise msg
|
|
258
|
-
end
|
|
259
|
-
|
|
260
|
-
# Verify the jsonrpc version is correct and there is an ID
|
|
261
|
-
raise msg unless hash['jsonrpc'.freeze] == "2.0".freeze and hash.key?('id'.freeze)
|
|
262
|
-
# If there is a result this is probably a good response
|
|
263
|
-
if hash.key?('result'.freeze)
|
|
264
|
-
# Can't have an error key in a good response
|
|
265
|
-
raise msg if hash.key?('error'.freeze)
|
|
266
|
-
JsonRpcSuccessResponse.from_hash(hash)
|
|
267
|
-
elsif hash.key?('error'.freeze)
|
|
268
|
-
# There was an error key so create an error response
|
|
269
|
-
JsonRpcErrorResponse.from_hash(hash)
|
|
270
|
-
else
|
|
271
|
-
# Neither a result or error key so raise exception
|
|
272
|
-
raise msg
|
|
273
|
-
end
|
|
274
|
-
end
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
# Represents a JSON Remote Procedure Call Success Response
|
|
278
|
-
class JsonRpcSuccessResponse < JsonRpcResponse
|
|
279
|
-
|
|
280
|
-
# @param id [Integer] The identifier which will be matched to the request
|
|
281
|
-
def initialize(result, id)
|
|
282
|
-
super(id)
|
|
283
|
-
@hash['result'.freeze] = result
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
# @return [Object] The result of the method request
|
|
287
|
-
def result
|
|
288
|
-
@hash['result'.freeze]
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
# Creates a JsonRpcSuccessResponse object from a Hash
|
|
292
|
-
#
|
|
293
|
-
# @param hash [Hash] Hash containing the following keys: result and id
|
|
294
|
-
# @return [JsonRpcSuccessResponse]
|
|
295
|
-
def self.from_hash(hash)
|
|
296
|
-
self.new(hash['result'.freeze], hash['id'.freeze])
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
|
|
300
|
-
# Represents a JSON Remote Procedure Call Error Response
|
|
301
|
-
class JsonRpcErrorResponse < JsonRpcResponse
|
|
302
|
-
|
|
303
|
-
# @param error [JsonRpcError] The error object
|
|
304
|
-
# @param id [Integer] The identifier which will be matched to the request
|
|
305
|
-
def initialize(error, id)
|
|
306
|
-
super(id)
|
|
307
|
-
@hash['error'.freeze] = error
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
# @return [JsonRpcError] The error object
|
|
311
|
-
def error
|
|
312
|
-
@hash['error'.freeze]
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
# Creates a JsonRpcErrorResponse object from a Hash
|
|
316
|
-
#
|
|
317
|
-
# @param hash [Hash] Hash containing the following keys: error and id
|
|
318
|
-
# @return [JsonRpcErrorResponse]
|
|
319
|
-
def self.from_hash(hash)
|
|
320
|
-
self.new(JsonRpcError.from_hash(hash['error'.freeze]), hash['id'.freeze])
|
|
321
|
-
end
|
|
322
|
-
end
|
|
323
|
-
|
|
324
|
-
# Represents a JSON Remote Procedure Call Error
|
|
325
|
-
class JsonRpcError < JsonRpc
|
|
326
|
-
|
|
327
|
-
# @param code [Integer] The error type that occurred
|
|
328
|
-
# @param message [String] A short description of the error
|
|
329
|
-
# @param data [Hash] Additional information about the error
|
|
330
|
-
def initialize(code, message, data = nil)
|
|
331
|
-
super()
|
|
332
|
-
@hash['code'] = code
|
|
333
|
-
@hash['message'] = message
|
|
334
|
-
@hash['data'] = data
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
# @return [Integer] The error type that occurred
|
|
338
|
-
def code
|
|
339
|
-
@hash['code']
|
|
340
|
-
end
|
|
341
|
-
|
|
342
|
-
# @return [String] A short description of the error
|
|
343
|
-
def message
|
|
344
|
-
@hash['message']
|
|
345
|
-
end
|
|
346
|
-
|
|
347
|
-
# @return [Hash] Additional information about the error
|
|
348
|
-
def data
|
|
349
|
-
@hash['data']
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
# Creates a JsonRpcError object from a Hash
|
|
353
|
-
#
|
|
354
|
-
# @param hash [Hash] Hash containing the following keys: code, message, and
|
|
355
|
-
# optionally data
|
|
356
|
-
# @return [JsonRpcError]
|
|
357
|
-
def self.from_hash(hash)
|
|
358
|
-
if hash['code'] and (hash['code'].to_i == hash['code']) and hash['message']
|
|
359
|
-
self.new(hash['code'], hash['message'], hash['data'])
|
|
360
|
-
else
|
|
361
|
-
raise "Invalid JSON-RPC 2.0 Error"
|
|
362
|
-
end
|
|
363
|
-
end
|
|
364
|
-
end
|
|
365
|
-
end
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU Lesser General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'json'
|
|
12
|
+
|
|
13
|
+
class Object
|
|
14
|
+
def as_json(options = nil) #:nodoc:
|
|
15
|
+
if respond_to?(:to_hash)
|
|
16
|
+
to_hash
|
|
17
|
+
else
|
|
18
|
+
instance_variables
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class Struct #:nodoc:
|
|
24
|
+
def as_json(options = nil)
|
|
25
|
+
pairs = []
|
|
26
|
+
self.each_pair { |k, v| pairs << k.to_s; pairs << v.as_json(options) }
|
|
27
|
+
Hash[*pairs]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class TrueClass
|
|
32
|
+
def as_json(options = nil) self end #:nodoc:
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class FalseClass
|
|
36
|
+
def as_json(options = nil) self end #:nodoc:
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class NilClass
|
|
40
|
+
def as_json(options = nil) self end #:nodoc:
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class String
|
|
44
|
+
NON_ASCII_PRINTABLE = /[^\x21-\x7e\s]/
|
|
45
|
+
|
|
46
|
+
def as_json(options = nil)
|
|
47
|
+
if self =~ NON_ASCII_PRINTABLE
|
|
48
|
+
self.to_json_raw_object
|
|
49
|
+
else
|
|
50
|
+
self
|
|
51
|
+
end
|
|
52
|
+
end #:nodoc:
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Symbol
|
|
56
|
+
def as_json(options = nil) to_s end #:nodoc:
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class Numeric
|
|
60
|
+
def as_json(options = nil) self end #:nodoc:
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class Regexp
|
|
64
|
+
def as_json(options = nil) to_s end #:nodoc:
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
module Enumerable
|
|
68
|
+
def as_json(options = nil) #:nodoc:
|
|
69
|
+
to_a.as_json(options)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
class Array
|
|
74
|
+
def as_json(options = nil) #:nodoc:
|
|
75
|
+
map { |v| v.as_json(options) }
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class Hash
|
|
80
|
+
def as_json(options = nil) #:nodoc:
|
|
81
|
+
pairs = []
|
|
82
|
+
self.each { |k, v| pairs << k.to_s; pairs << v.as_json(options) }
|
|
83
|
+
Hash[*pairs]
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
class Time
|
|
88
|
+
def as_json(options = nil) #:nodoc:
|
|
89
|
+
to_json(options).remove_quotes
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class Date
|
|
94
|
+
def as_json(options = nil) #:nodoc:
|
|
95
|
+
to_json(options).remove_quotes
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
class DateTime
|
|
100
|
+
def as_json(options = nil) #:nodoc:
|
|
101
|
+
to_json(options).remove_quotes
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
class Exception
|
|
106
|
+
def as_json(*a)
|
|
107
|
+
hash = {}
|
|
108
|
+
hash['class'] = self.class.name
|
|
109
|
+
hash['message'] = self.message
|
|
110
|
+
hash['backtrace'] = self.backtrace
|
|
111
|
+
instance_vars = {}
|
|
112
|
+
self.instance_variables.each do |instance_var_name|
|
|
113
|
+
instance_vars[instance_var_name.to_s] = self.instance_variable_get(instance_var_name.to_s.intern)
|
|
114
|
+
end
|
|
115
|
+
hash['instance_variables'] = instance_vars
|
|
116
|
+
hash.as_json(*a)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def to_json(*a)
|
|
120
|
+
as_json(*a).to_json(*a)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def self.from_hash(hash)
|
|
124
|
+
begin
|
|
125
|
+
# Get Error class handling namespaced constants
|
|
126
|
+
split_error_class_name = hash['class'].split("::")
|
|
127
|
+
error_class = Object
|
|
128
|
+
split_error_class_name.each do |name|
|
|
129
|
+
error_class = error_class.const_get(name)
|
|
130
|
+
end
|
|
131
|
+
rescue
|
|
132
|
+
error = Cosmos::JsonDRbUnknownError.new(hash['message'])
|
|
133
|
+
error.set_backtrace(hash['backtrace'].concat(caller()))
|
|
134
|
+
raise error
|
|
135
|
+
end
|
|
136
|
+
error = error_class.new(hash['message'])
|
|
137
|
+
error.set_backtrace(hash['backtrace'].concat(caller())) if hash['backtrace']
|
|
138
|
+
hash['instance_variables'].each do |name, value|
|
|
139
|
+
error.instance_variable_set(name.intern, value)
|
|
140
|
+
end
|
|
141
|
+
error
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
module Cosmos
|
|
146
|
+
# An unknown JSON DRb error which can be re-raised by Exception
|
|
147
|
+
class JsonDRbUnknownError < StandardError; end
|
|
148
|
+
|
|
149
|
+
# Base class for all JSON Remote Procedure Calls. Provides basic
|
|
150
|
+
# comparison and Hash to JSON conversions.
|
|
151
|
+
class JsonRpc
|
|
152
|
+
include Comparable
|
|
153
|
+
|
|
154
|
+
def initialize
|
|
155
|
+
@hash = {}
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# @param other [JsonRpc] Another JsonRpc to compare hash values with
|
|
159
|
+
def <=>(other)
|
|
160
|
+
self.as_json <=> other.as_json
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# @param a [Array] Array of options
|
|
164
|
+
# @return [Hash] Hash representing the object
|
|
165
|
+
def as_json(*a)
|
|
166
|
+
@hash.as_json(*a)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# @param a [Array] Array of options
|
|
170
|
+
# @return [String] The JSON encoded String
|
|
171
|
+
def to_json(*a)
|
|
172
|
+
as_json(*a).to_json(*a)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
# Represents a JSON Remote Procedure Call Request
|
|
177
|
+
class JsonRpcRequest < JsonRpc
|
|
178
|
+
DANGEROUS_METHODS = ['__send__', 'send', 'instance_eval', 'instance_exec']
|
|
179
|
+
|
|
180
|
+
# @param method_name [String] The name of the method to call
|
|
181
|
+
# @param method_params [Array<String>] Array of strings which represent the
|
|
182
|
+
# parameters to send to the method
|
|
183
|
+
# @param id [Integer] The identifier which will be matched to the response
|
|
184
|
+
def initialize(method_name, method_params, id)
|
|
185
|
+
super()
|
|
186
|
+
@hash['jsonrpc'.freeze] = "2.0".freeze
|
|
187
|
+
@hash['method'.freeze] = method_name.to_s
|
|
188
|
+
if method_params and method_params.length != 0
|
|
189
|
+
@hash['params'.freeze] = method_params
|
|
190
|
+
end
|
|
191
|
+
@hash['id'.freeze] = id.to_i
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
# @return [String] The method to call
|
|
195
|
+
def method
|
|
196
|
+
@hash['method'.freeze]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# @return [Array<String>] Array of strings which represent the
|
|
200
|
+
# parameters to send to the method
|
|
201
|
+
def params
|
|
202
|
+
@hash['params'.freeze] || []
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# @return [Integer] The request identifier
|
|
206
|
+
def id
|
|
207
|
+
@hash['id'.freeze]
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Creates a JsonRpcRequest object from a JSON encoded String. The version
|
|
211
|
+
# must be 2.0 and the JSON must include the method and id members.
|
|
212
|
+
#
|
|
213
|
+
# @param request_data [String] JSON encoded string representing the request
|
|
214
|
+
# @return [JsonRpcRequest]
|
|
215
|
+
def self.from_json(request_data)
|
|
216
|
+
begin
|
|
217
|
+
hash = JSON.parse(request_data, :allow_nan => true, :create_additions => true)
|
|
218
|
+
# Verify the jsonrpc version is correct and there is a method and id
|
|
219
|
+
raise unless (hash['jsonrpc'.freeze] == "2.0".freeze && hash['method'.freeze] && hash['id'.freeze])
|
|
220
|
+
self.from_hash(hash)
|
|
221
|
+
rescue
|
|
222
|
+
raise "Invalid JSON-RPC 2.0 Request"
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# Creates a JsonRpcRequest object from a Hash
|
|
227
|
+
#
|
|
228
|
+
# @param hash [Hash] Hash containing the following keys: method, params,
|
|
229
|
+
# and id
|
|
230
|
+
# @return [JsonRpcRequest]
|
|
231
|
+
def self.from_hash(hash)
|
|
232
|
+
self.new(hash['method'.freeze], hash['params'.freeze], hash['id'.freeze])
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
# Represents a JSON Remote Procedure Call Response
|
|
237
|
+
class JsonRpcResponse < JsonRpc
|
|
238
|
+
|
|
239
|
+
# @param id [Integer] The identifier which will be matched to the request
|
|
240
|
+
def initialize(id)
|
|
241
|
+
super()
|
|
242
|
+
@hash['jsonrpc'.freeze] = "2.0".freeze
|
|
243
|
+
@hash['id'.freeze] = id
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Creates a JsonRpcResponse object from a JSON encoded String. The version
|
|
247
|
+
# must be 2.0 and the JSON must include the id members. It must also
|
|
248
|
+
# include either result for success or error for failure but never both.
|
|
249
|
+
#
|
|
250
|
+
# @param response_data [String] JSON encoded string representing the response
|
|
251
|
+
# @return [JsonRpcResponse]
|
|
252
|
+
def self.from_json(response_data)
|
|
253
|
+
msg = "Invalid JSON-RPC 2.0 Response"
|
|
254
|
+
begin
|
|
255
|
+
hash = JSON.parse(response_data, :allow_nan => true, :create_additions => true)
|
|
256
|
+
rescue
|
|
257
|
+
raise msg
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Verify the jsonrpc version is correct and there is an ID
|
|
261
|
+
raise msg unless hash['jsonrpc'.freeze] == "2.0".freeze and hash.key?('id'.freeze)
|
|
262
|
+
# If there is a result this is probably a good response
|
|
263
|
+
if hash.key?('result'.freeze)
|
|
264
|
+
# Can't have an error key in a good response
|
|
265
|
+
raise msg if hash.key?('error'.freeze)
|
|
266
|
+
JsonRpcSuccessResponse.from_hash(hash)
|
|
267
|
+
elsif hash.key?('error'.freeze)
|
|
268
|
+
# There was an error key so create an error response
|
|
269
|
+
JsonRpcErrorResponse.from_hash(hash)
|
|
270
|
+
else
|
|
271
|
+
# Neither a result or error key so raise exception
|
|
272
|
+
raise msg
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
# Represents a JSON Remote Procedure Call Success Response
|
|
278
|
+
class JsonRpcSuccessResponse < JsonRpcResponse
|
|
279
|
+
|
|
280
|
+
# @param id [Integer] The identifier which will be matched to the request
|
|
281
|
+
def initialize(result, id)
|
|
282
|
+
super(id)
|
|
283
|
+
@hash['result'.freeze] = result
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# @return [Object] The result of the method request
|
|
287
|
+
def result
|
|
288
|
+
@hash['result'.freeze]
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
# Creates a JsonRpcSuccessResponse object from a Hash
|
|
292
|
+
#
|
|
293
|
+
# @param hash [Hash] Hash containing the following keys: result and id
|
|
294
|
+
# @return [JsonRpcSuccessResponse]
|
|
295
|
+
def self.from_hash(hash)
|
|
296
|
+
self.new(hash['result'.freeze], hash['id'.freeze])
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
# Represents a JSON Remote Procedure Call Error Response
|
|
301
|
+
class JsonRpcErrorResponse < JsonRpcResponse
|
|
302
|
+
|
|
303
|
+
# @param error [JsonRpcError] The error object
|
|
304
|
+
# @param id [Integer] The identifier which will be matched to the request
|
|
305
|
+
def initialize(error, id)
|
|
306
|
+
super(id)
|
|
307
|
+
@hash['error'.freeze] = error
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# @return [JsonRpcError] The error object
|
|
311
|
+
def error
|
|
312
|
+
@hash['error'.freeze]
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
# Creates a JsonRpcErrorResponse object from a Hash
|
|
316
|
+
#
|
|
317
|
+
# @param hash [Hash] Hash containing the following keys: error and id
|
|
318
|
+
# @return [JsonRpcErrorResponse]
|
|
319
|
+
def self.from_hash(hash)
|
|
320
|
+
self.new(JsonRpcError.from_hash(hash['error'.freeze]), hash['id'.freeze])
|
|
321
|
+
end
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
# Represents a JSON Remote Procedure Call Error
|
|
325
|
+
class JsonRpcError < JsonRpc
|
|
326
|
+
|
|
327
|
+
# @param code [Integer] The error type that occurred
|
|
328
|
+
# @param message [String] A short description of the error
|
|
329
|
+
# @param data [Hash] Additional information about the error
|
|
330
|
+
def initialize(code, message, data = nil)
|
|
331
|
+
super()
|
|
332
|
+
@hash['code'] = code
|
|
333
|
+
@hash['message'] = message
|
|
334
|
+
@hash['data'] = data
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
# @return [Integer] The error type that occurred
|
|
338
|
+
def code
|
|
339
|
+
@hash['code']
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# @return [String] A short description of the error
|
|
343
|
+
def message
|
|
344
|
+
@hash['message']
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
# @return [Hash] Additional information about the error
|
|
348
|
+
def data
|
|
349
|
+
@hash['data']
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# Creates a JsonRpcError object from a Hash
|
|
353
|
+
#
|
|
354
|
+
# @param hash [Hash] Hash containing the following keys: code, message, and
|
|
355
|
+
# optionally data
|
|
356
|
+
# @return [JsonRpcError]
|
|
357
|
+
def self.from_hash(hash)
|
|
358
|
+
if hash['code'] and (hash['code'].to_i == hash['code']) and hash['message']
|
|
359
|
+
self.new(hash['code'], hash['message'], hash['data'])
|
|
360
|
+
else
|
|
361
|
+
raise "Invalid JSON-RPC 2.0 Error"
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
end
|