Class: GrpcKit::Server

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

Instance Method Summary collapse

Constructor Details

#initialize(interceptors: []) ⇒ Server

Returns a new instance of Server.



8
9
10
11
12
13
# File 'lib/grpc_kit/server.rb', line 8

def initialize(interceptors: [])
  @sessions = []
  @rpc_descs = {}
  @interceptors = interceptors
  @mutex = Mutex.new
end

Instance Method Details

#dispatch(stream, session) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/grpc_kit/server.rb', line 42

def dispatch(stream, session)
  rpc = @rpc_descs[stream.headers.path]
  unless rpc
    raise "Unkown path #{path}"
  end

  rpc.invoke(stream, session)
end

#handle(handler) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/grpc_kit/server.rb', line 16

def handle(handler)
  handler.class.rpc_descs.each do |path, rpc_desc|
    if @rpc_descs[path]
      raise "Duplicated method registered #{path}, class: #{handler}"
    end

    @rpc_descs[path] = rpc_desc.build_server(handler, interceptors: @interceptors)
  end
end

#run(conn) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/grpc_kit/server.rb', line 26

def run(conn)
  GrpcKit.logger.debug("Run grpc_kit(v#{GrpcKit::VERSION})")
  establish_session(conn) do |s|
    s.submit_settings([])
    s.start
  end
end

#shutdownObject



34
35
36
37
38
39
40
# File 'lib/grpc_kit/server.rb', line 34

def shutdown
  GrpcKit.logger.debug('Shutdown grpc_kit')

  @mutex.synchronize do
    @sessions.each(&:finish)
  end
end