From: "Darryl L. Pierce" <[email protected]> The example apps are:
* recv.rb - Listens on the default port and receives messages * send.rb - Sends messages that are processed by recv.rb --- examples/ruby/EXAMPLES | 5 ++++ examples/ruby/recv.rb | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ examples/ruby/send.rb | 65 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 examples/ruby/recv.rb create mode 100644 examples/ruby/send.rb diff --git a/examples/ruby/EXAMPLES b/examples/ruby/EXAMPLES index 468f072..f2eaa61 100644 --- a/examples/ruby/EXAMPLES +++ b/examples/ruby/EXAMPLES @@ -1 +1,6 @@ EXAMPLES: + + * send.rb, recv.rb: + Demonstrates the use of the messenger APIs for sending and receiving + messages from point to point. + diff --git a/examples/ruby/recv.rb b/examples/ruby/recv.rb new file mode 100644 index 0000000..55a97c0 --- /dev/null +++ b/examples/ruby/recv.rb @@ -0,0 +1,70 @@ +#!/usr/bin/env ruby +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +require 'cproton' +require 'optparse' + +addresses = [] + +OptionParser.new do |opts| + opts.banner = "Usage: recv.rb <addr1> ... <addrn>" + opts.parse! + + addresses = ARGV +end + +addresses = ["//~0.0.0.0"] if addresses.empty? + +mng = Cproton::pn_messenger nil + +if Cproton::pn_messenger_start(mng).nonzero? + puts "ERROR: #{Cproton::pn_messenger_error mng}" +end + +addresses.each do |address| + if Cproton::pn_messenger_subscribe(mng, address).nonzero? + puts "ERROR: #{Cproton::pn_messenger_error(mng)}" + exit + end +end + +msg = Cproton::pn_message + +loop do + if Cproton::pn_messenger_recv(mng, 10).nonzero? + puts "ERROR: #{Cproton::pn_messenger_error mng}" + exit + end + + while Cproton::pn_messenger_incoming(mng).nonzero? + if Cproton::pn_messenger_get(mng, msg).nonzero? + puts "ERROR: #{Cproton::pn_messenger_error mng}" + exit + else + (cd, body) = Cproton::pn_message_save(msg, 1024) + puts "Address: #{Cproton::pn_message_get_address msg}" + subject = Cproton::pn_message_get_subject(msg) || "(no subject)" + puts "Subject: #{subject}" + puts "Content: #{body}" + end + end +end + +Cproton::pn_messenger_stop mng +Cproton::pn_messenger_free mng diff --git a/examples/ruby/send.rb b/examples/ruby/send.rb new file mode 100644 index 0000000..64c872f --- /dev/null +++ b/examples/ruby/send.rb @@ -0,0 +1,65 @@ +#!/usr/bin/env ruby +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +require 'cproton' +require 'optparse' + +options = {} +messages = [] + +OptionParser.new do |opts| + opts.banner = "Usage: send.rb [options] <msg1> ... <msgn>" + opts.on("-a", "--address [addr]", "The receiver's address (def. //0.0.0.0)") do |f| + options[:address] = f + end + + opts.parse! + + messages = ARGV +end + +options[:address] = "//0.0.0.0" unless options[:address] +messages << "Hello world!" if messages.empty? + +mng = Cproton::pn_messenger nil + +Cproton::pn_messenger_start mng + +msg = Cproton::pn_message + +messages.each do |message| + Cproton::pn_message_set_address msg, options[:address] +# Cproton::pn_message_set_subject msg, "Message sent on #{Time.new}" + Cproton::pn_message_load msg, message + + if Cproton::pn_messenger_put(mng, msg).nonzero? + puts "ERROR: #{Cproton::pn_messenger_error mng}" + exit + end +end + +if Cproton::pn_messenger_send(mng).nonzero? + puts "ERROR: #{Cproton::pn_messenger_error mng}" + exit +else + puts "SENT: " + messages.join(",") +end + +Cproton::pn_messenger_stop mng +Cproton::pn_messenger_free mng -- 1.7.10.4 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
