class CitrusRpc::RpcServer::Server

Server

@example

Specifiy remote service interface paths

dirname = File.expand_path File.dirname(__FILE__)
records = [
  { :namespace => 'user', :path => dirname + '/remote/test' }
]

Create a new rpc server and start it

Server.new(:records => records, :port => 3333).start

Public Class Methods

new(args={}) click to toggle source

Create a new rpc server

@param [Hash] args Options

@option args [Integer] port @option args [Array] records

# File lib/citrus-rpc/rpc-server/server.rb, line 37
def initialize args={}
  raise ArgumentError, 'server port empty' unless args[:port]
  raise ArgumentError, 'server port must be bigger than zero' unless args[:port] > 0
  raise ArgumentError, 'records empty' unless args[:records]
  raise ArgumentError, 'records must be an array' unless args[:records].respond_to? :to_a

  @services = {}

  create_namespace args[:records]
  load_remote_services args[:records], args[:context]

  args[:services] = @services

  @gateway = Gateway.new args
  @gateway.on(:error) { |*args| emit :error, *args }
  @gateway.on(:closed) { |*args| emit :closed, *args }
end

Public Instance Methods

start() click to toggle source

Start the rpc server

# File lib/citrus-rpc/rpc-server/server.rb, line 56
def start
  @gateway.start
end
stop() click to toggle source

Stop the rpc server

# File lib/citrus-rpc/rpc-server/server.rb, line 61
def stop
  @gateway.stop
end

Private Instance Methods

create_namespace(records) click to toggle source

Create remote services namespace

@param [Array] records

@private

# File lib/citrus-rpc/rpc-server/server.rb, line 72
def create_namespace records
  records.each { |record| @services[record[:namespace]] ||= {} }
end
load_remote_services(records, context) click to toggle source

Load remote services

@param [Array] records @param [Object] context

@private

# File lib/citrus-rpc/rpc-server/server.rb, line 82
def load_remote_services records, context
  records.each { |record|
    remotes = load_app_remote record[:path]
    remotes.each { |service, remote|
      @services[record[:namespace]][service] = remote.new context
    }
  }
end