class RubyNos::Processor
Attributes
agent[RW]
current_message[RW]
Public Class Methods
new(agent)
click to toggle source
# File lib/ruby_nos/processor.rb, line 6 def initialize agent @agent = agent end
Public Instance Methods
formatter()
click to toggle source
# File lib/ruby_nos/processor.rb, line 10 def formatter @formatter ||= Formatter.new end
process_message(received_message)
click to toggle source
# File lib/ruby_nos/processor.rb, line 18 def process_message received_message formatted_message = formatter.parse_message(received_message) self.current_message = Message.new(formatted_message) unless sender_uuid == agent.uuid || !correct_signature?(formatted_message) RubyNos.logger.send(:info, "#{self.current_message.type} arrives") if agent_receptor? || cloud_receptor? processor = message_processor.fetch(current_message.type, nil) processor.call if processor end end end
signature_generator()
click to toggle source
# File lib/ruby_nos/processor.rb, line 14 def signature_generator @signature_generator ||= SignatureGenerator.new end
Private Instance Methods
agent_receptor?()
click to toggle source
# File lib/ruby_nos/processor.rb, line 108 def agent_receptor? agent.uuid == receptor_uuid end
cloud_receptor?()
click to toggle source
# File lib/ruby_nos/processor.rb, line 112 def cloud_receptor? agent.cloud.uuid == receptor_uuid end
correct_signature?(received_message)
click to toggle source
# File lib/ruby_nos/processor.rb, line 62 def correct_signature? received_message if received_message[:sg] signature = received_message.delete(:sg) signature_generator.valid_signature?(received_message.to_s, signature) else true end end
get_uuid(uuid_param)
click to toggle source
# File lib/ruby_nos/processor.rb, line 116 def get_uuid uuid_param if uuid_param.start_with?("AGT:", "CLD:") uuid = formatter.convert_to_uuid(uuid_param[4..-1]) if formatter.uuid_format?(uuid) uuid else raise(ArgumentError, 'Argument format is incorrect') end else raise(ArgumentError, 'Argument format is incorrect') end end
message_processor()
click to toggle source
# File lib/ruby_nos/processor.rb, line 33 def message_processor { "PIN" => lambda {process_pin_message}, "PON" => lambda {process_pon_message}, "PRS" => lambda {process_presence_message}, "DSC" => lambda {process_discovery_message}, "ENQ" => lambda {process_enquiry_message}, "QNE" => lambda {process_enquiry_answer_message} } end
process_discovery_message()
click to toggle source
# File lib/ruby_nos/processor.rb, line 88 def process_discovery_message unless agent.cloud.list.is_on_the_list?(sender_uuid) update_cloud end send_response "PRS" end
process_enquiry_answer_message()
click to toggle source
# File lib/ruby_nos/processor.rb, line 100 def process_enquiry_answer_message agent.cloud.update(RemoteAgent.new({uuid: sender_uuid, timestamp: self.current_message.timestamp, rest_api: received_api})) end
process_enquiry_message()
click to toggle source
# File lib/ruby_nos/processor.rb, line 95 def process_enquiry_message update_cloud send_response "QNE" end
process_pin_message()
click to toggle source
# File lib/ruby_nos/processor.rb, line 71 def process_pin_message update_cloud send_response "PON" end
process_pon_message()
click to toggle source
# File lib/ruby_nos/processor.rb, line 76 def process_pon_message update_cloud end
process_presence_message()
click to toggle source
# File lib/ruby_nos/processor.rb, line 80 def process_presence_message if self.current_message.data[:present] == 0 agent.cloud.list.eliminate(sender_uuid) else update_cloud end end
received_api()
click to toggle source
# File lib/ruby_nos/processor.rb, line 52 def received_api RestApi.new({name: self.current_message.data[:name]}).tap do |api| if self.current_message.data[:apis] self.current_message.data[:apis].each do |endpoint| api.add_endpoint(endpoint) end end end end
receptor_uuid()
click to toggle source
# File lib/ruby_nos/processor.rb, line 48 def receptor_uuid get_uuid(self.current_message.to) end
send_response(type)
click to toggle source
# File lib/ruby_nos/processor.rb, line 129 def send_response type agent.send_message({type: type}) end
sender_uuid()
click to toggle source
# File lib/ruby_nos/processor.rb, line 44 def sender_uuid get_uuid(self.current_message.from) end
update_cloud()
click to toggle source
# File lib/ruby_nos/processor.rb, line 104 def update_cloud agent.cloud.update({agent_uuid: sender_uuid, info: self.current_message.data, timestamp: self.current_message.timestamp}) unless agent.cloud.uuid == sender_uuid end