lib/messaging.rb in jsparrow-1.1.2 vs lib/messaging.rb in jsparrow-1.1.3
- old
+ new
@@ -98,35 +98,51 @@
end
#
# Receptor de mensagens.
#
- class Receiver < Base
+ class Receiver < Base
def receive_message(criteria_for_receiving = {:timeout => DEFAULT_RECEIVER_TIMEOUT, :selector => ''}, &message_handler)
- # Cria uma conexao, uma sessao e um consumidor de qualquer tipo de mensagem
- connection = @connection_factory.create_connection
- session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE)
- consumer = session.create_consumer(@destination, criteria_for_receiving[:selector])
+ receive(:one_message, criteria_for_receiving, &message_handler)
+ end
+
+ def receive_messages(criteria_for_receiving = {:timeout => DEFAULT_RECEIVER_TIMEOUT, :selector => ''}, &message_handler)
+ receive(:many_messages, criteria_for_receiving, &message_handler)
+ end
+
+ # --- Private methods --- #
+ private
+
+ def receive(how_much_messages, criteria_for_receiving, &message_handler)
+ # Cria uma conexao, uma sessao e um consumidor de qualquer tipo de mensagem
+ connection = @connection_factory.create_connection
+ session = connection.create_session(false, Session::AUTO_ACKNOWLEDGE)
+ consumer = session.create_consumer(@destination, criteria_for_receiving[:selector])
- # Prepara a conexao para receber mensagens
- connection.start
+ # Prepara a conexao para receber mensagens
+ connection.start
- # Inicia o recebimento de mensagens
- timeout = criteria_for_receiving[:timeout] || DEFAULT_RECEIVER_TIMEOUT
+ # Inicia o recebimento de mensagens
+ timeout = criteria_for_receiving[:timeout] || DEFAULT_RECEIVER_TIMEOUT
+
+ # Uma (if) mensagem ou muitas (while) mensagens?
+ conditional_keyword = (how_much_messages.eql? :one_message) ? 'if' : 'while'
- while (received_message = consumer.receive(timeout))
- # Inclui o modulo de identificacao de mensagem, util para o message_handler
- class << received_message
- include MessageType
- end
+ eval %Q{
+ #{conditional_keyword} (received_message = consumer.receive(timeout))
+ # Inclui o modulo de identificacao de mensagem, util para o message_handler
+ class << received_message
+ include MessageType
+ end
+
+ # Delega o tratamento da mensagem para o bloco recebido
+ message_handler.call(received_message)
+ end
+ }
- # Delega o tratamento da mensagem para o bloco recebido
- message_handler.call(received_message)
+ # Fecha a conexao
+ connection.close
end
-
- # Fecha a conexao
- connection.close
- end
end
#
# Identifica o tipo de uma mensagem.
#
\ No newline at end of file