takagi 0.1.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +70 -7
- data/.yard/templates/default/layout/html/layout.erb +34 -0
- data/AGENTS.md +16 -0
- data/CHANGELOG.md +158 -1
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +590 -23
- data/ROADMAP.md +55 -0
- data/Rakefile +4 -4
- data/Steepfile +39 -0
- data/bin/takagi-dev +159 -0
- data/docs/FIRST_PLUGIN_GUIDE.md +224 -0
- data/docs/HOOKS.md +31 -0
- data/examples/client_lifecycle_example.rb +118 -0
- data/examples/cloud_gateway_app.rb +217 -0
- data/examples/nested_api_app.rb +258 -0
- data/examples/simple_device_app.rb +71 -0
- data/examples/takagi.yml +138 -0
- data/lib/takagi/application.rb +256 -0
- data/lib/takagi/base/middleware_management.rb +39 -0
- data/lib/takagi/base/plugin_management.rb +75 -0
- data/lib/takagi/base/reactor_management.rb +104 -0
- data/lib/takagi/base/server_lifecycle.rb +156 -0
- data/lib/takagi/base.rb +103 -11
- data/lib/takagi/branding.rb +88 -0
- data/lib/takagi/cbor/decoder.rb +385 -0
- data/lib/takagi/cbor/encoder.rb +260 -0
- data/lib/takagi/cbor/error.rb +17 -0
- data/lib/takagi/cbor/version.rb +9 -0
- data/lib/takagi/client/response.rb +236 -0
- data/lib/takagi/client.rb +265 -0
- data/lib/takagi/client_base.rb +204 -0
- data/lib/takagi/coap/code_helpers.rb +190 -0
- data/lib/takagi/coap/registries/base.rb +165 -0
- data/lib/takagi/coap/registries/content_format.rb +71 -0
- data/lib/takagi/coap/registries/message_type.rb +69 -0
- data/lib/takagi/coap/registries/method.rb +38 -0
- data/lib/takagi/coap/registries/option.rb +71 -0
- data/lib/takagi/coap/registries/response.rb +93 -0
- data/lib/takagi/coap/registries/signaling.rb +34 -0
- data/lib/takagi/coap/signaling.rb +10 -0
- data/lib/takagi/coap.rb +37 -0
- data/lib/takagi/composite_router.rb +186 -0
- data/lib/takagi/config.rb +337 -0
- data/lib/takagi/controller/resource_allocator.rb +164 -0
- data/lib/takagi/controller/thread_pool.rb +144 -0
- data/lib/takagi/controller.rb +319 -0
- data/lib/takagi/core/attribute_set.rb +128 -0
- data/lib/takagi/discovery/core_link_format.rb +137 -0
- data/lib/takagi/errors.rb +536 -0
- data/lib/takagi/event_bus/address_prefix.rb +142 -0
- data/lib/takagi/event_bus/async_executor.rb +235 -0
- data/lib/takagi/event_bus/coap_bridge.rb +208 -0
- data/lib/takagi/event_bus/future.rb +153 -0
- data/lib/takagi/event_bus/lru_cache.rb +157 -0
- data/lib/takagi/event_bus/message_buffer.rb +237 -0
- data/lib/takagi/event_bus/observer_cleanup.rb +110 -0
- data/lib/takagi/event_bus/scope.rb +74 -0
- data/lib/takagi/event_bus.rb +594 -0
- data/lib/takagi/helpers.rb +88 -0
- data/lib/takagi/hooks.rb +82 -0
- data/lib/takagi/initializer.rb +18 -0
- data/lib/takagi/logger.rb +15 -6
- data/lib/takagi/message/base.rb +155 -0
- data/lib/takagi/message/deduplication_cache.rb +84 -0
- data/lib/takagi/message/inbound.rb +147 -0
- data/lib/takagi/message/outbound.rb +223 -0
- data/lib/takagi/message/request.rb +158 -0
- data/lib/takagi/message/retransmission_manager.rb +193 -0
- data/lib/takagi/middleware/authentication.rb +19 -0
- data/lib/takagi/middleware/caching.rb +23 -0
- data/lib/takagi/middleware/debugging.rb +16 -0
- data/lib/takagi/middleware/logging.rb +14 -0
- data/lib/takagi/middleware/metrics.rb +440 -0
- data/lib/takagi/middleware/rate_limiting.rb +24 -0
- data/lib/takagi/middleware_stack.rb +166 -0
- data/lib/takagi/network/base.rb +76 -0
- data/lib/takagi/network/framing/tcp.rb +222 -0
- data/lib/takagi/network/framing/udp.rb +110 -0
- data/lib/takagi/network/registry.rb +72 -0
- data/lib/takagi/network/tcp.rb +60 -0
- data/lib/takagi/network/tcp_sender.rb +21 -0
- data/lib/takagi/network/udp.rb +61 -0
- data/lib/takagi/network/udp_sender.rb +20 -0
- data/lib/takagi/observable/emitter.rb +62 -0
- data/lib/takagi/observable/reactor.rb +488 -0
- data/lib/takagi/observable/registry.rb +122 -0
- data/lib/takagi/observe_registry.rb +10 -0
- data/lib/takagi/observer/client.rb +68 -0
- data/lib/takagi/observer/registry.rb +137 -0
- data/lib/takagi/observer/sender.rb +39 -0
- data/lib/takagi/observer/watcher.rb +43 -0
- data/lib/takagi/plugin.rb +313 -0
- data/lib/takagi/profiles.rb +176 -0
- data/lib/takagi/reactor.rb +23 -0
- data/lib/takagi/reactor_registry.rb +64 -0
- data/lib/takagi/registry/base.rb +268 -0
- data/lib/takagi/response_builder.rb +141 -0
- data/lib/takagi/router/metadata_extractor.rb +133 -0
- data/lib/takagi/router/route_matcher.rb +83 -0
- data/lib/takagi/router.rb +284 -25
- data/lib/takagi/serialization/base.rb +102 -0
- data/lib/takagi/serialization/cbor_serializer.rb +92 -0
- data/lib/takagi/serialization/json_serializer.rb +96 -0
- data/lib/takagi/serialization/octet_stream_serializer.rb +82 -0
- data/lib/takagi/serialization/registry.rb +187 -0
- data/lib/takagi/serialization/text_serializer.rb +87 -0
- data/lib/takagi/serialization.rb +117 -0
- data/lib/takagi/server/multi.rb +41 -0
- data/lib/takagi/server/registry.rb +71 -0
- data/lib/takagi/server/tcp.rb +249 -0
- data/lib/takagi/server/udp.rb +139 -0
- data/lib/takagi/server/udp_worker.rb +174 -0
- data/lib/takagi/server.rb +1 -31
- data/lib/takagi/server_registry.rb +10 -0
- data/lib/takagi/tcp_client.rb +142 -0
- data/lib/takagi/version.rb +2 -1
- data/lib/takagi.rb +24 -3
- data/sig/takagi/application.rbs +48 -0
- data/sig/takagi/base/middleware_management.rbs +33 -0
- data/sig/takagi/base/reactor_management.rbs +52 -0
- data/sig/takagi/base/server_lifecycle.rbs +54 -0
- data/sig/takagi/base.rbs +48 -0
- data/sig/takagi/cbor/decoder.rbs +171 -0
- data/sig/takagi/cbor/encoder.rbs +146 -0
- data/sig/takagi/cbor/error.rbs +19 -0
- data/sig/takagi/cbor/version.rbs +7 -0
- data/sig/takagi/client/response.rbs +148 -0
- data/sig/takagi/client.rbs +119 -0
- data/sig/takagi/client_base.rbs +135 -0
- data/sig/takagi/coap/code_helpers.rbs +91 -0
- data/sig/takagi/coap/registries/base.rbs +95 -0
- data/sig/takagi/coap/registries/content_format.rbs +47 -0
- data/sig/takagi/coap/registries/message_type.rbs +53 -0
- data/sig/takagi/coap/registries/method.rbs +27 -0
- data/sig/takagi/coap/registries/option.rbs +43 -0
- data/sig/takagi/coap/registries/response.rbs +52 -0
- data/sig/takagi/coap.rbs +24 -0
- data/sig/takagi/composite_router.rbs +46 -0
- data/sig/takagi/config.rbs +134 -0
- data/sig/takagi/controller.rbs +73 -0
- data/sig/takagi/core/attribute_set.rbs +57 -0
- data/sig/takagi/discovery/core_link_format.rbs +50 -0
- data/sig/takagi/event_bus/address_prefix.rbs +78 -0
- data/sig/takagi/event_bus/async_executor.rbs +88 -0
- data/sig/takagi/event_bus/coap_bridge.rbs +93 -0
- data/sig/takagi/event_bus/future.rbs +78 -0
- data/sig/takagi/event_bus/lru_cache.rbs +86 -0
- data/sig/takagi/event_bus/message_buffer.rbs +133 -0
- data/sig/takagi/event_bus/observer_cleanup.rbs +62 -0
- data/sig/takagi/event_bus.rbs +320 -0
- data/sig/takagi/helpers.rbs +34 -0
- data/sig/takagi/initializer.rbs +9 -0
- data/sig/takagi/logger.rbs +17 -0
- data/sig/takagi/message/base.rbs +64 -0
- data/sig/takagi/message/deduplication_cache.rbs +49 -0
- data/sig/takagi/message/inbound.rbs +76 -0
- data/sig/takagi/message/outbound.rbs +48 -0
- data/sig/takagi/message/request.rbs +32 -0
- data/sig/takagi/message/retransmission_manager.rbs +76 -0
- data/sig/takagi/middleware/authentication.rbs +11 -0
- data/sig/takagi/middleware/caching.rbs +13 -0
- data/sig/takagi/middleware/debugging.rbs +9 -0
- data/sig/takagi/middleware/logging.rbs +7 -0
- data/sig/takagi/middleware/metrics.rbs +15 -0
- data/sig/takagi/middleware/rate_limiting.rbs +13 -0
- data/sig/takagi/middleware_stack.rbs +69 -0
- data/sig/takagi/network/tcp_sender.rbs +10 -0
- data/sig/takagi/network/udp_sender.rbs +14 -0
- data/sig/takagi/observe_registry.rbs +36 -0
- data/sig/takagi/observer/client.rbs +36 -0
- data/sig/takagi/observer/sender.rbs +12 -0
- data/sig/takagi/observer/watcher.rbs +18 -0
- data/sig/takagi/profiles.rbs +33 -0
- data/sig/takagi/reactor.rbs +20 -0
- data/sig/takagi/reactor_registry.rbs +14 -0
- data/sig/takagi/response_builder.rbs +12 -0
- data/sig/takagi/router/metadata_extractor.rbs +71 -0
- data/sig/takagi/router/route_matcher.rbs +43 -0
- data/sig/takagi/router.rbs +166 -0
- data/sig/takagi/serialization.rbs +32 -0
- data/sig/takagi/server/multi.rbs +16 -0
- data/sig/takagi/server/tcp.rbs +42 -0
- data/sig/takagi/server/udp.rbs +52 -0
- data/sig/takagi/server/udp_worker.rbs +42 -0
- data/sig/takagi/server.rbs +4 -0
- data/sig/takagi/server_registry.rbs +71 -0
- data/sig/takagi/tcp_client.rbs +23 -0
- data/sig/takagi/version.rbs +5 -0
- data/takagi.gemspec +37 -35
- metadata +204 -31
- data/.idea/.gitignore +0 -8
- data/.idea/misc.xml +0 -4
- data/.idea/modules.xml +0 -8
- data/.idea/takagi.iml +0 -81
- data/.idea/vcs.xml +0 -6
- data/lib/takagi/message.rb +0 -75
metadata
CHANGED
|
@@ -1,94 +1,267 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: takagi
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dominik Matoulek
|
|
8
|
-
autorequire:
|
|
9
|
-
bindir:
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-06-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rack
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0'
|
|
19
|
+
version: '2.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0'
|
|
26
|
+
version: '2.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
28
|
+
name: zeitwerk
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
33
|
+
version: '2.0'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - "
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
40
|
+
version: '2.0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
47
|
+
version: '3.0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - "
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
54
|
+
version: '3.0'
|
|
55
55
|
description: Sinatra-like framework for CoAP and IoT messaging.
|
|
56
56
|
email:
|
|
57
57
|
- domitea@gmail.com
|
|
58
|
-
executables:
|
|
58
|
+
executables:
|
|
59
|
+
- takagi-dev
|
|
59
60
|
extensions: []
|
|
60
61
|
extra_rdoc_files: []
|
|
61
62
|
files:
|
|
62
|
-
- ".idea/.gitignore"
|
|
63
|
-
- ".idea/misc.xml"
|
|
64
|
-
- ".idea/modules.xml"
|
|
65
|
-
- ".idea/takagi.iml"
|
|
66
|
-
- ".idea/vcs.xml"
|
|
67
63
|
- ".rspec"
|
|
68
64
|
- ".rubocop.yml"
|
|
65
|
+
- ".yard/templates/default/layout/html/layout.erb"
|
|
66
|
+
- AGENTS.md
|
|
69
67
|
- CHANGELOG.md
|
|
70
68
|
- CODE_OF_CONDUCT.md
|
|
71
69
|
- LICENSE.txt
|
|
72
70
|
- README.md
|
|
71
|
+
- ROADMAP.md
|
|
73
72
|
- Rakefile
|
|
73
|
+
- Steepfile
|
|
74
|
+
- bin/takagi-dev
|
|
75
|
+
- docs/FIRST_PLUGIN_GUIDE.md
|
|
76
|
+
- docs/HOOKS.md
|
|
77
|
+
- examples/client_lifecycle_example.rb
|
|
78
|
+
- examples/cloud_gateway_app.rb
|
|
79
|
+
- examples/nested_api_app.rb
|
|
80
|
+
- examples/simple_device_app.rb
|
|
81
|
+
- examples/takagi.yml
|
|
74
82
|
- lib/takagi.rb
|
|
83
|
+
- lib/takagi/application.rb
|
|
75
84
|
- lib/takagi/base.rb
|
|
85
|
+
- lib/takagi/base/middleware_management.rb
|
|
86
|
+
- lib/takagi/base/plugin_management.rb
|
|
87
|
+
- lib/takagi/base/reactor_management.rb
|
|
88
|
+
- lib/takagi/base/server_lifecycle.rb
|
|
89
|
+
- lib/takagi/branding.rb
|
|
90
|
+
- lib/takagi/cbor/decoder.rb
|
|
91
|
+
- lib/takagi/cbor/encoder.rb
|
|
92
|
+
- lib/takagi/cbor/error.rb
|
|
93
|
+
- lib/takagi/cbor/version.rb
|
|
94
|
+
- lib/takagi/client.rb
|
|
95
|
+
- lib/takagi/client/response.rb
|
|
96
|
+
- lib/takagi/client_base.rb
|
|
97
|
+
- lib/takagi/coap.rb
|
|
98
|
+
- lib/takagi/coap/code_helpers.rb
|
|
99
|
+
- lib/takagi/coap/registries/base.rb
|
|
100
|
+
- lib/takagi/coap/registries/content_format.rb
|
|
101
|
+
- lib/takagi/coap/registries/message_type.rb
|
|
102
|
+
- lib/takagi/coap/registries/method.rb
|
|
103
|
+
- lib/takagi/coap/registries/option.rb
|
|
104
|
+
- lib/takagi/coap/registries/response.rb
|
|
105
|
+
- lib/takagi/coap/registries/signaling.rb
|
|
106
|
+
- lib/takagi/coap/signaling.rb
|
|
107
|
+
- lib/takagi/composite_router.rb
|
|
108
|
+
- lib/takagi/config.rb
|
|
109
|
+
- lib/takagi/controller.rb
|
|
110
|
+
- lib/takagi/controller/resource_allocator.rb
|
|
111
|
+
- lib/takagi/controller/thread_pool.rb
|
|
112
|
+
- lib/takagi/core/attribute_set.rb
|
|
113
|
+
- lib/takagi/discovery/core_link_format.rb
|
|
114
|
+
- lib/takagi/errors.rb
|
|
115
|
+
- lib/takagi/event_bus.rb
|
|
116
|
+
- lib/takagi/event_bus/address_prefix.rb
|
|
117
|
+
- lib/takagi/event_bus/async_executor.rb
|
|
118
|
+
- lib/takagi/event_bus/coap_bridge.rb
|
|
119
|
+
- lib/takagi/event_bus/future.rb
|
|
120
|
+
- lib/takagi/event_bus/lru_cache.rb
|
|
121
|
+
- lib/takagi/event_bus/message_buffer.rb
|
|
122
|
+
- lib/takagi/event_bus/observer_cleanup.rb
|
|
123
|
+
- lib/takagi/event_bus/scope.rb
|
|
124
|
+
- lib/takagi/helpers.rb
|
|
125
|
+
- lib/takagi/hooks.rb
|
|
126
|
+
- lib/takagi/initializer.rb
|
|
76
127
|
- lib/takagi/logger.rb
|
|
77
|
-
- lib/takagi/message.rb
|
|
128
|
+
- lib/takagi/message/base.rb
|
|
129
|
+
- lib/takagi/message/deduplication_cache.rb
|
|
130
|
+
- lib/takagi/message/inbound.rb
|
|
131
|
+
- lib/takagi/message/outbound.rb
|
|
132
|
+
- lib/takagi/message/request.rb
|
|
133
|
+
- lib/takagi/message/retransmission_manager.rb
|
|
134
|
+
- lib/takagi/middleware/authentication.rb
|
|
135
|
+
- lib/takagi/middleware/caching.rb
|
|
136
|
+
- lib/takagi/middleware/debugging.rb
|
|
137
|
+
- lib/takagi/middleware/logging.rb
|
|
138
|
+
- lib/takagi/middleware/metrics.rb
|
|
139
|
+
- lib/takagi/middleware/rate_limiting.rb
|
|
140
|
+
- lib/takagi/middleware_stack.rb
|
|
141
|
+
- lib/takagi/network/base.rb
|
|
142
|
+
- lib/takagi/network/framing/tcp.rb
|
|
143
|
+
- lib/takagi/network/framing/udp.rb
|
|
144
|
+
- lib/takagi/network/registry.rb
|
|
145
|
+
- lib/takagi/network/tcp.rb
|
|
146
|
+
- lib/takagi/network/tcp_sender.rb
|
|
147
|
+
- lib/takagi/network/udp.rb
|
|
148
|
+
- lib/takagi/network/udp_sender.rb
|
|
149
|
+
- lib/takagi/observable/emitter.rb
|
|
150
|
+
- lib/takagi/observable/reactor.rb
|
|
151
|
+
- lib/takagi/observable/registry.rb
|
|
152
|
+
- lib/takagi/observe_registry.rb
|
|
153
|
+
- lib/takagi/observer/client.rb
|
|
154
|
+
- lib/takagi/observer/registry.rb
|
|
155
|
+
- lib/takagi/observer/sender.rb
|
|
156
|
+
- lib/takagi/observer/watcher.rb
|
|
157
|
+
- lib/takagi/plugin.rb
|
|
158
|
+
- lib/takagi/profiles.rb
|
|
159
|
+
- lib/takagi/reactor.rb
|
|
160
|
+
- lib/takagi/reactor_registry.rb
|
|
161
|
+
- lib/takagi/registry/base.rb
|
|
162
|
+
- lib/takagi/response_builder.rb
|
|
78
163
|
- lib/takagi/router.rb
|
|
164
|
+
- lib/takagi/router/metadata_extractor.rb
|
|
165
|
+
- lib/takagi/router/route_matcher.rb
|
|
166
|
+
- lib/takagi/serialization.rb
|
|
167
|
+
- lib/takagi/serialization/base.rb
|
|
168
|
+
- lib/takagi/serialization/cbor_serializer.rb
|
|
169
|
+
- lib/takagi/serialization/json_serializer.rb
|
|
170
|
+
- lib/takagi/serialization/octet_stream_serializer.rb
|
|
171
|
+
- lib/takagi/serialization/registry.rb
|
|
172
|
+
- lib/takagi/serialization/text_serializer.rb
|
|
79
173
|
- lib/takagi/server.rb
|
|
174
|
+
- lib/takagi/server/multi.rb
|
|
175
|
+
- lib/takagi/server/registry.rb
|
|
176
|
+
- lib/takagi/server/tcp.rb
|
|
177
|
+
- lib/takagi/server/udp.rb
|
|
178
|
+
- lib/takagi/server/udp_worker.rb
|
|
179
|
+
- lib/takagi/server_registry.rb
|
|
180
|
+
- lib/takagi/tcp_client.rb
|
|
80
181
|
- lib/takagi/version.rb
|
|
81
182
|
- sig/takagi.rbs
|
|
183
|
+
- sig/takagi/application.rbs
|
|
184
|
+
- sig/takagi/base.rbs
|
|
185
|
+
- sig/takagi/base/middleware_management.rbs
|
|
186
|
+
- sig/takagi/base/reactor_management.rbs
|
|
187
|
+
- sig/takagi/base/server_lifecycle.rbs
|
|
188
|
+
- sig/takagi/cbor/decoder.rbs
|
|
189
|
+
- sig/takagi/cbor/encoder.rbs
|
|
190
|
+
- sig/takagi/cbor/error.rbs
|
|
191
|
+
- sig/takagi/cbor/version.rbs
|
|
192
|
+
- sig/takagi/client.rbs
|
|
193
|
+
- sig/takagi/client/response.rbs
|
|
194
|
+
- sig/takagi/client_base.rbs
|
|
195
|
+
- sig/takagi/coap.rbs
|
|
196
|
+
- sig/takagi/coap/code_helpers.rbs
|
|
197
|
+
- sig/takagi/coap/registries/base.rbs
|
|
198
|
+
- sig/takagi/coap/registries/content_format.rbs
|
|
199
|
+
- sig/takagi/coap/registries/message_type.rbs
|
|
200
|
+
- sig/takagi/coap/registries/method.rbs
|
|
201
|
+
- sig/takagi/coap/registries/option.rbs
|
|
202
|
+
- sig/takagi/coap/registries/response.rbs
|
|
203
|
+
- sig/takagi/composite_router.rbs
|
|
204
|
+
- sig/takagi/config.rbs
|
|
205
|
+
- sig/takagi/controller.rbs
|
|
206
|
+
- sig/takagi/core/attribute_set.rbs
|
|
207
|
+
- sig/takagi/discovery/core_link_format.rbs
|
|
208
|
+
- sig/takagi/event_bus.rbs
|
|
209
|
+
- sig/takagi/event_bus/address_prefix.rbs
|
|
210
|
+
- sig/takagi/event_bus/async_executor.rbs
|
|
211
|
+
- sig/takagi/event_bus/coap_bridge.rbs
|
|
212
|
+
- sig/takagi/event_bus/future.rbs
|
|
213
|
+
- sig/takagi/event_bus/lru_cache.rbs
|
|
214
|
+
- sig/takagi/event_bus/message_buffer.rbs
|
|
215
|
+
- sig/takagi/event_bus/observer_cleanup.rbs
|
|
216
|
+
- sig/takagi/helpers.rbs
|
|
217
|
+
- sig/takagi/initializer.rbs
|
|
218
|
+
- sig/takagi/logger.rbs
|
|
219
|
+
- sig/takagi/message/base.rbs
|
|
220
|
+
- sig/takagi/message/deduplication_cache.rbs
|
|
221
|
+
- sig/takagi/message/inbound.rbs
|
|
222
|
+
- sig/takagi/message/outbound.rbs
|
|
223
|
+
- sig/takagi/message/request.rbs
|
|
224
|
+
- sig/takagi/message/retransmission_manager.rbs
|
|
225
|
+
- sig/takagi/middleware/authentication.rbs
|
|
226
|
+
- sig/takagi/middleware/caching.rbs
|
|
227
|
+
- sig/takagi/middleware/debugging.rbs
|
|
228
|
+
- sig/takagi/middleware/logging.rbs
|
|
229
|
+
- sig/takagi/middleware/metrics.rbs
|
|
230
|
+
- sig/takagi/middleware/rate_limiting.rbs
|
|
231
|
+
- sig/takagi/middleware_stack.rbs
|
|
232
|
+
- sig/takagi/network/tcp_sender.rbs
|
|
233
|
+
- sig/takagi/network/udp_sender.rbs
|
|
234
|
+
- sig/takagi/observe_registry.rbs
|
|
235
|
+
- sig/takagi/observer/client.rbs
|
|
236
|
+
- sig/takagi/observer/sender.rbs
|
|
237
|
+
- sig/takagi/observer/watcher.rbs
|
|
238
|
+
- sig/takagi/profiles.rbs
|
|
239
|
+
- sig/takagi/reactor.rbs
|
|
240
|
+
- sig/takagi/reactor_registry.rbs
|
|
241
|
+
- sig/takagi/response_builder.rbs
|
|
242
|
+
- sig/takagi/router.rbs
|
|
243
|
+
- sig/takagi/router/metadata_extractor.rbs
|
|
244
|
+
- sig/takagi/router/route_matcher.rbs
|
|
245
|
+
- sig/takagi/serialization.rbs
|
|
246
|
+
- sig/takagi/server.rbs
|
|
247
|
+
- sig/takagi/server/multi.rbs
|
|
248
|
+
- sig/takagi/server/tcp.rbs
|
|
249
|
+
- sig/takagi/server/udp.rbs
|
|
250
|
+
- sig/takagi/server/udp_worker.rbs
|
|
251
|
+
- sig/takagi/server_registry.rbs
|
|
252
|
+
- sig/takagi/tcp_client.rbs
|
|
253
|
+
- sig/takagi/version.rbs
|
|
82
254
|
- takagi.gemspec
|
|
83
|
-
homepage: https://github.com/
|
|
255
|
+
homepage: https://github.com/takagi-works/takagi
|
|
84
256
|
licenses:
|
|
85
257
|
- MIT
|
|
86
258
|
metadata:
|
|
87
259
|
allowed_push_host: https://rubygems.org
|
|
88
|
-
homepage_uri: https://github.com/
|
|
89
|
-
source_code_uri: https://github.com/
|
|
90
|
-
changelog_uri: https://github.com/
|
|
91
|
-
|
|
260
|
+
homepage_uri: https://github.com/takagi-works/takagi
|
|
261
|
+
source_code_uri: https://github.com/takagi-works/takagi.git
|
|
262
|
+
changelog_uri: https://github.com/takagi-works/takagi/blob/master/CHANGELOG.md
|
|
263
|
+
rubygems_mfa_required: 'true'
|
|
264
|
+
post_install_message:
|
|
92
265
|
rdoc_options: []
|
|
93
266
|
require_paths:
|
|
94
267
|
- lib
|
|
@@ -103,8 +276,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
103
276
|
- !ruby/object:Gem::Version
|
|
104
277
|
version: '0'
|
|
105
278
|
requirements: []
|
|
106
|
-
rubygems_version: 3.3.
|
|
107
|
-
signing_key:
|
|
279
|
+
rubygems_version: 3.3.26
|
|
280
|
+
signing_key:
|
|
108
281
|
specification_version: 4
|
|
109
282
|
summary: Lightweight CoAP framework for Ruby
|
|
110
283
|
test_files: []
|
data/.idea/.gitignore
DELETED
data/.idea/misc.xml
DELETED
data/.idea/modules.xml
DELETED
data/.idea/takagi.iml
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
|
3
|
-
<component name="ModuleRunConfigurationManager">
|
|
4
|
-
<shared />
|
|
5
|
-
</component>
|
|
6
|
-
<component name="NewModuleRootManager">
|
|
7
|
-
<content url="file://$MODULE_DIR$">
|
|
8
|
-
<sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
|
|
9
|
-
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
|
10
|
-
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
|
11
|
-
</content>
|
|
12
|
-
<orderEntry type="inheritedJdk" />
|
|
13
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
|
14
|
-
<orderEntry type="library" scope="PROVIDED" name="ast (v2.4.2, ruby-3.1.2-p20) [gem]" level="application" />
|
|
15
|
-
<orderEntry type="library" scope="PROVIDED" name="bigdecimal (v3.1.9, ruby-3.1.2-p20) [gem]" level="application" />
|
|
16
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v2.5.6, ruby-3.1.2-p20) [gem]" level="application" />
|
|
17
|
-
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.6.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
18
|
-
<orderEntry type="library" scope="PROVIDED" name="json (v2.10.1, ruby-3.1.2-p20) [gem]" level="application" />
|
|
19
|
-
<orderEntry type="library" scope="PROVIDED" name="language_server-protocol (v3.17.0.4, ruby-3.1.2-p20) [gem]" level="application" />
|
|
20
|
-
<orderEntry type="library" scope="PROVIDED" name="lint_roller (v1.1.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
21
|
-
<orderEntry type="library" scope="PROVIDED" name="parallel (v1.26.3, ruby-3.1.2-p20) [gem]" level="application" />
|
|
22
|
-
<orderEntry type="library" scope="PROVIDED" name="parser (v3.3.7.1, ruby-3.1.2-p20) [gem]" level="application" />
|
|
23
|
-
<orderEntry type="library" scope="PROVIDED" name="racc (v1.8.1, ruby-3.1.2-p20) [gem]" level="application" />
|
|
24
|
-
<orderEntry type="library" scope="PROVIDED" name="rack (v3.1.10, ruby-3.1.2-p20) [gem]" level="application" />
|
|
25
|
-
<orderEntry type="library" scope="PROVIDED" name="rainbow (v3.1.1, ruby-3.1.2-p20) [gem]" level="application" />
|
|
26
|
-
<orderEntry type="library" scope="PROVIDED" name="rake (v13.2.1, ruby-3.1.2-p20) [gem]" level="application" />
|
|
27
|
-
<orderEntry type="library" scope="PROVIDED" name="regexp_parser (v2.10.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
28
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.13.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
29
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.13.3, ruby-3.1.2-p20) [gem]" level="application" />
|
|
30
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.13.3, ruby-3.1.2-p20) [gem]" level="application" />
|
|
31
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.13.2, ruby-3.1.2-p20) [gem]" level="application" />
|
|
32
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.13.2, ruby-3.1.2-p20) [gem]" level="application" />
|
|
33
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop (v1.73.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
34
|
-
<orderEntry type="library" scope="PROVIDED" name="rubocop-ast (v1.38.1, ruby-3.1.2-p20) [gem]" level="application" />
|
|
35
|
-
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.13.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
36
|
-
<orderEntry type="library" scope="PROVIDED" name="sequel (v5.89.0, ruby-3.1.2-p20) [gem]" level="application" />
|
|
37
|
-
<orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v3.1.4, ruby-3.1.2-p20) [gem]" level="application" />
|
|
38
|
-
<orderEntry type="library" scope="PROVIDED" name="unicode-emoji (v4.0.4, ruby-3.1.2-p20) [gem]" level="application" />
|
|
39
|
-
</component>
|
|
40
|
-
<component name="RakeTasksCache-v2">
|
|
41
|
-
<option name="myRootTask">
|
|
42
|
-
<RakeTaskImpl id="rake">
|
|
43
|
-
<subtasks>
|
|
44
|
-
<RakeTaskImpl description="Build takagi-0.1.0.gem into the pkg directory" fullCommand="build" id="build" />
|
|
45
|
-
<RakeTaskImpl id="build">
|
|
46
|
-
<subtasks>
|
|
47
|
-
<RakeTaskImpl description="Generate SHA512 checksum if takagi-0.1.0.gem into the checksums directory" fullCommand="build:checksum" id="checksum" />
|
|
48
|
-
</subtasks>
|
|
49
|
-
</RakeTaskImpl>
|
|
50
|
-
<RakeTaskImpl description="Remove any temporary products" fullCommand="clean" id="clean" />
|
|
51
|
-
<RakeTaskImpl description="Remove any generated files" fullCommand="clobber" id="clobber" />
|
|
52
|
-
<RakeTaskImpl description="Build and install takagi-0.1.0.gem into system gems" fullCommand="install" id="install" />
|
|
53
|
-
<RakeTaskImpl id="install">
|
|
54
|
-
<subtasks>
|
|
55
|
-
<RakeTaskImpl description="Build and install takagi-0.1.0.gem into system gems without network access" fullCommand="install:local" id="local" />
|
|
56
|
-
</subtasks>
|
|
57
|
-
</RakeTaskImpl>
|
|
58
|
-
<RakeTaskImpl description="Create tag v0.1.0 and build and push takagi-0.1.0.gem to https://rubygems.org" fullCommand="release[remote]" id="release[remote]" />
|
|
59
|
-
<RakeTaskImpl description="Run RuboCop" fullCommand="rubocop" id="rubocop" />
|
|
60
|
-
<RakeTaskImpl id="rubocop">
|
|
61
|
-
<subtasks>
|
|
62
|
-
<RakeTaskImpl description="Autocorrect RuboCop offenses (only when it's safe)" fullCommand="rubocop:autocorrect" id="autocorrect" />
|
|
63
|
-
<RakeTaskImpl description="Autocorrect RuboCop offenses (safe and unsafe)" fullCommand="rubocop:autocorrect_all" id="autocorrect_all" />
|
|
64
|
-
<RakeTaskImpl description="" fullCommand="rubocop:auto_correct" id="auto_correct" />
|
|
65
|
-
</subtasks>
|
|
66
|
-
</RakeTaskImpl>
|
|
67
|
-
<RakeTaskImpl description="Run RSpec code examples" fullCommand="spec" id="spec" />
|
|
68
|
-
<RakeTaskImpl description="" fullCommand="default" id="default" />
|
|
69
|
-
<RakeTaskImpl description="" fullCommand="release" id="release" />
|
|
70
|
-
<RakeTaskImpl id="release">
|
|
71
|
-
<subtasks>
|
|
72
|
-
<RakeTaskImpl description="" fullCommand="release:guard_clean" id="guard_clean" />
|
|
73
|
-
<RakeTaskImpl description="" fullCommand="release:rubygem_push" id="rubygem_push" />
|
|
74
|
-
<RakeTaskImpl description="" fullCommand="release:source_control_push" id="source_control_push" />
|
|
75
|
-
</subtasks>
|
|
76
|
-
</RakeTaskImpl>
|
|
77
|
-
</subtasks>
|
|
78
|
-
</RakeTaskImpl>
|
|
79
|
-
</option>
|
|
80
|
-
</component>
|
|
81
|
-
</module>
|
data/.idea/vcs.xml
DELETED
data/lib/takagi/message.rb
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Takagi
|
|
4
|
-
class Message
|
|
5
|
-
def self.parse(data)
|
|
6
|
-
version_type_tkl = data.bytes[0]
|
|
7
|
-
code = data.bytes[1]
|
|
8
|
-
data.bytes[2..3].pack("C*").unpack1("n")
|
|
9
|
-
token_length = version_type_tkl & 0x0F
|
|
10
|
-
token = data[4, token_length] || "".b
|
|
11
|
-
path = extract_uri_path(data.bytes[(4 + token_length)..])
|
|
12
|
-
payload_start = data.index("\xFF".b)
|
|
13
|
-
payload = payload_start ? data[(payload_start + 1)..].force_encoding("ASCII-8BIT") : nil
|
|
14
|
-
|
|
15
|
-
{ method: coap_code_to_method(code), path: path, token: token, payload: payload }
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def self.build_response(code, payload, token)
|
|
19
|
-
message_id = rand(0..0xFFFF)
|
|
20
|
-
response_code = coap_method_to_code(code)
|
|
21
|
-
header = [0x60 | (token.bytesize & 0x0F), response_code, (message_id >> 8) & 0xFF, message_id & 0xFF].pack("C*")
|
|
22
|
-
|
|
23
|
-
payload_marker = "\xFF".b
|
|
24
|
-
payload_data = payload.to_json.force_encoding("ASCII-8BIT")
|
|
25
|
-
header + token + payload_marker + payload_data
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def self.coap_code_to_method(code)
|
|
29
|
-
case code
|
|
30
|
-
when 1 then "GET"
|
|
31
|
-
when 2 then "POST"
|
|
32
|
-
when 3 then "PUT"
|
|
33
|
-
when 4 then "DELETE"
|
|
34
|
-
else "UNKNOWN"
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def self.coap_method_to_code(code)
|
|
39
|
-
case code
|
|
40
|
-
when 2.05 then 69 # 2.05 Content
|
|
41
|
-
when 4.04 then 132 # 4.04 Not Found
|
|
42
|
-
else 160 # Generic response
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def self.extract_uri_path(bytes)
|
|
47
|
-
path_segments = [] # Místo prostého stringu uložíme segmenty do pole
|
|
48
|
-
options_start = 0
|
|
49
|
-
last_option = 0
|
|
50
|
-
|
|
51
|
-
while options_start < bytes.length && bytes[options_start] != 255 # 0xFF = start payloadu
|
|
52
|
-
delta = (bytes[options_start] >> 4) & 0x0F # Číslo opce
|
|
53
|
-
len = bytes[options_start] & 0x0F # Délka dat
|
|
54
|
-
options_start += 1
|
|
55
|
-
|
|
56
|
-
option_number = last_option + delta
|
|
57
|
-
if option_number == 11 # Uri-Path (11 znamená část cesty)
|
|
58
|
-
segment = bytes[options_start, len].pack("C*").b
|
|
59
|
-
path_segments << segment # Ukládáme jednotlivé segmenty do pole
|
|
60
|
-
puts "Parsed path segment: #{segment}" # Debug výpis
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
options_start += len
|
|
64
|
-
last_option = option_number
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# Spojíme segmenty pomocí `/` a zajistíme, že začne `/`
|
|
68
|
-
path = "/#{path_segments.join("/")}"
|
|
69
|
-
|
|
70
|
-
path.force_encoding("UTF-8") if path.valid_encoding?
|
|
71
|
-
puts "Final parsed path: #{path}" # Debug výpis celé cesty
|
|
72
|
-
path
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|