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
14
15
16
# File 'lib/grpc_kit/server.rb', line 8

def initialize(interceptors: [])
  @sessions = []
  @rpc_descs = {}
  @error_rpc = GrpcKit::Rpcs::Server::Error.new
  @interceptors = interceptors
  @mutex = Mutex.new

  GrpcKit.logger.debug("Launched grpc_kit(v#{GrpcKit::VERSION})")
end

Instance Method Details

#dispatch(stream, session) ⇒ Object



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

def dispatch(stream, session)
  rpc = @rpc_descs[stream.headers.path]
  unless rpc
    return @error_rpc.send_bad_status(stream, session, GrpcKit::Errors::Unimplemented.new(stream.headers.path))
  end

  rpc.invoke(stream, session)
end

#handle(handler) ⇒ Object



19
20
21
22
23
24
25
26
27
# File 'lib/grpc_kit/server.rb', line 19

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



29
30
31
32
33
34
# File 'lib/grpc_kit/server.rb', line 29

def run(conn)
  establish_session(conn) do |s|
    s.submit_settings([])
    s.start
  end
end

#shutdownObject



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

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

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