Project

General

Profile

« Previous | Next » 

Revision feb16bd0

Added by Marc Dequènes about 13 years ago

  • ID feb16bd04a7ec187c0b34b06c5680c51197af84f

[evol] Cyborg/Interface: support returning API call replies asynchronously

View differences:

lib/cyborghood/cyborg/botnet/protocol.rb
end
def process_request_result(result)
# TODO: better processing of result (info/warnings/…)
if result[:error]
send_error_action(result[:reply_message], result[:error])
send_error_action(result[:reply_message], result[:errors])
else
send_reply_result(result[:reply_message], result[:action_result])
send_reply_result(result[:reply_message], result[:results])
end
end
......
:message => "missing parameters"
})
end
send_reply_ack(message)
@conversation.bot.schedule_task(@@request_callback) do
result = {
:reply_message => message
}
process_result_cb = Proc.new do |reply|
reply[:reply_message] = message
@@request_callback.call reply
end
@conversation.bot.schedule_task do
begin
result[:action_result] = @conversation.bot.interface._call(message.conv_thread.session,
@conversation.bot.interface._call(message.conv_thread.session,
message.action_parameters[:node],
message.action_parameters[:parameters])
message.action_parameters[:parameters],
&process_result_cb)
rescue CyberError => e
result[:error] = {
process_result_cb.call(:errors => [{
:category => e.category,
:severity => e.severity,
:message => e.message
}
}])
rescue
result[:error] = {
process_result_cb.call(:errors => [{
:category => 'unknown',
:severity => :unrecoverable,
:message => $!.to_s
}
}])
end
result
end
end
......
@conversation.bot.schedule_task(@@request_callback) do
{
:reply_message => message,
:action_result => @conversation.bot.interface._is_node?(message.conv_thread.session, message.action_parameters[:node])
:results => @conversation.bot.interface._is_node?(message.conv_thread.session, message.action_parameters[:node])
}
end
end

Also available in: Unified diff