Module: DDP::Server::Protocol::RPC

Included in:
DDP::Server::Protocol
Defined in:
lib/ddp/server/protocol/rpc.rb

Overview

Protocol regarding remote procedure calls

Constant Summary collapse

NO_RESULT =
Object.new

Instance Method Summary collapse

Instance Method Details

#handle_method(id, method, params) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/ddp/server/protocol/rpc.rb', line 18

def handle_method(id, method, params)
  params ||= []
  result = api.invoke_rpc(method, *params)
  send_result(id, result)
rescue => e
  send_error_result(id, e)
end

#handle_rpcObject



8
9
10
11
12
13
14
15
16
# File 'lib/ddp/server/protocol/rpc.rb', line 8

def handle_rpc
  case @message['msg']
  when 'method'
    handle_method(@message['id'], @message['method'], @message['params'])
    true
  else
    false
  end
end

#send_error_result(id, error) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/ddp/server/protocol/rpc.rb', line 32

def send_error_result(id, error)
  message = { msg: 'result', id: id }
  message['error'] = {
    error: error.class.name,
    reason: error.message,
    details: "Backtrace: \n#{error.backtrace.join("\n")}"
  }
  write_message(message)
end

#send_result(id, result = NO_RESULT) ⇒ Object



26
27
28
29
30
# File 'lib/ddp/server/protocol/rpc.rb', line 26

def send_result(id, result = NO_RESULT)
  message = { msg: 'result', id: id }
  message['result'] = result unless result == NO_RESULT
  write_message(message)
end

#send_updated(methods) ⇒ Object



42
43
44
# File 'lib/ddp/server/protocol/rpc.rb', line 42

def send_updated(methods)
  write_message msg: 'updated', methods: methods
end