Class: ASIR::Transport::Stream

Inherits:
ASIR::Transport show all
Defined in:
lib/asir/transport/stream.rb

Overview

!SLIDE Stream Transport

Base class handles Messages on a stream. Stream Transports require a Coder that encodes to and from String payloads.

Direct Known Subclasses

ConnectionOriented, File

Constant Summary

Constants included from ASIR::ThreadVariable

ASIR::ThreadVariable::DEBUG, ASIR::ThreadVariable::EMPTY_HASH, ASIR::ThreadVariable::SETTER

Instance Attribute Summary

Attributes inherited from ASIR::Transport

#after_invoke_message, #after_receive_message, #before_send_message, #coder_needs_result_message, #decoder, #encoder, #invoker, #message_count, #needs_message_identifier, #needs_message_timestamp, #on_exception, #on_result_exception, #one_way, #running, #verbose

Attributes included from Log

#_logger

Instance Method Summary collapse

Methods inherited from ASIR::Transport

#_subclass_responsibility, #initialize, #invoke_message!, #needs_message_identifier?, #needs_message_timestamp?, #receive_message, #receive_result, #send_message, #send_result, #serve_message!, #stop!, #with_server_signals!

Methods included from Log

#_log, #_log_enabled=, #_log_enabled?, #_log_format, #_log_result, enabled, enabled=, included

Methods included from Initialization

#initialize

Methods included from AdditionalData

#[], #[]=, #_additional_data, #additional_data, #additional_data!, #additional_data=, included

Methods included from Message::Delay

#relative_message_delay!, #wait_for_delay!

Methods included from ASIR::ThreadVariable

included, setter

Constructor Details

This class inherits a constructor from ASIR::Transport

Instance Method Details

#_serve_stream!(in_stream, out_stream) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/asir/transport/stream.rb', line 19

def _serve_stream! in_stream, out_stream
  while @running && ! stream_eof?(in_stream)
    begin
      serve_stream_message! in_stream, out_stream
    rescue Error::Terminate => err
      @running = false
      _log [ :serve_stream_terminate, err ]
    rescue ::Exception => err
      _log [ :serve_stream_error, err, err.backtrace ]
      raise err
    end
  end
end

#serve_stream!(in_stream, out_stream) ⇒ Object

!SLIDE Serve all Messages from a stream.



12
13
14
15
16
17
# File 'lib/asir/transport/stream.rb', line 12

def serve_stream! in_stream, out_stream
  with_server_signals! do
    @running = true
    _serve_stream! in_stream, out_stream
  end
end

#serve_stream_message!(in_stream, out_stream) ⇒ Object

!SLIDE Serve a Message from a stream.



40
41
42
# File 'lib/asir/transport/stream.rb', line 40

def serve_stream_message! in_stream, out_stream
  serve_message! in_stream, out_stream
end

#stream_eof?(stream) ⇒ Boolean

Subclasses can override this method.

Returns:

  • (Boolean)


34
35
36
# File 'lib/asir/transport/stream.rb', line 34

def stream_eof? stream
  stream.eof?
end