Module: TShield::Grpc
- Defined in:
- lib/tshield/grpc.rb,
lib/tshield/grpc/vcr.rb
Defined Under Namespace
Modules: RequestHandler, VCR
Class Method Summary
collapse
Class Method Details
.build_handler(base, descriptions, number_of_handlers, options) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/tshield/grpc.rb', line 56
def self.build_handler(base, descriptions, number_of_handlers, options)
handler = Class.new(base) do
class << self
attr_accessor :options
end
descriptions.each do |service_name, description|
puts description
method_name = service_name.to_s.underscore.to_sym
define_method(method_name) do |request, parameters|
handler(__method__, request, parameters)
end
end
end
handler.options = options
TShield::Grpc.const_set "GrpcService#{number_of_handlers}", handler
end
|
.load_services(services) ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/tshield/grpc.rb', line 40
def self.load_services(services)
handlers = []
number_of_handlers = 0
services.each do |file, options|
require file
base = Object.const_get("#{options['module']}::Service")
number_of_handlers += 1
implementation = build_handler(base, base.rpc_descs, number_of_handlers, options)
handlers << implementation
end
handlers
end
|
.run! ⇒ Object
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/tshield/grpc.rb', line 17
def self.run!
@configuration = TShield::Configuration.singleton.grpc
lib_dir = File.join(Dir.pwd, @configuration['proto_dir'])
$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
TShield.logger.info("loading proto files from #{lib_dir}")
bind = "0.0.0.0:#{@configuration['port']}"
TShield.logger.info("Starting gRPC server in #{bind}")
server = GRPC::RpcServer.new
server.add_http2_port(bind, :this_port_is_insecure)
services = load_services(@configuration['services'])
services.each do |class_service|
class_service.include RequestHandler
server.handle(class_service)
end
server.run_till_terminated_or_interrupted([1, 'int', 'SIGQUIT']) unless services.empty?
end
|