Sha256: 0d0956b64df5066afee89e666567bb5af9d2483c6c88f2548b5aeff5caa3c652

Contents?: true

Size: 1.18 KB

Versions: 20

Compression:

Stored size: 1.18 KB

Contents

module ASIR
  class Transport
    # !SLIDE
    # Stream Transport
    #
    # Base class handles Messages on a stream.
    # Stream Transports require a Coder that encodes to and from String payloads.
    class Stream < self

      # !SLIDE
      # Serve all Messages from a stream.
      def serve_stream! in_stream, out_stream
        with_server_signals! do
          @running = true
          _serve_stream! in_stream, out_stream
        end
      end

      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

      # Subclasses can override this method.
      def stream_eof? stream
        stream.eof?
      end

      # !SLIDE
      # Serve a Message from a stream.
      def serve_stream_message! in_stream, out_stream
        serve_message! in_stream, out_stream
      end
    end
    # !SLIDE END
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
asir-1.2.1 lib/asir/transport/stream.rb
asir-1.2.0 lib/asir/transport/stream.rb
asir-1.1.12 lib/asir/transport/stream.rb
asir-1.1.11 lib/asir/transport/stream.rb
asir-1.1.10 lib/asir/transport/stream.rb
asir-1.1.9 lib/asir/transport/stream.rb
asir-1.1.8 lib/asir/transport/stream.rb
asir-1.1.7 lib/asir/transport/stream.rb
asir-1.1.6 lib/asir/transport/stream.rb
asir-1.1.5 lib/asir/transport/stream.rb
asir-1.1.4 lib/asir/transport/stream.rb
asir-1.1.3 lib/asir/transport/stream.rb
asir-1.1.2 lib/asir/transport/stream.rb
asir-1.1.1 lib/asir/transport/stream.rb
asir-1.1.0 lib/asir/transport/stream.rb
asir-1.0.8 lib/asir/transport/stream.rb
asir-1.0.7 lib/asir/transport/stream.rb
asir-1.0.6 lib/asir/transport/stream.rb
asir-1.0.5 lib/asir/transport/stream.rb
asir-1.0.4 lib/asir/transport/stream.rb