Class: GrpcKit::Session::ServerSession

Inherits:
DS9::Server
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/grpc_kit/session/server_session.rb

Instance Method Summary collapse

Constructor Details

#initialize(io, dispatcher) ⇒ ServerSession

Returns a new instance of ServerSession.

Parameters:



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

def initialize(io, dispatcher)
  super() # initialize DS9::Session

  @io = io
  @streams = {}
  @stop = false
  @inflights = []
  @drain_controller = GrpcKit::Session::DrainController.new
  @control_queue = GrpcKit::Session::ControlQueue.new
  @dispatcher = dispatcher
end

Instance Method Details

#drainvoid

This method returns an undefined value.



75
76
77
# File 'lib/grpc_kit/session/server_session.rb', line 75

def drain
  @drain_controller.start_draining
end

#run_oncebool

Return session can continue

Returns:

  • (bool)

    return session can continue



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/grpc_kit/session/server_session.rb', line 50

def run_once
  if @stop || !(want_read? || want_write?)
    # it could be called twice
    @streams.each_value(&:close)
    return false
  end

  rs, ws = @io.select

  if !rs.empty? && want_read?
    do_read
  end

  if !ws.empty? && want_write?
    send
  end

  true
rescue Errno::ECONNRESET, IOError => e
  GrpcKit.logger.error(e.message)
  shutdown
  false
end

#shutdownvoid

This method returns an undefined value.



80
81
82
83
84
85
# File 'lib/grpc_kit/session/server_session.rb', line 80

def shutdown
  stop
  @io.close
rescue StandardError => e
  GrpcKit.logger.error(e)
end

#startvoid

This method returns an undefined value.



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

def start
  loop do
    invoke

    if @streams.empty?
      unless @io.wait_readable
        shutdown
        break
      end
    end

    continue = run_once
    break unless continue
  end
ensure
  GrpcKit.logger.debug('Finish server session')
end