Class: GrpcKit::Session::IO

Inherits:
Object
  • Object
show all
Defined in:
lib/grpc_kit/session/io.rb

Instance Method Summary collapse

Constructor Details

#initialize(io) ⇒ IO



8
9
10
# File 'lib/grpc_kit/session/io.rb', line 8

def initialize(io)
  @io = io
end

Instance Method Details

#closeObject



12
13
14
# File 'lib/grpc_kit/session/io.rb', line 12

def close
  @io.close
end

#flushObject



53
54
55
# File 'lib/grpc_kit/session/io.rb', line 53

def flush
  @io.flush
end

#recv_event(length) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/grpc_kit/session/io.rb', line 16

def recv_event(length)
  data = @io.read_nonblock(length, nil, exception: false)

  case data
  when :wait_readable
    DS9::ERR_WOULDBLOCK
  when nil # nil means EOF
    DS9::ERR_EOF
  else
    data
  end
end

#send_event(data) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/grpc_kit/session/io.rb', line 29

def send_event(data)
  remain = data.bytesize
  size = remain
  while remain > 0
    begin
      remain -= @io.syswrite(data)
    rescue Errno::EAGAIN, Errno::EWOULDBLOCK
      unless IO.select(nil, [io], nil, 1)
        raise 'timeout writing data'
      end
    rescue IOError => e
      raise IOError, e # TODO
    end

    data = data.byteslice(remain..-1)
  end

  size
end

#wait_readableObject



49
50
51
# File 'lib/grpc_kit/session/io.rb', line 49

def wait_readable
  @io.wait_writable
end