class GrpcKit::Session::SendBuffer
Public Class Methods
new()
click to toggle source
# File lib/grpc_kit/session/send_buffer.rb, line 6 def initialize @buffer = ''.b @end_write = false @deferred_read = false @mutex = Mutex.new end
Public Instance Methods
empty?()
click to toggle source
# File lib/grpc_kit/session/send_buffer.rb, line 40 def empty? @mutex.synchronize { @buffer.empty? } end
end_write()
click to toggle source
@return [void]
# File lib/grpc_kit/session/send_buffer.rb, line 31 def end_write @end_write = true end
end_write?()
click to toggle source
@return [Boolean]
# File lib/grpc_kit/session/send_buffer.rb, line 36 def end_write? @end_write end
eof?()
click to toggle source
# File lib/grpc_kit/session/send_buffer.rb, line 68 def eof? end_write? && @mutex.synchronize { @buffer.empty? } end
need_resume?()
click to toggle source
@return [Boolean]
# File lib/grpc_kit/session/send_buffer.rb, line 22 def need_resume? @deferred_read end
no_resume()
click to toggle source
# File lib/grpc_kit/session/send_buffer.rb, line 26 def no_resume @deferred_read = false end
read(size = nil)
click to toggle source
@param size [Integer,nil] @return [nil,DS9::ERR_DEFERRED,String]
# File lib/grpc_kit/session/send_buffer.rb, line 46 def read(size = nil) buf = do_read(size) if buf @deferred_read = false return buf end if end_write? # Call again because #write invokes `@buffer << data` before calling #end_write if (buf = do_read(size)) @deferred_read = false return buf end @deferred_read = false return nil # EOF end @deferred_read = true DS9::ERR_DEFERRED end
write(data, last: false)
click to toggle source
@param data [String] @param last [Boolean] @return [void]
# File lib/grpc_kit/session/send_buffer.rb, line 16 def write(data, last: false) @mutex.synchronize { @buffer << data } end_write if last end
Private Instance Methods
do_read(size = nil)
click to toggle source
# File lib/grpc_kit/session/send_buffer.rb, line 74 def do_read(size = nil) @mutex.synchronize do if @buffer.empty? nil elsif size.nil? || @buffer.bytesize < size buf = @buffer @buffer = ''.b buf else @buffer.freeze rbuf = @buffer.byteslice(0, size) @buffer = @buffer.byteslice(size, @buffer.bytesize) rbuf end end end