module TShield::Grpc
Attributes
options[RW]
Public Class Methods
build_handler(base, descriptions, number_of_handlers, options)
click to toggle source
# File lib/tshield/grpc.rb, line 55 def self.build_handler(base, descriptions, number_of_handlers, options) handler = Class.new(base) do class << self attr_writer :options attr_reader :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)
click to toggle source
# 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!()
click to toggle source
# 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