Module: HTTPX::Plugins::StreamBidi::RequestMethods
- Defined in:
- lib/httpx/plugins/stream_bidi.rb,
sig/plugins/stream_bidi.rbs
Overview
Adds synchronization to request operations which may buffer payloads from different threads.
Instance Attribute Summary collapse
-
#headers_sent ⇒ Boolean
Returns the value of attribute headers_sent.
Instance Method Summary collapse
- #<<(chunk) ⇒ Object
- #can_buffer? ⇒ Boolean
- #close ⇒ Object
- #closed? ⇒ Boolean
- #flush_buffer_on_body { ... } ⇒ void
- #initialize ⇒ Object
-
#transition(nextstate) ⇒ Object
overrides state management transitions to introduce an intermediate
:waiting_for_chunkstate, which the request transitions to once payload is buffered.
Instance Attribute Details
#headers_sent ⇒ Boolean
Returns the value of attribute headers_sent.
259 260 261 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 259 def headers_sent @headers_sent end |
Instance Method Details
#<<(chunk) ⇒ Object
319 320 321 322 323 324 325 326 327 328 329 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 319 def <<(chunk) @mutex.synchronize do if @drainer @body.clear if @body.respond_to?(:clear) @drainer = nil end @body << chunk transition(:body) end end |
#can_buffer? ⇒ Boolean
279 280 281 282 283 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 279 def can_buffer? return super unless @options.stream super && @state != :waiting_for_chunk end |
#close ⇒ Object
331 332 333 334 335 336 337 338 339 340 341 342 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 331 def close return super unless @options.stream @mutex.synchronize do return if @closed @closed = true end # last chunk to send which ends the stream self << "" end |
#closed? ⇒ Boolean
273 274 275 276 277 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 273 def closed? return super unless @options.stream @closed end |
#flush_buffer_on_body { ... } ⇒ void
This method returns an undefined value.
269 270 271 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 269 def flush_buffer_on_body(&cb) @flush_buffer_on_body_cb = on(:body, &cb) end |
#initialize ⇒ Object
261 262 263 264 265 266 267 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 261 def initialize(*) super @headers_sent = false @closed = false @flush_buffer_on_body_cb = nil @mutex = Thread::Mutex.new end |
#transition(nextstate) ⇒ Object
overrides state management transitions to introduce an intermediate
:waiting_for_chunk state, which the request transitions to once payload
is buffered.
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
# File 'lib/httpx/plugins/stream_bidi.rb', line 288 def transition(nextstate) return super unless @options.stream headers_sent = @headers_sent case nextstate when :idle headers_sent = false if @flush_buffer_on_body_cb callbacks(:body).delete(@flush_buffer_on_body_cb) @flush_buffer_on_body_cb = nil end when :waiting_for_chunk return unless @state == :body when :body case @state when :headers headers_sent = true when :waiting_for_chunk # HACK: to allow super to pass through @state = :headers end end super.tap do # delay setting this up until after the first transition to :body @headers_sent = headers_sent end end |