Module: Wampus::Rpc::ServerExt

Extended by:
ActiveSupport::Concern
Included in:
Servers::WampCra
Defined in:
lib/wampus/rpc/server_ext.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#rpcsObject (readonly)

Returns the value of attribute rpcs.



8
9
10
# File 'lib/wampus/rpc/server_ext.rb', line 8

def rpcs
  @rpcs
end

Instance Method Details

#handle_call_msg(connection, data) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/wampus/rpc/server_ext.rb', line 43

def handle_call_msg(connection, data)
  call_id, proc_uri, *args = data

  uri = connection.resolve_prefix proc_uri
  handler = rpcs[uri]

  rpc_call_exists = rpcs.has_key?(uri)
  uri, args = on_before_call connection, call_id, uri, args, rpc_call_exists
  unless rpc_call_exists
    raise Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'NoSuchRPCEndpoint', 'Missing Method')
  end

  begin
    if handler[0]
      result = handler[0].send handler[1], connection, *args
    elsif handler[1].is_a? Proc
      result = handler[1].call connection, *args
    end
    result = on_after_call_success connection, result
    connection.write call_result_msg call_id, result
  rescue => error
    error = on_after_call_error connection, error
    msg = call_error_msg call_id, *error.to_call_error
    connection.write msg
    on_after_send_call_error connection, msg
  end
end

#initialize(*args) ⇒ Object



10
11
12
13
# File 'lib/wampus/rpc/server_ext.rb', line 10

def initialize(*args)
  @rpcs = {}
  super(*args) if defined? super
end

#on_after_call_error(connection, error) ⇒ Object



81
82
83
84
85
86
# File 'lib/wampus/rpc/server_ext.rb', line 81

def on_after_call_error(connection, error)
  unless error.is_a? Wampus::Errors::CallError
    error = Wampus::Errors::CallError.new(Wampus::Protocols::Wamp::URI_ERROR+'generic', "RPC Call Error: #{error.message}")
  end
  error
end

#on_after_call_success(connection, result) ⇒ Object



77
78
79
# File 'lib/wampus/rpc/server_ext.rb', line 77

def on_after_call_success(connection, result)
  result
end

#on_after_send_call_error(connection, error_msg) ⇒ Object



88
89
# File 'lib/wampus/rpc/server_ext.rb', line 88

def on_after_send_call_error(connection, error_msg)
end

#on_before_call(connection, call_id, uri, args, call_exists) ⇒ Object

– RPC Hooks



73
74
75
# File 'lib/wampus/rpc/server_ext.rb', line 73

def on_before_call(connection, call_id, uri, args, call_exists)
  [uri, args]
end