You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jr...@apache.org on 2016/07/13 09:54:46 UTC
[01/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Repository: qpid-site
Updated Branches:
refs/heads/asf-site 59433afd5 -> 75ca8b144
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html.in
new file mode 100644
index 0000000..3012861
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html.in
@@ -0,0 +1,137 @@
+
+<h1>test_examples.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">subprocess</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">unittest</span>
+
+<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="n">_unicode_prefix</span> <span class="o">=</span> <span class="s1">'u'</span>
+<span class="k">else</span><span class="p">:</span>
+ <span class="n">_unicode_prefix</span> <span class="o">=</span> <span class="s1">''</span>
+
+
+<span class="k">class</span> <span class="nc">ExamplesTest</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">test_helloworld</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">example</span><span class="o">=</span><span class="s2">"helloworld.py"</span><span class="p">):</span>
+ <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">example</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">p</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">p</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="p">[</span><span class="s1">'Hello World!'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_direct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_direct.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_blocking</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_blocking.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_tornado</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_tornado.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_direct_tornado</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_direct_tornado.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_simple_send_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recv</span><span class="o">=</span><span class="s1">'simple_recv.py'</span><span class="p">,</span> <span class="n">send</span><span class="o">=</span><span class="s1">'simple_send.py'</span><span class="p">):</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">recv</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">send</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{</span><span class="si">%s</span><span class="s2">'sequence': </span><span class="si">%i</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_client_server</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'client.py'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server.py'</span><span class="p">],</span> <span class="n">sleep</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">sleep</span><span class="p">:</span>
+ <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleep</span><span class="p">)</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">c</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Twas brillig, and the slithy toves"</span><span class="p">,</span>
+ <span class="s2">"Did gire and gymble in the wabe."</span><span class="p">,</span>
+ <span class="s2">"All mimsy were the borogroves,"</span><span class="p">,</span>
+ <span class="s2">"And the mome raths outgrabe."</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">l</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_sync_client_server</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'sync_client.py'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_client_server_tx</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_tx.py'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_sync_client_server_tx</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'sync_client.py'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_tx.py'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_client_server_direct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'client.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888/examples'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_direct.py'</span><span class="p">],</span> <span class="n">sleep</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_sync_client_server_direct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'sync_client.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888/examples'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_direct.py'</span><span class="p">],</span> <span class="n">sleep</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_db_send_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">maxDiff</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="c1"># setup databases</span>
+ <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'init'</span><span class="p">,</span> <span class="s1">'./src_db'</span><span class="p">])</span>
+ <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'init'</span><span class="p">,</span> <span class="s1">'./dst_db'</span><span class="p">])</span>
+ <span class="n">fill</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'insert'</span><span class="p">,</span> <span class="s1">'./src_db'</span><span class="p">],</span>
+ <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
+ <span class="n">fill</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"Message-</span><span class="si">%i</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
+ <span class="n">fill</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">fill</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="c1"># run send and recv</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_recv.py'</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'100'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_send.py'</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'100'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="c1"># verify output of receive</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"inserted message </span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+ <span class="c1"># verify state of databases</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'list'</span><span class="p">,</span> <span class="s1">'./dst_db'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">v</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"(</span><span class="si">%i</span><span class="s2">, </span><span class="si">%s</span><span class="s2">'Message-</span><span class="si">%i</span><span class="s2">')"</span> <span class="o">%</span> <span class="p">((</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">v</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_tx_send_tx_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_simple_send_recv</span><span class="p">(</span><span class="n">recv</span><span class="o">=</span><span class="s1">'tx_recv.py'</span><span class="p">,</span> <span class="n">send</span><span class="o">=</span><span class="s1">'tx_send.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_simple_send_direct_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">maxDiff</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'direct_recv.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'simple_send.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{</span><span class="si">%s</span><span class="s2">'sequence': </span><span class="si">%i</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_direct_send_simple_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'direct_send.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'simple_recv.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{</span><span class="si">%s</span><span class="s2">'sequence': </span><span class="si">%i</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+</pre></div>
+
+<p><a href="test_examples.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py
new file mode 100755
index 0000000..4baddcf
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton import Url
+from proton.reactor import Container
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRecv(MessagingHandler, TransactionHandler):
+ def __init__(self, url, messages, batch_size):
+ super(TxRecv, self).__init__(prefetch=0, auto_accept=False)
+ self.url = Url(url)
+ self.expected = messages
+ self.batch_size = batch_size
+ self.current_batch = 0
+ self.committed = 0
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = self.container.connect(self.url)
+ self.receiver = self.container.create_receiver(self.conn, self.url.path)
+ self.container.declare_transaction(self.conn, handler=self)
+ self.transaction = None
+
+ def on_message(self, event):
+ print(event.message.body)
+ self.transaction.accept(event.delivery)
+ self.current_batch += 1
+ if self.current_batch == self.batch_size:
+ self.transaction.commit()
+ self.transaction = None
+
+ def on_transaction_declared(self, event):
+ self.receiver.flow(self.batch_size)
+ self.transaction = event.transaction
+
+ def on_transaction_committed(self, event):
+ self.committed += self.current_batch
+ self.current_batch = 0
+ if self.expected == 0 or self.committed < self.expected:
+ self.container.declare_transaction(self.conn, handler=self)
+ else:
+ event.connection.close()
+
+ def on_disconnected(self, event):
+ self.current_batch = 0
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+parser.add_option("-b", "--batch-size", type="int", default=10,
+ help="number of messages in each transaction (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(TxRecv(opts.address, opts.messages, opts.batch_size)).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html.in
new file mode 100644
index 0000000..f74b3cd
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html.in
@@ -0,0 +1,62 @@
+
+<h1>tx_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Url</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxRecv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">prefetch</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">messages</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span> <span class="o">=</span> <span class="n">batch_size</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">flow</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">transaction</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-b"</span><span class="p">,</span> <span class="s2">"--batch-size"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages in each transaction (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">batch_size</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="tx_recv.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py
new file mode 100755
index 0000000..c38f651
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import sys
+import threading
+from proton.reactor import ApplicationEvent, Container, EventInjector
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRecv(MessagingHandler, TransactionHandler):
+ def __init__(self):
+ super(TxRecv, self).__init__(prefetch=0, auto_accept=False)
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = self.container.connect("localhost:5672")
+ self.receiver = self.container.create_receiver(self.conn, "examples")
+ self.container.declare_transaction(self.conn, handler=self, settle_before_discharge=True)
+ self.transaction = None
+
+ def on_message(self, event):
+ print(event.message.body)
+ self.transaction.accept(event.delivery)
+
+ def on_transaction_declared(self, event):
+ self.transaction = event.transaction
+ print("transaction declared")
+
+ def on_transaction_committed(self, event):
+ print("transaction committed")
+ self.container.declare_transaction(self.conn, handler=self)
+
+ def on_transaction_aborted(self, event):
+ print("transaction aborted")
+ self.container.declare_transaction(self.conn, handler=self)
+
+ def on_commit(self, event):
+ self.transaction.commit()
+
+ def on_abort(self, event):
+ self.transaction.abort()
+
+ def on_fetch(self, event):
+ self.receiver.flow(1)
+
+ def on_quit(self, event):
+ c = self.receiver.connection
+ self.receiver.close()
+ c.close()
+
+try:
+ reactor = Container(TxRecv())
+ events = EventInjector()
+ reactor.selectable(events)
+ thread = threading.Thread(target=reactor.run)
+ thread.daemon=True
+ thread.start()
+
+ print("Enter 'fetch', 'commit' or 'abort'")
+ while True:
+ line = sys.stdin.readline()
+ if line:
+ events.trigger(ApplicationEvent(line.strip()))
+ else:
+ break
+except KeyboardInterrupt: pass
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html.in
new file mode 100644
index 0000000..ac7bec0
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html.in
@@ -0,0 +1,68 @@
+
+<h1>tx_recv_interactive.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">ApplicationEvent</span><span class="p">,</span> <span class="n">Container</span><span class="p">,</span> <span class="n">EventInjector</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxRecv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">prefetch</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">settle_before_discharge</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">transaction</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"transaction declared"</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"transaction committed"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_aborted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"transaction aborted"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_commit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_abort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">abort</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_fetch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">flow</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_quit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">connection</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">c</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">reactor</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">())</span>
+ <span class="n">events</span> <span class="o">=</span> <span class="n">EventInjector</span><span class="p">()</span>
+ <span class="n">reactor</span><span class="o">.</span><span class="n">selectable</span><span class="p">(</span><span class="n">events</span><span class="p">)</span>
+ <span class="n">thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">reactor</span><span class="o">.</span><span class="n">run</span><span class="p">)</span>
+ <span class="n">thread</span><span class="o">.</span><span class="n">daemon</span><span class="o">=</span><span class="bp">True</span>
+ <span class="n">thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Enter 'fetch', 'commit' or 'abort'"</span><span class="p">)</span>
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="n">line</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">line</span><span class="p">:</span>
+ <span class="n">events</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">ApplicationEvent</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">break</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="tx_recv_interactive.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py
new file mode 100755
index 0000000..bda6780
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message, Url
+from proton.reactor import Container
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxSend(MessagingHandler, TransactionHandler):
+ def __init__(self, url, messages, batch_size):
+ super(TxSend, self).__init__()
+ self.url = Url(url)
+ self.current_batch = 0
+ self.committed = 0
+ self.confirmed = 0
+ self.total = messages
+ self.batch_size = batch_size
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = self.container.connect(self.url)
+ self.sender = self.container.create_sender(self.conn, self.url.path)
+ self.container.declare_transaction(self.conn, handler=self)
+ self.transaction = None
+
+ def on_transaction_declared(self, event):
+ self.transaction = event.transaction
+ self.send()
+
+ def on_sendable(self, event):
+ self.send()
+
+ def send(self):
+ while self.transaction and self.sender.credit and (self.committed + self.current_batch) < self.total:
+ seq = self.committed + self.current_batch + 1
+ msg = Message(id=seq, body={'sequence':seq})
+ self.transaction.send(self.sender, msg)
+ self.current_batch += 1
+ if self.current_batch == self.batch_size:
+ self.transaction.commit()
+ self.transaction = None
+
+ def on_accepted(self, event):
+ if event.sender == self.sender:
+ self.confirmed += 1
+
+ def on_transaction_committed(self, event):
+ self.committed += self.current_batch
+ if self.committed == self.total:
+ print("all messages committed")
+ event.connection.close()
+ else:
+ self.current_batch = 0
+ self.container.declare_transaction(self.conn, handler=self)
+
+ def on_disconnected(self, event):
+ self.current_batch = 0
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages transactionally to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to send (default %default)")
+parser.add_option("-b", "--batch-size", type="int", default=10,
+ help="number of messages in each transaction (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(TxSend(opts.address, opts.messages, opts.batch_size)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html.in
new file mode 100644
index 0000000..1f54fb9
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html.in
@@ -0,0 +1,74 @@
+
+<h1>tx_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span><span class="p">,</span> <span class="n">Url</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxSend</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxSend</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span> <span class="o">=</span> <span class="n">batch_size</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">transaction</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span><span class="p">)</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="n">seq</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">+</span> <span class="mi">1</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">seq</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s1">'sequence'</span><span class="p">:</span><span class="n">seq</span><span class="p">})</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"all messages committed"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages transactionally to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-b"</span><span class="p">,</span> <span class="s2">"--batch-size"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages in each transaction (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">TxSend</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">batch_size</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="tx_send.py">Download this file</a></p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[14/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html
new file mode 100644
index 0000000..2a1b0d9
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>recurring_timer_tornado.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>recurring_timer_tornado.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>recurring_timer_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Handler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">TornadoLoop</span>
+
+<span class="k">class</span> <span class="nc">Recurring</span><span class="p">(</span><span class="n">Handler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">period</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">period</span> <span class="o">=</span> <span class="n">period</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_timer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Tick..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">container</span> <span class="o">=</span> <span class="n">TornadoLoop</span><span class="p">(</span><span class="n">Recurring</span><span class="p">(</span><span class="mf">1.0</span><span class="p">))</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+ <span class="k">print</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="recurring_timer_tornado.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py
new file mode 100755
index 0000000..dc062d5
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton.reactor import Container, Selector
+from proton.handlers import MessagingHandler
+
+class Recv(MessagingHandler):
+ def __init__(self):
+ super(Recv, self).__init__()
+
+ def on_start(self, event):
+ conn = event.container.connect("localhost:5672")
+ event.container.create_receiver(conn, "examples", options=Selector("colour = 'green'"))
+
+ def on_message(self, event):
+ print(event.message.body)
+
+try:
+ Container(Recv()).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html
new file mode 100644
index 0000000..0522199
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>selected_recv.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>selected_recv.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>selected_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">Selector</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">Selector</span><span class="p">(</span><span class="s2">"colour = 'green'"</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">())</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="selected_recv.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py
new file mode 100755
index 0000000..8cebaad
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Server(MessagingHandler):
+ def __init__(self, url, address):
+ super(Server, self).__init__()
+ self.url = url
+ self.address = address
+
+ def on_start(self, event):
+ print("Listening on", self.url)
+ self.container = event.container
+ self.conn = event.container.connect(self.url)
+ self.receiver = event.container.create_receiver(self.conn, self.address)
+ self.server = self.container.create_sender(self.conn, None)
+
+ def on_message(self, event):
+ print("Received", event.message)
+ self.server.send(Message(address=event.message.reply_to, body=event.message.body.upper(),
+ correlation_id=event.message.correlation_id))
+
+try:
+ Container(Server("0.0.0.0:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html
new file mode 100644
index 0000000..c51ecc6
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html
@@ -0,0 +1,175 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>server.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>server.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>server.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Listening on"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Received"</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
+ <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">))</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Server</span><span class="p">(</span><span class="s2">"0.0.0.0:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="server.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py
new file mode 100755
index 0000000..a9910f1
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import generate_uuid, Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Server(MessagingHandler):
+ def __init__(self, url):
+ super(Server, self).__init__()
+ self.url = url
+ self.senders = {}
+
+ def on_start(self, event):
+ print("Listening on", self.url)
+ self.container = event.container
+ self.acceptor = event.container.listen(self.url)
+
+ def on_link_opening(self, event):
+ if event.link.is_sender:
+ if event.link.remote_source and event.link.remote_source.dynamic:
+ event.link.source.address = str(generate_uuid())
+ self.senders[event.link.source.address] = event.link
+ elif event.link.remote_target and event.link.remote_target.address:
+ event.link.target.address = event.link.remote_target.address
+ self.senders[event.link.remote_target.address] = event.link
+ elif event.link.remote_source:
+ event.link.source.address = event.link.remote_source.address
+ elif event.link.remote_target:
+ event.link.target.address = event.link.remote_target.address
+
+ def on_message(self, event):
+ print("Received", event.message)
+ sender = self.senders.get(event.message.reply_to)
+ if not sender:
+ print("No link for reply")
+ return
+ sender.send(Message(address=event.message.reply_to, body=event.message.body.upper(),
+ correlation_id=event.message.correlation_id))
+
+try:
+ Container(Server("0.0.0.0:8888")).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html
new file mode 100644
index 0000000..d338a8b
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html
@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>server_direct.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>server_direct.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>server_direct.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">generate_uuid</span><span class="p">,</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="p">{}</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Listening on"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opening</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">dynamic</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">generate_uuid</span><span class="p">())</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Received"</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"No link for reply"</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
+ <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">))</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Server</span><span class="p">(</span><span class="s2">"0.0.0.0:8888"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="server_direct.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py
new file mode 100755
index 0000000..51e734c
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.reactor import Container
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRequest(TransactionHandler):
+ def __init__(self, response, sender, request_delivery):
+ super(TxRequest, self).__init__()
+ self.response = response
+ self.sender = sender
+ self.request_delivery = request_delivery
+
+ def on_transaction_declared(self, event):
+ event.transaction.send(self.sender, self.response)
+ event.transaction.accept(self.request_delivery)
+ event.transaction.commit()
+
+ def on_transaction_committed(self, event):
+ print("Request processed successfully")
+
+ def on_transaction_aborted(self, event):
+ print("Request processing aborted")
+
+
+class TxServer(MessagingHandler):
+ def __init__(self, host, address):
+ super(TxServer, self).__init__(auto_accept=False)
+ self.host = host
+ self.address = address
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = event.container.connect(self.host, reconnect=False)
+ self.receiver = event.container.create_receiver(self.conn, self.address)
+ self.senders = {}
+ self.relay = None
+
+ def on_message(self, event):
+ sender = self.relay
+ if not sender:
+ sender = self.senders.get(event.message.reply_to)
+ if not sender:
+ sender = self.container.create_sender(self.conn, event.message.reply_to)
+ self.senders[event.message.reply_to] = sender
+
+ response = Message(address=event.message.reply_to, body=event.message.body.upper(),
+ correlation_id=event.message.correlation_id)
+ self.container.declare_transaction(self.conn, handler=TxRequest(response, sender, event.delivery))
+
+ def on_connection_open(self, event):
+ if event.connection.remote_offered_capabilities and 'ANONYMOUS-RELAY' in event.connection.remote_offered_capabilities:
+ self.relay = self.container.create_sender(self.conn, None)
+
+try:
+ Container(TxServer("localhost:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html
new file mode 100644
index 0000000..7b9d859
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html
@@ -0,0 +1,205 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>server_tx.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>server_tx.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>server_tx.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxRequest</span><span class="p">(</span><span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">request_delivery</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxRequest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">response</span> <span class="o">=</span> <span class="n">response</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">sender</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">request_delivery</span> <span class="o">=</span> <span class="n">request_delivery</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">response</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request_delivery</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Request processed successfully"</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_aborted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Request processing aborted"</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="nc">TxServer</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="p">,</span> <span class="n">reconnect</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="p">{}</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relay</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender</span>
+
+ <span class="n">response</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
+ <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="n">TxRequest</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">remote_offered_capabilities</span> <span class="ow">and</span> <span class="s1">'ANONYMOUS-RELAY'</span> <span class="ow">in</span> <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">remote_offered_capabilities</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">TxServer</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="server_tx.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py
new file mode 100755
index 0000000..5322500
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Recv(MessagingHandler):
+ def __init__(self, url, count):
+ super(Recv, self).__init__()
+ self.url = url
+ self.expected = count
+ self.received = 0
+
+ def on_start(self, event):
+ event.container.create_receiver(self.url)
+
+ def on_message(self, event):
+ if event.message.id and event.message.id < self.received:
+ # ignore duplicate message
+ return
+ if self.expected == 0 or self.received < self.expected:
+ print(event.message.body)
+ self.received += 1
+ if self.received == self.expected:
+ event.receiver.close()
+ event.connection.close()
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Recv(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[05/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html.in
new file mode 100644
index 0000000..d2aab24
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html.in
@@ -0,0 +1,177 @@
+
+<h1>ssl_client_cert.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sasl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/ssl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_client_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_server_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_certificate</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">sasl</span><span class="p">;</span>
+
+<span class="c1">// Helper functions defined below.</span>
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">();</span>
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">);</span>
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cert_directory</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="p">);</span>
+
+
+<span class="k">struct</span> <span class="nl">server_handler</span> <span class="p">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+
+ <span class="kt">void</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound server connection connected via SSL. Protocol: "</span> <span class="o"><<</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">protocol</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">sasl</span><span class="p">().</span><span class="n">outcome</span><span class="p">()</span> <span class="o">==</span> <span class="n">sasl</span><span class="o">::</span><span class="n">OK</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">remote_subject</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound client certificate identity "</span> <span class="o"><<</span> <span class="n">find_CN</span><span class="p">(</span><span class="n">subject</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound client authentication failed"</span> <span class="o"><<</span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="nf">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">hello_world_direct</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">server_handler</span> <span class="n">s_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world_direct</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// Configure listener. Details vary by platform.</span>
+ <span class="n">ssl_certificate</span> <span class="n">server_cert</span> <span class="o">=</span> <span class="n">platform_certificate</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">,</span> <span class="s">"tserverpw"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">client_CA</span> <span class="o">=</span> <span class="n">platform_CA</span><span class="p">(</span><span class="s">"tclient"</span><span class="p">);</span>
+ <span class="c1">// Specify an SSL domain with CA's for client certificate verification.</span>
+ <span class="n">ssl_server_options</span> <span class="nf">srv_ssl</span><span class="p">(</span><span class="n">server_cert</span><span class="p">,</span> <span class="n">client_CA</span><span class="p">);</span>
+ <span class="n">connection_options</span> <span class="n">server_opts</span><span class="p">;</span>
+ <span class="n">server_opts</span><span class="p">.</span><span class="n">ssl_server_options</span><span class="p">(</span><span class="n">srv_ssl</span><span class="p">).</span><span class="n">handler</span><span class="p">(</span><span class="n">s_handler</span><span class="p">);</span>
+ <span class="n">server_opts</span><span class="p">.</span><span class="n">sasl_allowed_mechs</span><span class="p">(</span><span class="s">"EXTERNAL"</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">server_connection_options</span><span class="p">(</span><span class="n">server_opts</span><span class="p">);</span>
+
+ <span class="c1">// Configure client.</span>
+ <span class="n">ssl_certificate</span> <span class="n">client_cert</span> <span class="o">=</span> <span class="n">platform_certificate</span><span class="p">(</span><span class="s">"tclient"</span><span class="p">,</span> <span class="s">"tclientpw"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">server_CA</span> <span class="o">=</span> <span class="n">platform_CA</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">);</span>
+ <span class="c1">// Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification</span>
+ <span class="c1">// from VERIFY_PEER_NAME to VERIFY_PEER.</span>
+ <span class="n">ssl_client_options</span> <span class="nf">ssl_cli</span><span class="p">(</span><span class="n">client_cert</span><span class="p">,</span> <span class="n">server_CA</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl</span><span class="o">::</span><span class="n">VERIFY_PEER</span><span class="p">);</span>
+ <span class="n">connection_options</span> <span class="n">client_opts</span><span class="p">;</span>
+ <span class="n">client_opts</span><span class="p">.</span><span class="n">ssl_client_options</span><span class="p">(</span><span class="n">ssl_cli</span><span class="p">).</span><span class="n">sasl_allowed_mechs</span><span class="p">(</span><span class="s">"EXTERNAL"</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">client_connection_options</span><span class="p">(</span><span class="n">client_opts</span><span class="p">);</span>
+
+ <span class="n">s_handler</span><span class="p">.</span><span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">remote_subject</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Outgoing client connection connected via SSL. Server certificate identity "</span> <span class="o"><<</span>
+ <span class="n">find_CN</span><span class="p">(</span><span class="n">subject</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// All done.</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to ourselves, not a broker.</span>
+ <span class="c1">// Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"amqps://127.0.0.1:8888/examples"</span><span class="p">;</span>
+ <span class="c1">// Location of certificates and private key information:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">></span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">cert_directory</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
+ <span class="kt">size_t</span> <span class="n">sz</span> <span class="o">=</span> <span class="n">cert_directory</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">sz</span> <span class="o">&&</span> <span class="n">cert_directory</span><span class="p">[</span><span class="n">sz</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'/'</span><span class="p">)</span>
+ <span class="n">cert_directory</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="s">"/"</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="n">cert_directory</span> <span class="o">=</span> <span class="s">"ssl_certs/"</span><span class="p">;</span>
+
+ <span class="n">hello_world_direct</span> <span class="n">hwd</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hwd</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+
+
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">()</span> <span class="p">{</span>
+ <span class="c1">// Current defaults.</span>
+<span class="cp">#if defined(WIN32)</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+<span class="cp">#else</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+<span class="cp">#endif</span>
+<span class="p">}</span>
+
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// The first argument will be the name of the file containing the public certificate, the</span>
+ <span class="c1">// second argument will be the name of the file containing the private key.</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">,</span>
+ <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-private-key.pem"</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel</span>
+ <span class="c1">// The first argument will be the database or store that contains one or more complete certificates</span>
+ <span class="c1">// (public and private data). The second will be an optional name of the certificate in the store</span>
+ <span class="c1">// (not used in this example with one certificate per store).</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-full.p12"</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// In this simple example with self-signed certificates, the peer's certificate is the CA database.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.p12"</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">subject</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// The subject string is returned with different whitespace and component ordering between platforms.</span>
+ <span class="c1">// Here we just return the common name by searching for "CN=...." in the subject, knowing that</span>
+ <span class="c1">// the test certificates do not contain any escaped characters.</span>
+ <span class="kt">size_t</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">"CN="</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span> <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"No common name in certificate subject"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cn</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">pos</span><span class="p">);</span>
+ <span class="n">pos</span> <span class="o">=</span> <span class="n">cn</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="sc">','</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span> <span class="o">?</span> <span class="nl">cn</span> <span class="p">:</span> <span class="n">cn</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">pos</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="ssl_client_cert.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py
new file mode 100755
index 0000000..fed7fb2
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton_server import Server
+
+class Application(Server):
+ def __init__(self, host, address):
+ super(Application, self).__init__(host, address)
+
+ def on_request(self, request, reply_to):
+ response = request.upper()
+ self.send(response, reply_to)
+ print("Request from: %s" % reply_to)
+
+try:
+ Application("localhost:5672", "examples").run()
+except KeyboardInterrupt: pass
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html.in
new file mode 100644
index 0000000..b410d46
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html.in
@@ -0,0 +1,20 @@
+
+<h1>abstract_server.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton_server</span> <span class="kn">import</span> <span class="n">Server</span>
+
+<span class="k">class</span> <span class="nc">Application</span><span class="p">(</span><span class="n">Server</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Application</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">):</span>
+ <span class="n">response</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">)</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Request from: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">reply_to</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Application</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">)</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="abstract_server.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py
new file mode 100755
index 0000000..8769268
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+import collections, optparse
+from proton import Endpoint, generate_uuid
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Queue(object):
+ def __init__(self, dynamic=False):
+ self.dynamic = dynamic
+ self.queue = collections.deque()
+ self.consumers = []
+
+ def subscribe(self, consumer):
+ self.consumers.append(consumer)
+
+ def unsubscribe(self, consumer):
+ if consumer in self.consumers:
+ self.consumers.remove(consumer)
+ return len(self.consumers) == 0 and (self.dynamic or self.queue.count == 0)
+
+ def publish(self, message):
+ self.queue.append(message)
+ self.dispatch()
+
+ def dispatch(self, consumer=None):
+ if consumer:
+ c = [consumer]
+ else:
+ c = self.consumers
+ while self._deliver_to(c): pass
+
+ def _deliver_to(self, consumers):
+ try:
+ result = False
+ for c in consumers:
+ if c.credit:
+ c.send(self.queue.popleft())
+ result = True
+ return result
+ except IndexError: # no more messages
+ return False
+
+class Broker(MessagingHandler):
+ def __init__(self, url):
+ super(Broker, self).__init__()
+ self.url = url
+ self.queues = {}
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+
+ def _queue(self, address):
+ if address not in self.queues:
+ self.queues[address] = Queue()
+ return self.queues[address]
+
+ def on_link_opening(self, event):
+ if event.link.is_sender:
+ if event.link.remote_source.dynamic:
+ address = str(generate_uuid())
+ event.link.source.address = address
+ q = Queue(True)
+ self.queues[address] = q
+ q.subscribe(event.link)
+ elif event.link.remote_source.address:
+ event.link.source.address = event.link.remote_source.address
+ self._queue(event.link.source.address).subscribe(event.link)
+ elif event.link.remote_target.address:
+ event.link.target.address = event.link.remote_target.address
+
+ def _unsubscribe(self, link):
+ if link.source.address in self.queues and self.queues[link.source.address].unsubscribe(link):
+ del self.queues[link.source.address]
+
+ def on_link_closing(self, event):
+ if event.link.is_sender:
+ self._unsubscribe(event.link)
+
+ def on_connection_closing(self, event):
+ self.remove_stale_consumers(event.connection)
+
+ def on_disconnected(self, event):
+ self.remove_stale_consumers(event.connection)
+
+ def remove_stale_consumers(self, connection):
+ l = connection.link_head(Endpoint.REMOTE_ACTIVE)
+ while l:
+ if l.is_sender:
+ self._unsubscribe(l)
+ l = l.next(Endpoint.REMOTE_ACTIVE)
+
+ def on_sendable(self, event):
+ self._queue(event.link.source.address).dispatch(event.link)
+
+ def on_message(self, event):
+ self._queue(event.link.target.address).publish(event.message)
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672",
+ help="address router listens on (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Broker(opts.address)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html.in
new file mode 100644
index 0000000..2b4fa48
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html.in
@@ -0,0 +1,109 @@
+
+<h1>broker.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">collections</span><span class="o">,</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Endpoint</span><span class="p">,</span> <span class="n">generate_uuid</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Queue</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dynamic</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">dynamic</span> <span class="o">=</span> <span class="n">dynamic</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumer</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">consumer</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumer</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">consumer</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">consumer</span><span class="p">)</span>
+ <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dynamic</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">publish</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">dispatch</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">dispatch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumer</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">consumer</span><span class="p">:</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="p">[</span><span class="n">consumer</span><span class="p">]</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_deliver_to</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> <span class="k">pass</span>
+
+ <span class="k">def</span> <span class="nf">_deliver_to</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumers</span><span class="p">):</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="bp">False</span>
+ <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">consumers</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">credit</span><span class="p">:</span>
+ <span class="n">c</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">())</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="bp">True</span>
+ <span class="k">return</span> <span class="n">result</span>
+ <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="c1"># no more messages</span>
+ <span class="k">return</span> <span class="bp">False</span>
+
+<span class="k">class</span> <span class="nc">Broker</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Broker</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queues</span> <span class="o">=</span> <span class="p">{}</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_queue</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">address</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">Queue</span><span class="p">()</span>
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">address</span><span class="p">]</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opening</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">dynamic</span><span class="p">:</span>
+ <span class="n">address</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">generate_uuid</span><span class="p">())</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+ <span class="n">q</span> <span class="o">=</span> <span class="n">Queue</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">q</span>
+ <span class="n">q</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">)</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">_unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">link</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">link</span><span class="p">):</span>
+ <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span>
+
+ <span class="k">def</span> <span class="nf">on_link_closing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_unsubscribe</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_closing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">remove_stale_consumers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connection</span><span class="p">):</span>
+ <span class="n">l</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">link_head</span><span class="p">(</span><span class="n">Endpoint</span><span class="o">.</span><span class="n">REMOTE_ACTIVE</span><span class="p">)</span>
+ <span class="k">while</span> <span class="n">l</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_unsubscribe</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
+ <span class="n">l</span> <span class="o">=</span> <span class="n">l</span><span class="o">.</span><span class="n">next</span><span class="p">(</span><span class="n">Endpoint</span><span class="o">.</span><span class="n">REMOTE_ACTIVE</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">)</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span><span class="p">)</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address router listens on (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Broker</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="broker.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py
new file mode 100755
index 0000000..86f2c76
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container, DynamicNodeProperties
+
+class Client(MessagingHandler):
+ def __init__(self, url, requests):
+ super(Client, self).__init__()
+ self.url = url
+ self.requests = requests
+
+ def on_start(self, event):
+ self.sender = event.container.create_sender(self.url)
+ self.receiver = event.container.create_receiver(self.sender.connection, None, dynamic=True)
+
+ def next_request(self):
+ if self.receiver.remote_source.address:
+ req = Message(reply_to=self.receiver.remote_source.address, body=self.requests[0])
+ self.sender.send(req)
+
+ def on_link_opened(self, event):
+ if event.receiver == self.receiver:
+ self.next_request()
+
+ def on_message(self, event):
+ print("%s => %s" % (self.requests.pop(0), event.message.body))
+ if self.requests:
+ self.next_request()
+ else:
+ event.connection.close()
+
+REQUESTS= ["Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe."]
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send requests to the supplied address and print responses.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+opts, args = parser.parse_args()
+
+Container(Client(opts.address, args or REQUESTS)).run()
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html.in
new file mode 100644
index 0000000..827ca73
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html.in
@@ -0,0 +1,49 @@
+
+<h1>client.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">DynamicNodeProperties</span>
+
+<span class="k">class</span> <span class="nc">Client</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">requests</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Client</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">requests</span> <span class="o">=</span> <span class="n">requests</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">connection</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">dynamic</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">next_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">req</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">reply_to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">requests</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opened</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">next_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">requests</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">requests</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">next_request</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">REQUESTS</span><span class="o">=</span> <span class="p">[</span><span class="s2">"Twas brillig, and the slithy toves"</span><span class="p">,</span>
+ <span class="s2">"Did gire and gymble in the wabe."</span><span class="p">,</span>
+ <span class="s2">"All mimsy were the borogroves,"</span><span class="p">,</span>
+ <span class="s2">"And the mome raths outgrabe."</span><span class="p">]</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send requests to the supplied address and print responses."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">Client</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">args</span> <span class="ow">or</span> <span class="n">REQUESTS</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="client.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py
new file mode 100755
index 0000000..bf65639
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import tornado.ioloop
+import tornado.web
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton_tornado import Container
+
+class Client(MessagingHandler):
+ def __init__(self, host, address):
+ super(Client, self).__init__()
+ self.host = host
+ self.address = address
+ self.sent = []
+ self.pending = []
+ self.reply_address = None
+ self.sender = None
+ self.receiver = None
+
+ def on_start(self, event):
+ conn = event.container.connect(self.host)
+ self.sender = event.container.create_sender(conn, self.address)
+ self.receiver = event.container.create_receiver(conn, None, dynamic=True)
+
+ def on_link_opened(self, event):
+ if event.receiver == self.receiver:
+ self.reply_address = event.link.remote_source.address
+ self.do_request()
+
+ def on_sendable(self, event):
+ self.do_request()
+
+ def on_message(self, event):
+ if self.sent:
+ request, handler = self.sent.pop(0)
+ print("%s => %s" % (request, event.message.body))
+ handler(event.message.body)
+ self.do_request()
+
+ def do_request(self):
+ if self.pending and self.reply_address and self.sender.credit:
+ request, handler = self.pending.pop(0)
+ self.sent.append((request, handler))
+ req = Message(reply_to=self.reply_address, body=request)
+ self.sender.send(req)
+
+ def request(self, body, handler):
+ self.pending.append((body, handler))
+ self.do_request()
+ self.container.touch()
+
+class ExampleHandler(tornado.web.RequestHandler):
+ def initialize(self, client):
+ self.client = client
+
+ def get(self):
+ self._write_open()
+ self._write_form()
+ self._write_close()
+
+ @tornado.web.asynchronous
+ def post(self):
+ client.request(self.get_body_argument("message"), lambda x: self.on_response(x))
+
+ def on_response(self, body):
+ self.set_header("Content-Type", "text/html")
+ self._write_open()
+ self._write_form()
+ self.write("Response: " + body)
+ self._write_close()
+ self.finish()
+
+ def _write_open(self):
+ self.write('<html><body>')
+
+ def _write_close(self):
+ self.write('</body></html>')
+
+ def _write_form(self):
+ self.write('<form action="/client" method="POST">'
+ 'Request: <input type="text" name="message">'
+ '<input type="submit" value="Submit">'
+ '</form>')
+
+
+loop = tornado.ioloop.IOLoop.instance()
+client = Client("localhost:5672", "examples")
+client.container = Container(client, loop=loop)
+client.container.initialise()
+app = tornado.web.Application([tornado.web.url(r"/client", ExampleHandler, dict(client=client))])
+app.listen(8888)
+try:
+ loop.start()
+except KeyboardInterrupt:
+ loop.stop()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html.in
new file mode 100644
index 0000000..a2dd2ca
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html.in
@@ -0,0 +1,99 @@
+
+<h1>client_http.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">tornado.ioloop</span>
+<span class="kn">import</span> <span class="nn">tornado.web</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Client</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Client</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">dynamic</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opened</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="p">:</span>
+ <span class="n">request</span><span class="p">,</span> <span class="n">handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
+ <span class="n">handler</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">do_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span><span class="p">:</span>
+ <span class="n">request</span><span class="p">,</span> <span class="n">handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">request</span><span class="p">,</span> <span class="n">handler</span><span class="p">))</span>
+ <span class="n">req</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">reply_to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="n">handler</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">body</span><span class="p">,</span> <span class="n">handler</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">touch</span><span class="p">()</span>
+
+<span class="k">class</span> <span class="nc">ExampleHandler</span><span class="p">(</span><span class="n">tornado</span><span class="o">.</span><span class="n">web</span><span class="o">.</span><span class="n">RequestHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
+
+ <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_open</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_form</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_close</span><span class="p">()</span>
+
+ <span class="nd">@tornado.web.asynchronous</span>
+ <span class="k">def</span> <span class="nf">post</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">client</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_body_argument</span><span class="p">(</span><span class="s2">"message"</span><span class="p">),</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_response</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">set_header</span><span class="p">(</span><span class="s2">"Content-Type"</span><span class="p">,</span> <span class="s2">"text/html"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_open</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_form</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"Response: "</span> <span class="o">+</span> <span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">finish</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">_write_open</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'<html><body>'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_write_close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</body></html>'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_write_form</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'<form action="/client" method="POST">'</span>
+ <span class="s1">'Request: <input type="text" name="message">'</span>
+ <span class="s1">'<input type="submit" value="Submit">'</span>
+ <span class="s1">'</form>'</span><span class="p">)</span>
+
+
+<span class="n">loop</span> <span class="o">=</span> <span class="n">tornado</span><span class="o">.</span><span class="n">ioloop</span><span class="o">.</span><span class="n">IOLoop</span><span class="o">.</span><span class="n">instance</span><span class="p">()</span>
+<span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">)</span>
+<span class="n">client</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="n">loop</span><span class="p">)</span>
+<span class="n">client</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">initialise</span><span class="p">()</span>
+<span class="n">app</span> <span class="o">=</span> <span class="n">tornado</span><span class="o">.</span><span class="n">web</span><span class="o">.</span><span class="n">Application</span><span class="p">([</span><span class="n">tornado</span><span class="o">.</span><span class="n">web</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">r"/client"</span><span class="p">,</span> <span class="n">ExampleHandler</span><span class="p">,</span> <span class="nb">dict</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="n">client</span><span class="p">))])</span>
+<span class="n">app</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="mi">8888</span><span class="p">)</span>
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">loop</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
+ <span class="n">loop</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="client_http.py">Download this file</a></p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[22/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html
new file mode 100644
index 0000000..e743fe3
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html
@@ -0,0 +1,361 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>flow_control.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>flow_control.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>flow_control.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/listener.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+<span class="kt">bool</span> <span class="n">verbose</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+
+<span class="kt">void</span> <span class="nf">verify</span><span class="p">(</span><span class="kt">bool</span> <span class="n">success</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">msg</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">success</span><span class="p">)</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"example failure:"</span> <span class="o">+</span> <span class="n">msg</span><span class="p">);</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"success: "</span> <span class="o"><<</span> <span class="n">msg</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="p">}</span>
+
+<span class="c1">// flow_sender manages the incoming connection and acts as the message sender.</span>
+<span class="k">class</span> <span class="nc">flow_sender</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="kt">int</span> <span class="n">available</span><span class="p">;</span> <span class="c1">// Number of messages the sender may send assuming sufficient credit.</span>
+ <span class="kt">int</span> <span class="n">sequence</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">flow_sender</span><span class="p">()</span> <span class="o">:</span> <span class="n">available</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">sequence</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_sender in </span><span class="se">\"</span><span class="s">on_sendable</span><span class="se">\"</span><span class="s"> with credit "</span> <span class="o"><<</span> <span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="s">" and "</span> <span class="o"><<</span> <span class="n">available</span> <span class="o"><<</span> <span class="s">" available messages"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">sequence</span><span class="p">;</span> <span class="n">available</span> <span class="o">&&</span> <span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">mbody</span><span class="p">;</span>
+ <span class="n">mbody</span> <span class="o"><<</span> <span class="s">"flow_sender message "</span> <span class="o"><<</span> <span class="n">sequence</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">(</span><span class="n">mbody</span><span class="p">.</span><span class="n">str</span><span class="p">());</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">available</span><span class="o">--</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_drain_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_sender in </span><span class="se">\"</span><span class="s">on_drain_start</span><span class="se">\"</span><span class="s"> with credit "</span> <span class="o"><<</span> <span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="s">" making an internal call to </span><span class="se">\"</span><span class="s">on_sendble</span><span class="se">\"</span><span class="s">"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">on_sendable</span><span class="p">(</span><span class="n">s</span><span class="p">);</span> <span class="c1">// send as many as we can</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">return_credit</span><span class="p">();</span> <span class="c1">// return the rest</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">set_available</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> <span class="n">available</span> <span class="o">=</span> <span class="n">n</span><span class="p">;</span> <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="k">class</span> <span class="nc">flow_receiver</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="kt">int</span> <span class="n">stage</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">received</span><span class="p">;</span>
+ <span class="n">flow_sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">;</span>
+
+ <span class="n">flow_receiver</span><span class="p">(</span><span class="n">flow_sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="o">:</span> <span class="n">stage</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">sender</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">example_setup</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">received</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">set_available</span><span class="p">(</span><span class="n">n</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">run_stage</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">caller</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Serialize the progression of the flow control examples.</span>
+ <span class="k">switch</span> <span class="p">(</span><span class="n">stage</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">case</span> <span class="mi">0</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 1. Simple use of credit."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="c1">// TODO: add timeout callbacks, show no messages until credit.</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="mi">1</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
+ <span class="n">verify</span><span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="mi">2</span><span class="p">,</span> <span class="s">"Example 1: simple credit"</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 2. Use basic drain, sender has 3 </span><span class="se">\"</span><span class="s">immediate</span><span class="se">\"</span><span class="s"> messages."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span> <span class="c1">// ask for up to 5</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">drain</span><span class="p">();</span> <span class="c1">// but only use what's available</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="mi">2</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">caller</span> <span class="o">==</span> <span class="s">"on_message"</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">caller</span> <span class="o">==</span> <span class="s">"on_receiver_drain_finish"</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Note that unused credit of 2 at sender is returned and is now 0.</span>
+ <span class="n">verify</span><span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="mi">3</span> <span class="o">&&</span> <span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"Example 2: basic drain"</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 3. Drain use with no credit."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">drain</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="n">verify</span><span class="p">(</span><span class="nb">false</span><span class="p">,</span> <span class="s">"example 2 run_stage"</span><span class="p">);</span>
+ <span class="k">return</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="mi">3</span><span class="o">:</span>
+ <span class="n">verify</span><span class="p">(</span><span class="n">caller</span> <span class="o">==</span> <span class="s">"on_receiver_drain_finish"</span> <span class="o">&&</span> <span class="n">received</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"Example 3: drain without credit"</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 4. Show using high(10)/low(3) watermark for 25 messages."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">25</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="mi">4</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">received</span> <span class="o"><</span> <span class="mi">25</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Top up credit as needed.</span>
+ <span class="kt">uint32_t</span> <span class="n">credit</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">credit</span> <span class="o"><=</span> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>
+ <span class="kt">uint32_t</span> <span class="n">new_credit</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+ <span class="kt">uint32_t</span> <span class="n">remaining</span> <span class="o">=</span> <span class="mi">25</span> <span class="o">-</span> <span class="n">received</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">new_credit</span> <span class="o">></span> <span class="n">remaining</span><span class="p">)</span>
+ <span class="n">new_credit</span> <span class="o">=</span> <span class="n">remaining</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">new_credit</span> <span class="o">></span> <span class="n">credit</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="n">new_credit</span> <span class="o">-</span> <span class="n">credit</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_receiver adding credit for "</span> <span class="o"><<</span> <span class="n">new_credit</span> <span class="o">-</span> <span class="n">credit</span>
+ <span class="o"><<</span> <span class="s">" messages"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="k">return</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">verify</span><span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="mi">25</span> <span class="o">&&</span> <span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"Exmaple 4: high/low watermark"</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">default</span><span class="o">:</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"run_stage sequencing error"</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">stage</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">r</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">run_stage</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="s">"on_receiver_open"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_receiver in </span><span class="se">\"</span><span class="s">on_message</span><span class="se">\"</span><span class="s"> with "</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="n">r</span><span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">());</span>
+ <span class="n">received</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">run_stage</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="s">"on_message"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_drain_finish</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">r</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_receiver in </span><span class="se">\"</span><span class="s">on_receiver_drain_finish</span><span class="se">\"</span><span class="s">"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">run_stage</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="s">"on_receiver_drain_finish"</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">flow_control</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+ <span class="n">flow_sender</span> <span class="n">send_handler</span><span class="p">;</span>
+ <span class="n">flow_receiver</span> <span class="n">receive_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">flow_control</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">receive_handler</span><span class="p">(</span><span class="n">send_handler</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">().</span><span class="n">handler</span><span class="p">(</span><span class="n">send_handler</span><span class="p">));</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="p">.</span><span class="n">active</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// outbound connection</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="s">"flow_example"</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">handler</span><span class="p">(</span><span class="n">receive_handler</span><span class="p">).</span><span class="n">credit_window</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">quiet_arg</span><span class="p">(</span><span class="s">"-quiet"</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">></span> <span class="mi">2</span> <span class="o">&&</span> <span class="n">quiet_arg</span> <span class="o">==</span> <span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+ <span class="n">verbose</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to</span>
+ <span class="c1">// ourselves, not a broker.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:8888/examples"</span><span class="p">;</span>
+
+ <span class="n">flow_control</span> <span class="n">fc</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">fc</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="flow_control.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp
new file mode 100755
index 0000000..fa95af0
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+class hello_world : public proton::messaging_handler {
+ private:
+ proton::url url;
+
+ public:
+ hello_world(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container& c) OVERRIDE {
+ c.connect(url);
+ }
+
+ void on_connection_open(proton::connection& c) OVERRIDE {
+ c.open_receiver(url.path());
+ c.open_sender(url.path());
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ d.connection().close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+
+ hello_world hw(url);
+ proton::default_container(hw).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html
new file mode 100644
index 0000000..add6182
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>helloworld.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">hello_world</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span><span class="o">&</span> <span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span><span class="o">&</span> <span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">());</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">());</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+
+ <span class="n">hello_world</span> <span class="n">hw</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hw</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="helloworld.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp
new file mode 100755
index 0000000..5421e62
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp
@@ -0,0 +1,79 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sender.hpp>
+#include <proton/tracker.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+class hello_world_direct : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+
+ public:
+ hello_world_direct(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url);
+ c.open_sender(url);
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ t.connection().close();
+ }
+
+ void on_connection_close(proton::connection&) OVERRIDE {
+ listener.stop();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ // Pick an "unusual" port since we are going to be talking to
+ // ourselves, not a broker.
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:8888/examples";
+
+ hello_world_direct hwd(url);
+ proton::default_container(hwd).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html
new file mode 100644
index 0000000..5995d34
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld_direct.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>helloworld_direct.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld_direct.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">hello_world_direct</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world_direct</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span><span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to</span>
+ <span class="c1">// ourselves, not a broker.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:8888/examples"</span><span class="p">;</span>
+
+ <span class="n">hello_world_direct</span> <span class="n">hwd</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hwd</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="helloworld_direct.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html
new file mode 100644
index 0000000..e50d32d
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>Proton C++ Examples - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li>Proton C++ Examples</li></ul>
+
+ <div id="-middle-content">
+ <h1 id="proton-c-examples">Proton C++ Examples</h1>
+
+<h2 id="example-files">Example files</h2>
+
+<ul>
+<li><a href="broker.cpp.html">broker.cpp</a></li>
+<li><a href="broker.hpp.html">broker.hpp</a></li>
+<li><a href="client.cpp.html">client.cpp</a></li>
+<li><a href="connection_options.cpp.html">connection_options.cpp</a></li>
+<li><a href="direct_recv.cpp.html">direct_recv.cpp</a></li>
+<li><a href="direct_send.cpp.html">direct_send.cpp</a></li>
+<li><a href="encode_decode.cpp.html">encode_decode.cpp</a></li>
+<li><a href="fake_cpp11.hpp.html">fake_cpp11.hpp</a></li>
+<li><a href="flow_control.cpp.html">flow_control.cpp</a></li>
+<li><a href="helloworld.cpp.html">helloworld.cpp</a></li>
+<li><a href="helloworld_direct.cpp.html">helloworld_direct.cpp</a></li>
+<li><a href="options.hpp.html">options.hpp</a></li>
+<li><a href="queue_browser.cpp.html">queue_browser.cpp</a></li>
+<li><a href="selected_recv.cpp.html">selected_recv.cpp</a></li>
+<li><a href="server.cpp.html">server.cpp</a></li>
+<li><a href="server_direct.cpp.html">server_direct.cpp</a></li>
+<li><a href="simple_recv.cpp.html">simple_recv.cpp</a></li>
+<li><a href="simple_send.cpp.html">simple_send.cpp</a></li>
+<li><a href="ssl.cpp.html">ssl.cpp</a></li>
+<li><a href="ssl_client_cert.cpp.html">ssl_client_cert.cpp</a></li>
+</ul>
+
+<h2 id="more-information">More information</h2>
+
+<ul>
+<li><a href="https://github.com/apache/qpid-proton/tree/0.13.0/examples/cpp/README.hpp">README</a></li>
+<li><a href="https://github.com/apache/qpid-proton/tree/0.13.0/examples/cpp">Source location</a></li>
+</ul>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp
new file mode 100755
index 0000000..dab1bc2
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp
@@ -0,0 +1,175 @@
+#ifndef OPTIONS_HPP
+#define OPTIONS_HPP
+/*
+ * 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.
+ */
+
+#include <string>
+#include <sstream>
+#include <ostream>
+#include <vector>
+#include <stdexcept>
+
+namespace example {
+/** bad_option is thrown for option parsing errors */
+struct bad_option : public std::runtime_error {
+ bad_option(const std::string& s) : std::runtime_error(s) {}
+};
+
+/** Simple command-line option parser for example programs */
+class options {
+ public:
+
+ options(int argc, char const * const * argv) : argc_(argc), argv_(argv), prog_(argv[0]), help_() {
+ size_t slash = prog_.find_last_of("/\\");
+ if (slash != std::string::npos)
+ prog_ = prog_.substr(slash+1); // Extract prog name from path
+ add_flag(help_, 'h', "help", "Print the help message");
+ }
+
+ ~options() {
+ for (opts::iterator i = opts_.begin(); i != opts_.end(); ++i)
+ delete *i;
+ }
+
+ /** Updates value when parse() is called if option is present with a value. */
+ template<class T>
+ void add_value(T& value, char short_name, const std::string& long_name, const std::string& description, const std::string var) {
+ opts_.push_back(new option_value<T>(value, short_name, long_name, description, var));
+ }
+
+ /** Sets flag when parse() is called if option is present. */
+ void add_flag(bool& flag, char short_name, const std::string& long_name, const std::string& description) {
+ opts_.push_back(new option_flag(flag, short_name, long_name, description));
+ }
+
+ /** Parse the command line, return the index of the first non-option argument.
+ *@throws bad_option if there is a parsing error or unknown option.
+ */
+ int parse() {
+ int arg = 1;
+ for (; arg < argc_ && argv_[arg][0] == '-'; ++arg) {
+ opts::iterator i = opts_.begin();
+ while (i != opts_.end() && !(*i)->parse(argc_, argv_, arg))
+ ++i;
+ if (i == opts_.end())
+ throw bad_option(std::string("unknown option ") + argv_[arg]);
+ }
+ if (help_) throw bad_option("");
+ return arg;
+ }
+
+ /** Print a usage message */
+ friend std::ostream& operator<<(std::ostream& os, const options& op) {
+ os << std::endl << "usage: " << op.prog_ << " [options]" << std::endl;
+ os << std::endl << "options:" << std::endl;
+ for (opts::const_iterator i = op.opts_.begin(); i < op.opts_.end(); ++i)
+ os << **i << std::endl;
+ return os;
+ }
+
+ private:
+ class option {
+ public:
+ option(char s, const std::string& l, const std::string& d, const std::string v) :
+ short_(std::string("-") + s), long_("--" + l), desc_(d), var_(v) {}
+ virtual ~option() {}
+
+ virtual bool parse(int argc, char const * const * argv, int &i) = 0;
+ virtual void print_default(std::ostream&) const {}
+
+ friend std::ostream& operator<<(std::ostream& os, const option& op) {
+ os << " " << op.short_;
+ if (!op.var_.empty()) os << " " << op.var_;
+ os << ", " << op.long_;
+ if (!op.var_.empty()) os << "=" << op.var_;
+ os << std::endl << " " << op.desc_;
+ op.print_default(os);
+ return os;
+ }
+
+ protected:
+ std::string short_, long_, desc_, var_;
+ };
+
+ template <class T>
+ class option_value : public option {
+ public:
+ option_value(T& value, char s, const std::string& l, const std::string& d, const std::string& v) :
+ option(s, l, d, v), value_(value) {}
+
+ bool parse(int argc, char const * const * argv, int &i) {
+ std::string arg(argv[i]);
+ if (arg == short_ || arg == long_) {
+ if (i < argc-1) {
+ set_value(arg, argv[++i]);
+ return true;
+ } else {
+ throw bad_option("missing value for " + arg);
+ }
+ }
+ if (arg.compare(0, long_.size(), long_) == 0 && arg[long_.size()] == '=' ) {
+ set_value(long_, arg.substr(long_.size()+1));
+ return true;
+ }
+ return false;
+ }
+
+ virtual void print_default(std::ostream& os) const { os << " (default " << value_ << ")"; }
+
+ void set_value(const std::string& opt, const std::string& s) {
+ std::istringstream is(s);
+ is >> value_;
+ if (is.fail() || is.bad())
+ throw bad_option("bad value for " + opt + ": " + s);
+ }
+
+ private:
+ T& value_;
+ };
+
+ class option_flag: public option {
+ public:
+ option_flag(bool& flag, const char s, const std::string& l, const std::string& d) :
+ option(s, l, d, ""), flag_(flag)
+ { flag_ = false; }
+
+ bool parse(int /*argc*/, char const * const * argv, int &i) {
+ if (argv[i] == short_ || argv[i] == long_) {
+ flag_ = true;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private:
+ bool &flag_;
+ };
+
+ typedef std::vector<option*> opts;
+
+ int argc_;
+ char const * const * argv_;
+ std::string prog_;
+ opts opts_;
+ bool help_;
+};
+}
+
+#endif // OPTIONS_HPP
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[12/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html
new file mode 100644
index 0000000..ec2527d
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py.html
@@ -0,0 +1,281 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>test_examples.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>test_examples.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>test_examples.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">subprocess</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">import</span> <span class="nn">unittest</span>
+
+<span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+ <span class="n">_unicode_prefix</span> <span class="o">=</span> <span class="s1">'u'</span>
+<span class="k">else</span><span class="p">:</span>
+ <span class="n">_unicode_prefix</span> <span class="o">=</span> <span class="s1">''</span>
+
+
+<span class="k">class</span> <span class="nc">ExamplesTest</span><span class="p">(</span><span class="n">unittest</span><span class="o">.</span><span class="n">TestCase</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">test_helloworld</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">example</span><span class="o">=</span><span class="s2">"helloworld.py"</span><span class="p">):</span>
+ <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">example</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">p</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">output</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">p</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="p">[</span><span class="s1">'Hello World!'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_direct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_direct.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_blocking</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_blocking.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_tornado</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_tornado.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_helloworld_direct_tornado</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_helloworld</span><span class="p">(</span><span class="s1">'helloworld_direct_tornado.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_simple_send_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">recv</span><span class="o">=</span><span class="s1">'simple_recv.py'</span><span class="p">,</span> <span class="n">send</span><span class="o">=</span><span class="s1">'simple_send.py'</span><span class="p">):</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">recv</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="n">send</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{</span><span class="si">%s</span><span class="s2">'sequence': </span><span class="si">%i</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_client_server</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'client.py'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server.py'</span><span class="p">],</span> <span class="n">sleep</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">sleep</span><span class="p">:</span>
+ <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="n">sleep</span><span class="p">)</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">c</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">c</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Twas brillig, and the slithy toves"</span><span class="p">,</span>
+ <span class="s2">"Did gire and gymble in the wabe."</span><span class="p">,</span>
+ <span class="s2">"All mimsy were the borogroves,"</span><span class="p">,</span>
+ <span class="s2">"And the mome raths outgrabe."</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="n">l</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_sync_client_server</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'sync_client.py'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_client_server_tx</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_tx.py'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_sync_client_server_tx</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'sync_client.py'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_tx.py'</span><span class="p">])</span>
+
+ <span class="k">def</span> <span class="nf">test_client_server_direct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'client.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888/examples'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_direct.py'</span><span class="p">],</span> <span class="n">sleep</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_sync_client_server_direct</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_client_server</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="p">[</span><span class="s1">'sync_client.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888/examples'</span><span class="p">],</span> <span class="n">server</span><span class="o">=</span><span class="p">[</span><span class="s1">'server_direct.py'</span><span class="p">],</span> <span class="n">sleep</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_db_send_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">maxDiff</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="c1"># setup databases</span>
+ <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'init'</span><span class="p">,</span> <span class="s1">'./src_db'</span><span class="p">])</span>
+ <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'init'</span><span class="p">,</span> <span class="s1">'./dst_db'</span><span class="p">])</span>
+ <span class="n">fill</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'insert'</span><span class="p">,</span> <span class="s1">'./src_db'</span><span class="p">],</span>
+ <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">):</span>
+ <span class="n">fill</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"Message-</span><span class="si">%i</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span>
+ <span class="n">fill</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">fill</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="c1"># run send and recv</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_recv.py'</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'100'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_send.py'</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'100'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="c1"># verify output of receive</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"inserted message </span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+ <span class="c1"># verify state of databases</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'db_ctrl.py'</span><span class="p">,</span> <span class="s1">'list'</span><span class="p">,</span> <span class="s1">'./dst_db'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">v</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"(</span><span class="si">%i</span><span class="s2">, </span><span class="si">%s</span><span class="s2">'Message-</span><span class="si">%i</span><span class="s2">')"</span> <span class="o">%</span> <span class="p">((</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">v</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_tx_send_tx_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">test_simple_send_recv</span><span class="p">(</span><span class="n">recv</span><span class="o">=</span><span class="s1">'tx_recv.py'</span><span class="p">,</span> <span class="n">send</span><span class="o">=</span><span class="s1">'tx_send.py'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_simple_send_direct_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">maxDiff</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'direct_recv.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'simple_send.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{</span><span class="si">%s</span><span class="s2">'sequence': </span><span class="si">%i</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">test_direct_send_simple_recv</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'direct_send.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span>
+ <span class="n">r</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">'simple_recv.py'</span><span class="p">,</span> <span class="s1">'-a'</span><span class="p">,</span> <span class="s1">'localhost:8888'</span><span class="p">],</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
+ <span class="n">universal_newlines</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="n">r</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">s</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span>
+ <span class="n">actual</span> <span class="o">=</span> <span class="p">[</span><span class="n">l</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">r</span><span class="o">.</span><span class="n">stdout</span><span class="p">]</span>
+ <span class="n">expected</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"{</span><span class="si">%s</span><span class="s2">'sequence': </span><span class="si">%i</span><span class="s2">}"</span> <span class="o">%</span> <span class="p">(</span><span class="n">_unicode_prefix</span><span class="p">,</span> <span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">100</span><span class="p">)]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">actual</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
+</pre></div>
+
+<p><a href="test_examples.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py
new file mode 100755
index 0000000..4baddcf
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton import Url
+from proton.reactor import Container
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRecv(MessagingHandler, TransactionHandler):
+ def __init__(self, url, messages, batch_size):
+ super(TxRecv, self).__init__(prefetch=0, auto_accept=False)
+ self.url = Url(url)
+ self.expected = messages
+ self.batch_size = batch_size
+ self.current_batch = 0
+ self.committed = 0
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = self.container.connect(self.url)
+ self.receiver = self.container.create_receiver(self.conn, self.url.path)
+ self.container.declare_transaction(self.conn, handler=self)
+ self.transaction = None
+
+ def on_message(self, event):
+ print(event.message.body)
+ self.transaction.accept(event.delivery)
+ self.current_batch += 1
+ if self.current_batch == self.batch_size:
+ self.transaction.commit()
+ self.transaction = None
+
+ def on_transaction_declared(self, event):
+ self.receiver.flow(self.batch_size)
+ self.transaction = event.transaction
+
+ def on_transaction_committed(self, event):
+ self.committed += self.current_batch
+ self.current_batch = 0
+ if self.expected == 0 or self.committed < self.expected:
+ self.container.declare_transaction(self.conn, handler=self)
+ else:
+ event.connection.close()
+
+ def on_disconnected(self, event):
+ self.current_batch = 0
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+parser.add_option("-b", "--batch-size", type="int", default=10,
+ help="number of messages in each transaction (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(TxRecv(opts.address, opts.messages, opts.batch_size)).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html
new file mode 100644
index 0000000..fd8b678
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv.py.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>tx_recv.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>tx_recv.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>tx_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Url</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxRecv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">prefetch</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">messages</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span> <span class="o">=</span> <span class="n">batch_size</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">flow</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">transaction</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-b"</span><span class="p">,</span> <span class="s2">"--batch-size"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages in each transaction (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">batch_size</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="tx_recv.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py
new file mode 100755
index 0000000..c38f651
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import sys
+import threading
+from proton.reactor import ApplicationEvent, Container, EventInjector
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRecv(MessagingHandler, TransactionHandler):
+ def __init__(self):
+ super(TxRecv, self).__init__(prefetch=0, auto_accept=False)
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = self.container.connect("localhost:5672")
+ self.receiver = self.container.create_receiver(self.conn, "examples")
+ self.container.declare_transaction(self.conn, handler=self, settle_before_discharge=True)
+ self.transaction = None
+
+ def on_message(self, event):
+ print(event.message.body)
+ self.transaction.accept(event.delivery)
+
+ def on_transaction_declared(self, event):
+ self.transaction = event.transaction
+ print("transaction declared")
+
+ def on_transaction_committed(self, event):
+ print("transaction committed")
+ self.container.declare_transaction(self.conn, handler=self)
+
+ def on_transaction_aborted(self, event):
+ print("transaction aborted")
+ self.container.declare_transaction(self.conn, handler=self)
+
+ def on_commit(self, event):
+ self.transaction.commit()
+
+ def on_abort(self, event):
+ self.transaction.abort()
+
+ def on_fetch(self, event):
+ self.receiver.flow(1)
+
+ def on_quit(self, event):
+ c = self.receiver.connection
+ self.receiver.close()
+ c.close()
+
+try:
+ reactor = Container(TxRecv())
+ events = EventInjector()
+ reactor.selectable(events)
+ thread = threading.Thread(target=reactor.run)
+ thread.daemon=True
+ thread.start()
+
+ print("Enter 'fetch', 'commit' or 'abort'")
+ while True:
+ line = sys.stdin.readline()
+ if line:
+ events.trigger(ApplicationEvent(line.strip()))
+ else:
+ break
+except KeyboardInterrupt: pass
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html
new file mode 100644
index 0000000..bd8888f
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_recv_interactive.py.html
@@ -0,0 +1,212 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>tx_recv_interactive.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>tx_recv_interactive.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>tx_recv_interactive.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">ApplicationEvent</span><span class="p">,</span> <span class="n">Container</span><span class="p">,</span> <span class="n">EventInjector</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxRecv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">prefetch</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">settle_before_discharge</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">transaction</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"transaction declared"</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"transaction committed"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_aborted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"transaction aborted"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_commit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_abort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">abort</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_fetch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">flow</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_quit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">connection</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">c</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">reactor</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">TxRecv</span><span class="p">())</span>
+ <span class="n">events</span> <span class="o">=</span> <span class="n">EventInjector</span><span class="p">()</span>
+ <span class="n">reactor</span><span class="o">.</span><span class="n">selectable</span><span class="p">(</span><span class="n">events</span><span class="p">)</span>
+ <span class="n">thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">reactor</span><span class="o">.</span><span class="n">run</span><span class="p">)</span>
+ <span class="n">thread</span><span class="o">.</span><span class="n">daemon</span><span class="o">=</span><span class="bp">True</span>
+ <span class="n">thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Enter 'fetch', 'commit' or 'abort'"</span><span class="p">)</span>
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="n">line</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">line</span><span class="p">:</span>
+ <span class="n">events</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">ApplicationEvent</span><span class="p">(</span><span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">break</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="tx_recv_interactive.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py
new file mode 100755
index 0000000..bda6780
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message, Url
+from proton.reactor import Container
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxSend(MessagingHandler, TransactionHandler):
+ def __init__(self, url, messages, batch_size):
+ super(TxSend, self).__init__()
+ self.url = Url(url)
+ self.current_batch = 0
+ self.committed = 0
+ self.confirmed = 0
+ self.total = messages
+ self.batch_size = batch_size
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = self.container.connect(self.url)
+ self.sender = self.container.create_sender(self.conn, self.url.path)
+ self.container.declare_transaction(self.conn, handler=self)
+ self.transaction = None
+
+ def on_transaction_declared(self, event):
+ self.transaction = event.transaction
+ self.send()
+
+ def on_sendable(self, event):
+ self.send()
+
+ def send(self):
+ while self.transaction and self.sender.credit and (self.committed + self.current_batch) < self.total:
+ seq = self.committed + self.current_batch + 1
+ msg = Message(id=seq, body={'sequence':seq})
+ self.transaction.send(self.sender, msg)
+ self.current_batch += 1
+ if self.current_batch == self.batch_size:
+ self.transaction.commit()
+ self.transaction = None
+
+ def on_accepted(self, event):
+ if event.sender == self.sender:
+ self.confirmed += 1
+
+ def on_transaction_committed(self, event):
+ self.committed += self.current_batch
+ if self.committed == self.total:
+ print("all messages committed")
+ event.connection.close()
+ else:
+ self.current_batch = 0
+ self.container.declare_transaction(self.conn, handler=self)
+
+ def on_disconnected(self, event):
+ self.current_batch = 0
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages transactionally to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to send (default %default)")
+parser.add_option("-b", "--batch-size", type="int", default=10,
+ help="number of messages in each transaction (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(TxSend(opts.address, opts.messages, opts.batch_size)).run()
+except KeyboardInterrupt: pass
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[24/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html
new file mode 100644
index 0000000..54ac41e
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>direct_recv.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>direct_recv.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>direct_recv.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/link.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">direct_recv</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">expected</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">received</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">direct_recv</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">expected</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">received</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"direct_recv listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">msg</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">coerce</span><span class="o"><</span><span class="kt">uint64_t</span><span class="o">></span><span class="p">(</span><span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">())</span> <span class="o"><</span> <span class="n">received</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span><span class="p">;</span> <span class="c1">// Ignore duplicate</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">received</span> <span class="o"><</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">received</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen and receive on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"receive COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">direct_recv</span> <span class="n">recv</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">recv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="direct_recv.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp
new file mode 100755
index 0000000..d8427b7
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp
@@ -0,0 +1,101 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/value.hpp>
+#include <proton/tracker.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class simple_send : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+ int sent;
+ int confirmed;
+ int total;
+
+ public:
+ simple_send(const std::string &s, int c) : url(s), sent(0), confirmed(0), total(c) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url);
+ std::cout << "direct_send listening on " << url << std::endl;
+ }
+
+ void on_sendable(proton::sender &sender) OVERRIDE {
+ while (sender.credit() && sent < total) {
+ proton::message msg;
+ std::map<std::string, int> m;
+ m["sequence"] = sent + 1;
+
+ msg.id(sent + 1);
+ msg.body(m);
+
+ sender.send(msg);
+ sent++;
+ }
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ confirmed++;
+
+ if (confirmed == total) {
+ std::cout << "all messages confirmed" << std::endl;
+ t.connection().close();
+ listener.stop();
+ }
+ }
+
+ void on_transport_close(proton::transport &) OVERRIDE {
+ sent = confirmed;
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen and send on URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "send COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ simple_send send(address, message_count);
+ proton::default_container(send).run();
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html
new file mode 100644
index 0000000..3ab5d0c
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>direct_send.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>direct_send.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>direct_send.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">simple_send</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">sent</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">total</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">simple_send</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">sent</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">confirmed</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">total</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"direct_send listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">&&</span> <span class="n">sent</span> <span class="o"><</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">msg</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"sequence"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
+
+ <span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">(</span><span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+ <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+
+ <span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">);</span>
+ <span class="n">sent</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">confirmed</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">confirmed</span> <span class="o">==</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"all messages confirmed"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sent</span> <span class="o">=</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen and send on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"send COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">simple_send</span> <span class="n">send</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">send</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="direct_send.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp
new file mode 100755
index 0000000..17971d9
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp
@@ -0,0 +1,252 @@
+/*
+ * 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.
+ */
+
+#include <proton/types.hpp>
+#include <proton/codec/encoder.hpp>
+#include <proton/codec/decoder.hpp>
+
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <sstream>
+
+// Examples of how to use the encoder and decoder to create and examine AMQP values.
+//
+
+// Print is defined at the end as an example of how to query and extract complex
+// values from a decoder in terms of their simple components.
+void print(proton::value&);
+
+// Some helper templates to print map and std::vector results.
+namespace std {
+template<class T, class U> ostream& operator<<(ostream& o, const std::pair<T,U>& p) {
+ return o << p.first << ":" << p.second;
+}
+template<class T> ostream& operator<<(ostream& o, const std::vector<T>& v) {
+ o << "[ ";
+ ostream_iterator<T> oi(o, " ");
+ copy(v.begin(), v.end(), oi);
+ return o << "]";
+}
+template<class T> ostream& operator<<(ostream& o, const std::list<T>& v) {
+ o << "[ ";
+ ostream_iterator<T> oi(o, " ");
+ copy(v.begin(), v.end(), oi);
+ return o << "]";
+}
+template<class K, class T> ostream& operator<<(ostream& o, const map<K, T>& m) {
+ o << "{ ";
+ ostream_iterator<std::pair<K,T> > oi(o, " ");
+ copy(m.begin(), m.end(), oi);
+ return o << "}";
+}
+}
+
+// Insert/extract native C++ containers with uniform type values.
+static void uniform_containers() {
+ std::cout << std::endl << "== Array, list and map of uniform type." << std::endl;
+ proton::value v;
+
+ std::vector<int> a;
+ a.push_back(1);
+ a.push_back(2);
+ a.push_back(3);
+ // By default a C++ container is encoded as an AMQP array.
+ v = a;
+ print(v);
+ std::list<int> a1;
+ proton::get(v, a1);
+ std::cout << a1 << std::endl;
+
+ // You can specify that a container should be encoded as an AMQP list instead.
+ v = proton::codec::encoder::list(a1);
+ print(v);
+ std::cout << proton::get<std::vector<int> >(v) << std::endl;
+
+ // C++ map types (types with key_type, mapped_type) convert to an AMQP map by default.
+ std::map<std::string, int> m;
+ m["one"] = 1;
+ m["two"] = 2;
+ v = m;
+ print(v);
+ std::cout << proton::get<std::map<std::string, int> >(v) << std::endl;
+
+ // A sequence of pairs encodes as an AMQP MAP, which lets you control the encoded order.
+ std::vector<std::pair<std::string, int> > pairs;
+ pairs.push_back(std::make_pair("z", 3));
+ pairs.push_back(std::make_pair("a", 4));
+ v = pairs;
+ print(v);
+
+ // You can also decode an AMQP map as a sequence of pairs to preserve encode order.
+ std::vector<std::pair<std::string, int> > pairs2;
+ proton::codec::decoder d(v);
+ d >> pairs2;
+ std::cout << pairs2 << std::endl;
+
+ // A vector of proton::value is normally encoded as a mixed-type AMQP LIST,
+ // but you can encoded it as an array provided all the values match the array type.
+ std::vector<proton::value> vv;
+ vv.push_back(proton::value("a"));
+ vv.push_back(proton::value("b"));
+ vv.push_back(proton::value("c"));
+ v = vv;
+ print(v);
+}
+
+// Containers with mixed types use value to represent arbitrary AMQP types.
+static void mixed_containers() {
+ std::cout << std::endl << "== List and map of mixed type values." << std::endl;
+ proton::value v;
+
+ std::vector<proton::value> l;
+ l.push_back(proton::value(42));
+ l.push_back(proton::value(std::string("foo")));
+ // By default, a sequence of proton::value is treated as an AMQP list.
+ v = l;
+ print(v);
+ std::vector<proton::value> l2 = proton::get<std::vector<proton::value> >(v);
+ std::cout << l2 << std::endl;
+
+ std::map<proton::value, proton::value> m;
+ m[proton::value("five")] = proton::value(5);
+ m[proton::value(4)] = proton::value("four"); v = m;
+ print(v);
+ typedef std::map<proton::value, proton::value> value_map;
+ value_map m2(proton::get<value_map>(v));
+ std::cout << m2 << std::endl;
+}
+
+// Insert using stream operators (see print_next for example of extracting with stream ops.)
+static void insert_stream_operators() {
+ std::cout << std::endl << "== Insert with stream operators." << std::endl;
+ proton::value v;
+
+ // Create an array of INT with values [1, 2, 3]
+ proton::codec::encoder e(v);
+ e << proton::codec::start::array(proton::INT)
+ << int32_t(1) << int32_t(2) << int32_t(3)
+ << proton::codec::finish();
+ print(v);
+
+ // Create a mixed-type list of the values [42, false, "x"].
+ proton::codec::encoder e2(v);
+ e2 << proton::codec::start::list()
+ << int32_t(42) << false << proton::symbol("x")
+ << proton::codec::finish();
+ print(v);
+
+ // Create a map { "k1":42, "k2": false }
+ proton::codec::encoder e3(v);
+ e3 << proton::codec::start::map()
+ << "k1" << int32_t(42)
+ << proton::symbol("k2") << false
+ << proton::codec::finish();
+ print(v);
+}
+
+int main(int, char**) {
+ try {
+ uniform_containers();
+ mixed_containers();
+ insert_stream_operators();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << std::endl << "error: " << e.what() << std::endl;
+ }
+ return 1;
+}
+
+// print_next prints the next value from values by recursively descending into complex values.
+//
+// NOTE this is for example puroses only: There is a built in ostream operator<< for values.
+//
+//
+static void print_next(proton::codec::decoder& d) {
+ proton::type_id type = d.next_type();
+ proton::codec::start s;
+ switch (type) {
+ case proton::ARRAY: {
+ d >> s;
+ std::cout << "array<" << s.element;
+ if (s.is_described) {
+ std::cout << ", descriptor=";
+ print_next(d);
+ }
+ std::cout << ">[";
+ for (size_t i = 0; i < s.size; ++i) {
+ if (i) std::cout << ", ";
+ print_next(d);
+ }
+ std::cout << "]";
+ d >> proton::codec::finish();
+ break;
+ }
+ case proton::LIST: {
+ d >> s;
+ std::cout << "list[";
+ for (size_t i = 0; i < s.size; ++i) {
+ if (i) std::cout << ", ";
+ print_next(d);
+ }
+ std::cout << "]";
+ d >> proton::codec::finish();
+ break;
+ }
+ case proton::MAP: {
+ d >> s;
+ std::cout << "map{";
+ for (size_t i = 0; i < s.size/2; ++i) {
+ if (i) std::cout << ", ";
+ print_next(d);
+ std::cout << ":"; // key:value
+ print_next(d);
+ }
+ std::cout << "}";
+ d >> proton::codec::finish();
+ break;
+ }
+ case proton::DESCRIBED: {
+ d >> s;
+ std::cout << "described(";
+ print_next(d); // Descriptor
+ print_next(d); // value
+ d >> proton::codec::finish();
+ break;
+ }
+ default:
+ // A simple type. We could continue the switch for all AMQP types but
+ // we will take a short cut and extract to another value and print that.
+ proton::value v2;
+ d >> v2;
+ std::cout << type << "(" << v2 << ")";
+ }
+}
+
+// Print a value, for example purposes. Normal code can use operator<<
+void print(proton::value& v) {
+ proton::codec::decoder d(v);
+ d.rewind();
+ std::cout << std::boolalpha; // Print boolean as true/false.
+ while (d.more()) {
+ print_next(d);
+ if (d.more()) std::cout << ", ";
+ }
+ std::cout << std::endl;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[18/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html
new file mode 100644
index 0000000..4c4f433
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>abstract_server.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>abstract_server.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>abstract_server.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton_server</span> <span class="kn">import</span> <span class="n">Server</span>
+
+<span class="k">class</span> <span class="nc">Application</span><span class="p">(</span><span class="n">Server</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Application</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">):</span>
+ <span class="n">response</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">)</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Request from: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">reply_to</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Application</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">)</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="abstract_server.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py
new file mode 100755
index 0000000..8769268
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+import collections, optparse
+from proton import Endpoint, generate_uuid
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Queue(object):
+ def __init__(self, dynamic=False):
+ self.dynamic = dynamic
+ self.queue = collections.deque()
+ self.consumers = []
+
+ def subscribe(self, consumer):
+ self.consumers.append(consumer)
+
+ def unsubscribe(self, consumer):
+ if consumer in self.consumers:
+ self.consumers.remove(consumer)
+ return len(self.consumers) == 0 and (self.dynamic or self.queue.count == 0)
+
+ def publish(self, message):
+ self.queue.append(message)
+ self.dispatch()
+
+ def dispatch(self, consumer=None):
+ if consumer:
+ c = [consumer]
+ else:
+ c = self.consumers
+ while self._deliver_to(c): pass
+
+ def _deliver_to(self, consumers):
+ try:
+ result = False
+ for c in consumers:
+ if c.credit:
+ c.send(self.queue.popleft())
+ result = True
+ return result
+ except IndexError: # no more messages
+ return False
+
+class Broker(MessagingHandler):
+ def __init__(self, url):
+ super(Broker, self).__init__()
+ self.url = url
+ self.queues = {}
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+
+ def _queue(self, address):
+ if address not in self.queues:
+ self.queues[address] = Queue()
+ return self.queues[address]
+
+ def on_link_opening(self, event):
+ if event.link.is_sender:
+ if event.link.remote_source.dynamic:
+ address = str(generate_uuid())
+ event.link.source.address = address
+ q = Queue(True)
+ self.queues[address] = q
+ q.subscribe(event.link)
+ elif event.link.remote_source.address:
+ event.link.source.address = event.link.remote_source.address
+ self._queue(event.link.source.address).subscribe(event.link)
+ elif event.link.remote_target.address:
+ event.link.target.address = event.link.remote_target.address
+
+ def _unsubscribe(self, link):
+ if link.source.address in self.queues and self.queues[link.source.address].unsubscribe(link):
+ del self.queues[link.source.address]
+
+ def on_link_closing(self, event):
+ if event.link.is_sender:
+ self._unsubscribe(event.link)
+
+ def on_connection_closing(self, event):
+ self.remove_stale_consumers(event.connection)
+
+ def on_disconnected(self, event):
+ self.remove_stale_consumers(event.connection)
+
+ def remove_stale_consumers(self, connection):
+ l = connection.link_head(Endpoint.REMOTE_ACTIVE)
+ while l:
+ if l.is_sender:
+ self._unsubscribe(l)
+ l = l.next(Endpoint.REMOTE_ACTIVE)
+
+ def on_sendable(self, event):
+ self._queue(event.link.source.address).dispatch(event.link)
+
+ def on_message(self, event):
+ self._queue(event.link.target.address).publish(event.message)
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672",
+ help="address router listens on (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Broker(opts.address)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html
new file mode 100644
index 0000000..363c834
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/broker.py.html
@@ -0,0 +1,253 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>broker.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>broker.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>broker.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">collections</span><span class="o">,</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Endpoint</span><span class="p">,</span> <span class="n">generate_uuid</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Queue</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dynamic</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">dynamic</span> <span class="o">=</span> <span class="n">dynamic</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queue</span> <span class="o">=</span> <span class="n">collections</span><span class="o">.</span><span class="n">deque</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span> <span class="o">=</span> <span class="p">[]</span>
+
+ <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumer</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">consumer</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumer</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">consumer</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">consumer</span><span class="p">)</span>
+ <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">consumers</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dynamic</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">publish</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">dispatch</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">dispatch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumer</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">consumer</span><span class="p">:</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="p">[</span><span class="n">consumer</span><span class="p">]</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">consumers</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_deliver_to</span><span class="p">(</span><span class="n">c</span><span class="p">):</span> <span class="k">pass</span>
+
+ <span class="k">def</span> <span class="nf">_deliver_to</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">consumers</span><span class="p">):</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="bp">False</span>
+ <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">consumers</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">credit</span><span class="p">:</span>
+ <span class="n">c</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queue</span><span class="o">.</span><span class="n">popleft</span><span class="p">())</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="bp">True</span>
+ <span class="k">return</span> <span class="n">result</span>
+ <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> <span class="c1"># no more messages</span>
+ <span class="k">return</span> <span class="bp">False</span>
+
+<span class="k">class</span> <span class="nc">Broker</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Broker</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queues</span> <span class="o">=</span> <span class="p">{}</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_queue</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">address</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">Queue</span><span class="p">()</span>
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">address</span><span class="p">]</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opening</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">dynamic</span><span class="p">:</span>
+ <span class="n">address</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">generate_uuid</span><span class="p">())</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+ <span class="n">q</span> <span class="o">=</span> <span class="n">Queue</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">q</span>
+ <span class="n">q</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">)</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">_unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">link</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">link</span><span class="p">):</span>
+ <span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span>
+
+ <span class="k">def</span> <span class="nf">on_link_closing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_unsubscribe</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_closing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">remove_stale_consumers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connection</span><span class="p">):</span>
+ <span class="n">l</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">link_head</span><span class="p">(</span><span class="n">Endpoint</span><span class="o">.</span><span class="n">REMOTE_ACTIVE</span><span class="p">)</span>
+ <span class="k">while</span> <span class="n">l</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">l</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_unsubscribe</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
+ <span class="n">l</span> <span class="o">=</span> <span class="n">l</span><span class="o">.</span><span class="n">next</span><span class="p">(</span><span class="n">Endpoint</span><span class="o">.</span><span class="n">REMOTE_ACTIVE</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">)</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_queue</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span><span class="p">)</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address router listens on (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Broker</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="broker.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py
new file mode 100755
index 0000000..86f2c76
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container, DynamicNodeProperties
+
+class Client(MessagingHandler):
+ def __init__(self, url, requests):
+ super(Client, self).__init__()
+ self.url = url
+ self.requests = requests
+
+ def on_start(self, event):
+ self.sender = event.container.create_sender(self.url)
+ self.receiver = event.container.create_receiver(self.sender.connection, None, dynamic=True)
+
+ def next_request(self):
+ if self.receiver.remote_source.address:
+ req = Message(reply_to=self.receiver.remote_source.address, body=self.requests[0])
+ self.sender.send(req)
+
+ def on_link_opened(self, event):
+ if event.receiver == self.receiver:
+ self.next_request()
+
+ def on_message(self, event):
+ print("%s => %s" % (self.requests.pop(0), event.message.body))
+ if self.requests:
+ self.next_request()
+ else:
+ event.connection.close()
+
+REQUESTS= ["Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe."]
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send requests to the supplied address and print responses.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+opts, args = parser.parse_args()
+
+Container(Client(opts.address, args or REQUESTS)).run()
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html
new file mode 100644
index 0000000..1426765
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/client.py.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>client.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>client.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>client.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">DynamicNodeProperties</span>
+
+<span class="k">class</span> <span class="nc">Client</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">requests</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Client</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">requests</span> <span class="o">=</span> <span class="n">requests</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">connection</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">dynamic</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">next_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">req</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">reply_to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">requests</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opened</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">next_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">requests</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">requests</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">next_request</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">REQUESTS</span><span class="o">=</span> <span class="p">[</span><span class="s2">"Twas brillig, and the slithy toves"</span><span class="p">,</span>
+ <span class="s2">"Did gire and gymble in the wabe."</span><span class="p">,</span>
+ <span class="s2">"All mimsy were the borogroves,"</span><span class="p">,</span>
+ <span class="s2">"And the mome raths outgrabe."</span><span class="p">]</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send requests to the supplied address and print responses."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">Client</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">args</span> <span class="ow">or</span> <span class="n">REQUESTS</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="client.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py
new file mode 100755
index 0000000..bf65639
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import tornado.ioloop
+import tornado.web
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton_tornado import Container
+
+class Client(MessagingHandler):
+ def __init__(self, host, address):
+ super(Client, self).__init__()
+ self.host = host
+ self.address = address
+ self.sent = []
+ self.pending = []
+ self.reply_address = None
+ self.sender = None
+ self.receiver = None
+
+ def on_start(self, event):
+ conn = event.container.connect(self.host)
+ self.sender = event.container.create_sender(conn, self.address)
+ self.receiver = event.container.create_receiver(conn, None, dynamic=True)
+
+ def on_link_opened(self, event):
+ if event.receiver == self.receiver:
+ self.reply_address = event.link.remote_source.address
+ self.do_request()
+
+ def on_sendable(self, event):
+ self.do_request()
+
+ def on_message(self, event):
+ if self.sent:
+ request, handler = self.sent.pop(0)
+ print("%s => %s" % (request, event.message.body))
+ handler(event.message.body)
+ self.do_request()
+
+ def do_request(self):
+ if self.pending and self.reply_address and self.sender.credit:
+ request, handler = self.pending.pop(0)
+ self.sent.append((request, handler))
+ req = Message(reply_to=self.reply_address, body=request)
+ self.sender.send(req)
+
+ def request(self, body, handler):
+ self.pending.append((body, handler))
+ self.do_request()
+ self.container.touch()
+
+class ExampleHandler(tornado.web.RequestHandler):
+ def initialize(self, client):
+ self.client = client
+
+ def get(self):
+ self._write_open()
+ self._write_form()
+ self._write_close()
+
+ @tornado.web.asynchronous
+ def post(self):
+ client.request(self.get_body_argument("message"), lambda x: self.on_response(x))
+
+ def on_response(self, body):
+ self.set_header("Content-Type", "text/html")
+ self._write_open()
+ self._write_form()
+ self.write("Response: " + body)
+ self._write_close()
+ self.finish()
+
+ def _write_open(self):
+ self.write('<html><body>')
+
+ def _write_close(self):
+ self.write('</body></html>')
+
+ def _write_form(self):
+ self.write('<form action="/client" method="POST">'
+ 'Request: <input type="text" name="message">'
+ '<input type="submit" value="Submit">'
+ '</form>')
+
+
+loop = tornado.ioloop.IOLoop.instance()
+client = Client("localhost:5672", "examples")
+client.container = Container(client, loop=loop)
+client.container.initialise()
+app = tornado.web.Application([tornado.web.url(r"/client", ExampleHandler, dict(client=client))])
+app.listen(8888)
+try:
+ loop.start()
+except KeyboardInterrupt:
+ loop.stop()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html
new file mode 100644
index 0000000..8bbc07a
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/client_http.py.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>client_http.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>client_http.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>client_http.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">tornado.ioloop</span>
+<span class="kn">import</span> <span class="nn">tornado.web</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Client</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Client</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">dynamic</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opened</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="p">:</span>
+ <span class="n">request</span><span class="p">,</span> <span class="n">handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
+ <span class="n">handler</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">do_request</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span><span class="p">:</span>
+ <span class="n">request</span><span class="p">,</span> <span class="n">handler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">request</span><span class="p">,</span> <span class="n">handler</span><span class="p">))</span>
+ <span class="n">req</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">reply_to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">reply_address</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="n">handler</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">body</span><span class="p">,</span> <span class="n">handler</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">do_request</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">touch</span><span class="p">()</span>
+
+<span class="k">class</span> <span class="nc">ExampleHandler</span><span class="p">(</span><span class="n">tornado</span><span class="o">.</span><span class="n">web</span><span class="o">.</span><span class="n">RequestHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
+
+ <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_open</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_form</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_close</span><span class="p">()</span>
+
+ <span class="nd">@tornado.web.asynchronous</span>
+ <span class="k">def</span> <span class="nf">post</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">client</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_body_argument</span><span class="p">(</span><span class="s2">"message"</span><span class="p">),</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">on_response</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">body</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">set_header</span><span class="p">(</span><span class="s2">"Content-Type"</span><span class="p">,</span> <span class="s2">"text/html"</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_open</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_form</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"Response: "</span> <span class="o">+</span> <span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_write_close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">finish</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">_write_open</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'<html><body>'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_write_close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'</body></html>'</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_write_form</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">'<form action="/client" method="POST">'</span>
+ <span class="s1">'Request: <input type="text" name="message">'</span>
+ <span class="s1">'<input type="submit" value="Submit">'</span>
+ <span class="s1">'</form>'</span><span class="p">)</span>
+
+
+<span class="n">loop</span> <span class="o">=</span> <span class="n">tornado</span><span class="o">.</span><span class="n">ioloop</span><span class="o">.</span><span class="n">IOLoop</span><span class="o">.</span><span class="n">instance</span><span class="p">()</span>
+<span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">)</span>
+<span class="n">client</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="n">loop</span><span class="p">)</span>
+<span class="n">client</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">initialise</span><span class="p">()</span>
+<span class="n">app</span> <span class="o">=</span> <span class="n">tornado</span><span class="o">.</span><span class="n">web</span><span class="o">.</span><span class="n">Application</span><span class="p">([</span><span class="n">tornado</span><span class="o">.</span><span class="n">web</span><span class="o">.</span><span class="n">url</span><span class="p">(</span><span class="s2">r"/client"</span><span class="p">,</span> <span class="n">ExampleHandler</span><span class="p">,</span> <span class="nb">dict</span><span class="p">(</span><span class="n">client</span><span class="o">=</span><span class="n">client</span><span class="p">))])</span>
+<span class="n">app</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="mi">8888</span><span class="p">)</span>
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">loop</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
+ <span class="n">loop</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="client_http.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py
new file mode 100755
index 0000000..54af87b
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+try:
+ import Queue
+except:
+ import queue as Queue
+
+import sqlite3
+import threading
+
+class Db(object):
+ def __init__(self, db, injector):
+ self.db = db
+ self.injector = injector
+ self.tasks = Queue.Queue()
+ self.position = None
+ self.pending_events = []
+ self.running = True
+ self.thread = threading.Thread(target=self._process)
+ self.thread.daemon=True
+ self.thread.start()
+
+ def close(self):
+ self.tasks.put(lambda conn: self._close())
+
+ def reset(self):
+ self.tasks.put(lambda conn: self._reset())
+
+ def load(self, records, event=None):
+ self.tasks.put(lambda conn: self._load(conn, records, event))
+
+ def get_id(self, event):
+ self.tasks.put(lambda conn: self._get_id(conn, event))
+
+ def insert(self, id, data, event=None):
+ self.tasks.put(lambda conn: self._insert(conn, id, data, event))
+
+ def delete(self, id, event=None):
+ self.tasks.put(lambda conn: self._delete(conn, id, event))
+
+ def _reset(self, ignored=None):
+ self.position = None
+
+ def _close(self, ignored=None):
+ self.running = False
+
+ def _get_id(self, conn, event):
+ cursor = conn.execute("SELECT * FROM records ORDER BY id DESC")
+ row = cursor.fetchone()
+ if event:
+ if row:
+ event.id = row['id']
+ else:
+ event.id = 0
+ self.injector.trigger(event)
+
+ def _load(self, conn, records, event):
+ if self.position:
+ cursor = conn.execute("SELECT * FROM records WHERE id > ? ORDER BY id", (self.position,))
+ else:
+ cursor = conn.execute("SELECT * FROM records ORDER BY id")
+ while not records.full():
+ row = cursor.fetchone()
+ if row:
+ self.position = row['id']
+ records.put(dict(row))
+ else:
+ break
+ if event:
+ self.injector.trigger(event)
+
+ def _insert(self, conn, id, data, event):
+ if id:
+ conn.execute("INSERT INTO records(id, description) VALUES (?, ?)", (id, data))
+ else:
+ conn.execute("INSERT INTO records(description) VALUES (?)", (data,))
+ if event:
+ self.pending_events.append(event)
+
+ def _delete(self, conn, id, event):
+ conn.execute("DELETE FROM records WHERE id=?", (id,))
+ if event:
+ self.pending_events.append(event)
+
+ def _process(self):
+ conn = sqlite3.connect(self.db)
+ conn.row_factory = sqlite3.Row
+ with conn:
+ while self.running:
+ f = self.tasks.get(True)
+ try:
+ while True:
+ f(conn)
+ f = self.tasks.get(False)
+ except Queue.Empty: pass
+ conn.commit()
+ for event in self.pending_events:
+ self.injector.trigger(event)
+ self.pending_events = []
+ self.injector.close()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[26/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
QPID-7350: Examples that should have gone with the previous commit
Project: http://git-wip-us.apache.org/repos/asf/qpid-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-site/commit/75ca8b14
Tree: http://git-wip-us.apache.org/repos/asf/qpid-site/tree/75ca8b14
Diff: http://git-wip-us.apache.org/repos/asf/qpid-site/diff/75ca8b14
Branch: refs/heads/asf-site
Commit: 75ca8b144ff3de1073b7ec0a8d25ca29d16d9783
Parents: 59433af
Author: Justin Ross <jr...@redhat.com>
Authored: Wed Jul 13 11:54:26 2016 +0200
Committer: Justin Ross <jr...@redhat.com>
Committed: Wed Jul 13 11:54:26 2016 +0200
----------------------------------------------------------------------
.../proton/cpp/examples/broker.cpp | 276 +++++++++++++
.../proton/cpp/examples/broker.cpp.html | 404 +++++++++++++++++++
.../proton/cpp/examples/broker.hpp | 236 +++++++++++
.../proton/cpp/examples/broker.hpp.html | 368 +++++++++++++++++
.../proton/cpp/examples/client.cpp | 107 +++++
.../proton/cpp/examples/client.cpp.html | 235 +++++++++++
.../proton/cpp/examples/connection_options.cpp | 76 ++++
.../cpp/examples/connection_options.cpp.html | 204 ++++++++++
.../proton/cpp/examples/direct_recv.cpp | 91 +++++
.../proton/cpp/examples/direct_recv.cpp.html | 219 ++++++++++
.../proton/cpp/examples/direct_send.cpp | 101 +++++
.../proton/cpp/examples/direct_send.cpp.html | 229 +++++++++++
.../proton/cpp/examples/encode_decode.cpp | 252 ++++++++++++
.../proton/cpp/examples/encode_decode.cpp.html | 382 ++++++++++++++++++
.../proton/cpp/examples/fake_cpp11.hpp | 34 ++
.../proton/cpp/examples/fake_cpp11.hpp.html | 166 ++++++++
.../proton/cpp/examples/flow_control.cpp | 233 +++++++++++
.../proton/cpp/examples/flow_control.cpp.html | 361 +++++++++++++++++
.../proton/cpp/examples/helloworld.cpp | 73 ++++
.../proton/cpp/examples/helloworld.cpp.html | 201 +++++++++
.../proton/cpp/examples/helloworld_direct.cpp | 79 ++++
.../cpp/examples/helloworld_direct.cpp.html | 207 ++++++++++
.../proton/cpp/examples/index.html | 177 ++++++++
.../proton/cpp/examples/options.hpp | 175 ++++++++
.../proton/cpp/examples/options.hpp.html | 305 ++++++++++++++
.../proton/cpp/examples/queue_browser.cpp | 67 +++
.../proton/cpp/examples/queue_browser.cpp.html | 195 +++++++++
.../proton/cpp/examples/selected_recv.cpp | 88 ++++
.../proton/cpp/examples/selected_recv.cpp.html | 216 ++++++++++
.../proton/cpp/examples/server.cpp | 100 +++++
.../proton/cpp/examples/server.cpp.html | 228 +++++++++++
.../proton/cpp/examples/server_direct.cpp | 119 ++++++
.../proton/cpp/examples/server_direct.cpp.html | 247 ++++++++++++
.../proton/cpp/examples/simple_recv.cpp | 92 +++++
.../proton/cpp/examples/simple_recv.cpp.html | 220 ++++++++++
.../proton/cpp/examples/simple_send.cpp | 100 +++++
.../proton/cpp/examples/simple_send.cpp.html | 228 +++++++++++
.../proton/cpp/examples/ssl.cpp | 179 ++++++++
.../proton/cpp/examples/ssl.cpp.html | 307 ++++++++++++++
.../proton/cpp/examples/ssl_client_cert.cpp | 193 +++++++++
.../cpp/examples/ssl_client_cert.cpp.html | 321 +++++++++++++++
.../proton/python/examples/abstract_server.py | 36 ++
.../python/examples/abstract_server.py.html | 164 ++++++++
.../proton/python/examples/broker.py | 124 ++++++
.../proton/python/examples/broker.py.html | 253 ++++++++++++
.../proton/python/examples/client.py | 65 +++
.../proton/python/examples/client.py.html | 193 +++++++++
.../proton/python/examples/client_http.py | 114 ++++++
.../proton/python/examples/client_http.py.html | 243 +++++++++++
.../proton/python/examples/db_common.py | 118 ++++++
.../proton/python/examples/db_common.py.html | 247 ++++++++++++
.../proton/python/examples/db_ctrl.py | 47 +++
.../proton/python/examples/db_ctrl.py.html | 176 ++++++++
.../proton/python/examples/db_recv.py | 80 ++++
.../proton/python/examples/db_recv.py.html | 206 ++++++++++
.../proton/python/examples/db_send.py | 111 +++++
.../proton/python/examples/db_send.py.html | 239 +++++++++++
.../proton/python/examples/direct_recv.py | 60 +++
.../proton/python/examples/direct_recv.py.html | 186 +++++++++
.../proton/python/examples/direct_send.py | 64 +++
.../proton/python/examples/direct_send.py.html | 193 +++++++++
.../proton/python/examples/helloworld.py | 45 +++
.../proton/python/examples/helloworld.py.html | 174 ++++++++
.../python/examples/helloworld_blocking.py | 34 ++
.../python/examples/helloworld_blocking.py.html | 162 ++++++++
.../proton/python/examples/helloworld_direct.py | 48 +++
.../python/examples/helloworld_direct.py.html | 177 ++++++++
.../examples/helloworld_direct_tornado.py | 48 +++
.../examples/helloworld_direct_tornado.py.html | 177 ++++++++
.../python/examples/helloworld_tornado.py | 45 +++
.../python/examples/helloworld_tornado.py.html | 174 ++++++++
.../proton/python/examples/index.html | 188 +++++++++
.../proton/python/examples/proton_server.py | 51 +++
.../python/examples/proton_server.py.html | 199 +++++++++
.../proton/python/examples/proton_tornado.py | 114 ++++++
.../python/examples/proton_tornado.py.html | 243 +++++++++++
.../proton/python/examples/queue_browser.py | 43 ++
.../python/examples/queue_browser.py.html | 169 ++++++++
.../proton/python/examples/recurring_timer.py | 43 ++
.../python/examples/recurring_timer.py.html | 170 ++++++++
.../python/examples/recurring_timer_tornado.py | 45 +++
.../examples/recurring_timer_tornado.py.html | 172 ++++++++
.../proton/python/examples/selected_recv.py | 41 ++
.../python/examples/selected_recv.py.html | 167 ++++++++
.../proton/python/examples/server.py | 49 +++
.../proton/python/examples/server.py.html | 175 ++++++++
.../proton/python/examples/server_direct.py | 64 +++
.../python/examples/server_direct.py.html | 190 +++++++++
.../proton/python/examples/server_tx.py | 79 ++++
.../proton/python/examples/server_tx.py.html | 205 ++++++++++
.../proton/python/examples/simple_recv.py | 59 +++
.../proton/python/examples/simple_recv.py.html | 185 +++++++++
.../proton/python/examples/simple_send.py | 63 +++
.../proton/python/examples/simple_send.py.html | 192 +++++++++
.../proton/python/examples/sync_client.py | 55 +++
.../proton/python/examples/sync_client.py.html | 183 +++++++++
.../proton/python/examples/test_examples.py | 151 +++++++
.../python/examples/test_examples.py.html | 281 +++++++++++++
.../proton/python/examples/tx_recv.py | 80 ++++
.../proton/python/examples/tx_recv.py.html | 206 ++++++++++
.../python/examples/tx_recv_interactive.py | 85 ++++
.../python/examples/tx_recv_interactive.py.html | 212 ++++++++++
.../proton/python/examples/tx_send.py | 89 ++++
.../proton/python/examples/tx_send.py.html | 218 ++++++++++
.../proton/cpp/examples/broker.cpp | 276 +++++++++++++
.../proton/cpp/examples/broker.cpp.html.in | 260 ++++++++++++
.../proton/cpp/examples/broker.hpp | 236 +++++++++++
.../proton/cpp/examples/broker.hpp.html.in | 224 ++++++++++
.../proton/cpp/examples/client.cpp | 107 +++++
.../proton/cpp/examples/client.cpp.html.in | 91 +++++
.../proton/cpp/examples/connection_options.cpp | 76 ++++
.../cpp/examples/connection_options.cpp.html.in | 60 +++
.../proton/cpp/examples/direct_recv.cpp | 91 +++++
.../proton/cpp/examples/direct_recv.cpp.html.in | 75 ++++
.../proton/cpp/examples/direct_send.cpp | 101 +++++
.../proton/cpp/examples/direct_send.cpp.html.in | 85 ++++
.../proton/cpp/examples/encode_decode.cpp | 252 ++++++++++++
.../cpp/examples/encode_decode.cpp.html.in | 238 +++++++++++
.../proton/cpp/examples/fake_cpp11.hpp | 34 ++
.../proton/cpp/examples/fake_cpp11.hpp.html.in | 22 +
.../proton/cpp/examples/flow_control.cpp | 233 +++++++++++
.../cpp/examples/flow_control.cpp.html.in | 217 ++++++++++
.../proton/cpp/examples/helloworld.cpp | 73 ++++
.../proton/cpp/examples/helloworld.cpp.html.in | 57 +++
.../proton/cpp/examples/helloworld_direct.cpp | 79 ++++
.../cpp/examples/helloworld_direct.cpp.html.in | 63 +++
.../proton/cpp/examples/index.md | 30 ++
.../proton/cpp/examples/options.hpp | 175 ++++++++
.../proton/cpp/examples/options.hpp.html.in | 161 ++++++++
.../proton/cpp/examples/queue_browser.cpp | 67 +++
.../cpp/examples/queue_browser.cpp.html.in | 51 +++
.../proton/cpp/examples/selected_recv.cpp | 88 ++++
.../cpp/examples/selected_recv.cpp.html.in | 72 ++++
.../proton/cpp/examples/server.cpp | 100 +++++
.../proton/cpp/examples/server.cpp.html.in | 84 ++++
.../proton/cpp/examples/server_direct.cpp | 119 ++++++
.../cpp/examples/server_direct.cpp.html.in | 103 +++++
.../proton/cpp/examples/simple_recv.cpp | 92 +++++
.../proton/cpp/examples/simple_recv.cpp.html.in | 76 ++++
.../proton/cpp/examples/simple_send.cpp | 100 +++++
.../proton/cpp/examples/simple_send.cpp.html.in | 84 ++++
.../proton/cpp/examples/ssl.cpp | 179 ++++++++
.../proton/cpp/examples/ssl.cpp.html.in | 163 ++++++++
.../proton/cpp/examples/ssl_client_cert.cpp | 193 +++++++++
.../cpp/examples/ssl_client_cert.cpp.html.in | 177 ++++++++
.../proton/python/examples/abstract_server.py | 36 ++
.../python/examples/abstract_server.py.html.in | 20 +
.../proton/python/examples/broker.py | 124 ++++++
.../proton/python/examples/broker.py.html.in | 109 +++++
.../proton/python/examples/client.py | 65 +++
.../proton/python/examples/client.py.html.in | 49 +++
.../proton/python/examples/client_http.py | 114 ++++++
.../python/examples/client_http.py.html.in | 99 +++++
.../proton/python/examples/db_common.py | 118 ++++++
.../proton/python/examples/db_common.py.html.in | 103 +++++
.../proton/python/examples/db_ctrl.py | 47 +++
.../proton/python/examples/db_ctrl.py.html.in | 32 ++
.../proton/python/examples/db_recv.py | 80 ++++
.../proton/python/examples/db_recv.py.html.in | 62 +++
.../proton/python/examples/db_send.py | 111 +++++
.../proton/python/examples/db_send.py.html.in | 95 +++++
.../proton/python/examples/direct_recv.py | 60 +++
.../python/examples/direct_recv.py.html.in | 42 ++
.../proton/python/examples/direct_send.py | 64 +++
.../python/examples/direct_send.py.html.in | 49 +++
.../proton/python/examples/helloworld.py | 45 +++
.../python/examples/helloworld.py.html.in | 30 ++
.../python/examples/helloworld_blocking.py | 34 ++
.../examples/helloworld_blocking.py.html.in | 18 +
.../proton/python/examples/helloworld_direct.py | 48 +++
.../examples/helloworld_direct.py.html.in | 33 ++
.../examples/helloworld_direct_tornado.py | 48 +++
.../helloworld_direct_tornado.py.html.in | 33 ++
.../python/examples/helloworld_tornado.py | 45 +++
.../examples/helloworld_tornado.py.html.in | 30 ++
.../proton/python/examples/index.md | 41 ++
.../proton/python/examples/proton_server.py | 51 +++
.../python/examples/proton_server.py.html.in | 55 +++
.../proton/python/examples/proton_tornado.py | 114 ++++++
.../python/examples/proton_tornado.py.html.in | 99 +++++
.../proton/python/examples/queue_browser.py | 43 ++
.../python/examples/queue_browser.py.html.in | 25 ++
.../proton/python/examples/recurring_timer.py | 43 ++
.../python/examples/recurring_timer.py.html.in | 26 ++
.../python/examples/recurring_timer_tornado.py | 45 +++
.../examples/recurring_timer_tornado.py.html.in | 28 ++
.../proton/python/examples/selected_recv.py | 41 ++
.../python/examples/selected_recv.py.html.in | 23 ++
.../proton/python/examples/server.py | 49 +++
.../proton/python/examples/server.py.html.in | 31 ++
.../proton/python/examples/server_direct.py | 64 +++
.../python/examples/server_direct.py.html.in | 46 +++
.../proton/python/examples/server_tx.py | 79 ++++
.../proton/python/examples/server_tx.py.html.in | 61 +++
.../proton/python/examples/simple_recv.py | 59 +++
.../python/examples/simple_recv.py.html.in | 41 ++
.../proton/python/examples/simple_send.py | 63 +++
.../python/examples/simple_send.py.html.in | 48 +++
.../proton/python/examples/sync_client.py | 55 +++
.../python/examples/sync_client.py.html.in | 39 ++
.../proton/python/examples/test_examples.py | 151 +++++++
.../python/examples/test_examples.py.html.in | 137 +++++++
.../proton/python/examples/tx_recv.py | 80 ++++
.../proton/python/examples/tx_recv.py.html.in | 62 +++
.../python/examples/tx_recv_interactive.py | 85 ++++
.../examples/tx_recv_interactive.py.html.in | 68 ++++
.../proton/python/examples/tx_send.py | 89 ++++
.../proton/python/examples/tx_send.py.html.in | 74 ++++
208 files changed, 25482 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp
new file mode 100755
index 0000000..bb3aefb
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp
@@ -0,0 +1,276 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/message.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/sender.hpp>
+#include <proton/sender_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/target_options.hpp>
+#include <proton/transport.hpp>
+#include <proton/url.hpp>
+
+#include <deque>
+#include <iostream>
+#include <list>
+#include <map>
+#include <string>
+
+#include "fake_cpp11.hpp"
+
+/// A simple implementation of a queue.
+class queue {
+ public:
+ queue(const std::string &name, bool dynamic = false) : name_(name), dynamic_(dynamic) {}
+
+ std::string name() const { return name_; }
+
+ void subscribe(proton::sender s) {
+ consumers_.push_back(s);
+ }
+
+ // Return true if queue can be deleted.
+ bool unsubscribe(proton::sender s) {
+ consumers_.remove(s);
+ return (consumers_.size() == 0 && (dynamic_ || messages_.size() == 0));
+ }
+
+ void publish(const proton::message &m) {
+ messages_.push_back(m);
+ dispatch(0);
+ }
+
+ void dispatch(proton::sender *s) {
+ while (deliver_to(s)) {}
+ }
+
+ bool deliver_to(proton::sender *s) {
+ // Deliver to single sender if supplied, else all consumers
+ int count = s ? 1 : consumers_.size();
+
+ if (!count) return false;
+
+ bool result = false;
+ sender_list::iterator it = consumers_.begin();
+
+ if (!s && count) {
+ s = &*it;
+ }
+
+ while (messages_.size()) {
+ if (s->credit()) {
+ const proton::message& m = messages_.front();
+
+ s->send(m);
+ messages_.pop_front();
+ result = true;
+ }
+
+ if (--count) {
+ it++;
+ } else {
+ return result;
+ }
+ }
+
+ return false;
+ }
+
+ private:
+ typedef std::deque<proton::message> message_queue;
+ typedef std::list<proton::sender> sender_list;
+
+ std::string name_;
+ bool dynamic_;
+ message_queue messages_;
+ sender_list consumers_;
+};
+
+/// A collection of queues and queue factory, used by a broker.
+class queues {
+ public:
+ queues() : next_id_(0) {}
+ virtual ~queues() {}
+
+ // Get or create a queue.
+ virtual queue &get(const std::string &address = std::string()) {
+ if (address.empty()) {
+ throw std::runtime_error("empty queue name");
+ }
+
+ queue*& q = queues_[address];
+
+ if (!q) q = new queue(address);
+
+ return *q;
+ }
+
+ // Create a dynamic queue with a unique name.
+ virtual queue &dynamic() {
+ std::ostringstream os;
+ os << "q" << next_id_++;
+ queue *q = queues_[os.str()] = new queue(os.str(), true);
+
+ return *q;
+ }
+
+ // Delete the named queue
+ virtual void erase(std::string &name) {
+ delete queues_[name];
+ queues_.erase(name);
+ }
+
+ protected:
+ typedef std::map<std::string, queue *> queue_map;
+ queue_map queues_;
+ uint64_t next_id_; // Use to generate unique queue IDs.
+};
+
+// A handler to implement broker logic
+class broker_handler : public proton::messaging_handler {
+ public:
+ broker_handler(queues& qs) : queues_(qs) {}
+
+ void on_sender_open(proton::sender &sender) OVERRIDE {
+ proton::source src(sender.source());
+ queue &q = src.dynamic() ?
+ queues_.dynamic() : queues_.get(src.address());
+ sender.open(proton::sender_options().source(proton::source_options().address(q.name())));
+ q.subscribe(sender);
+ std::cout << "broker outgoing link from " << q.name() << std::endl;
+ }
+
+ void on_receiver_open(proton::receiver &receiver) OVERRIDE {
+ std::string address = receiver.target().address();
+ if (!address.empty()) {
+ receiver.open(proton::receiver_options().target(proton::target_options().address(address)));
+ std::cout << "broker incoming link to " << address << std::endl;
+ }
+ }
+
+ void unsubscribe(proton::sender lnk) {
+ std::string address = lnk.source().address();
+
+ if (queues_.get(address).unsubscribe(lnk)) {
+ queues_.erase(address);
+ }
+ }
+
+ void on_sender_close(proton::sender &sender) OVERRIDE {
+ unsubscribe(sender);
+ }
+
+ void on_connection_close(proton::connection &c) OVERRIDE {
+ remove_stale_consumers(c);
+ }
+
+ void on_transport_close(proton::transport &t) OVERRIDE {
+ remove_stale_consumers(t.connection());
+ }
+
+ void on_transport_error(proton::transport &t) OVERRIDE {
+ std::cout << "broker client disconnect: " << t.error().what() << std::endl;
+ }
+
+ void on_error(const proton::error_condition &c) OVERRIDE {
+ std::cerr << "broker error: " << c.what() << std::endl;
+ }
+
+ void remove_stale_consumers(proton::connection connection) {
+ proton::session_range r1 = connection.sessions();
+ for (proton::session_iterator i1 = r1.begin(); i1 != r1.end(); ++i1) {
+ proton::sender_range r2 = i1->senders();
+ for (proton::sender_iterator i2 = r2.begin(); i2 != r2.end(); ++i2) {
+ if (i2->active())
+ unsubscribe(*i2);
+ }
+ }
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ std::string address = s.source().address();
+
+ queues_.get(address).dispatch(&s);
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ std::string address = d.receiver().target().address();
+ queues_.get(address).publish(m);
+ }
+
+ protected:
+ queues& queues_;
+};
+
+
+// The broker
+class broker {
+ public:
+ broker(const std::string& url) : handler_(url, queues_) {}
+
+ proton::messaging_handler& handler() { return handler_; }
+
+ private:
+ class my_handler : public broker_handler {
+ public:
+ my_handler(const std::string& u, queues& qs) : broker_handler(qs), url_(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ c.listen(url_);
+ std::cout << "broker listening on " << url_ << std::endl;
+ }
+
+ private:
+ const std::string& url_;
+ };
+
+ private:
+ queues queues_;
+ my_handler handler_;
+};
+
+int main(int argc, char **argv) {
+ std::string url("0.0.0.0");
+ example::options opts(argc, argv);
+
+ opts.add_value(url, 'a', "address", "listen on URL", "URL");
+
+ try {
+ opts.parse();
+
+ broker b(url);
+ proton::default_container(b.handler()).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html
new file mode 100644
index 0000000..cadb820
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html
@@ -0,0 +1,404 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>broker.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>broker.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>broker.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/message.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/target_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><deque></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><list></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="c1">/// A simple implementation of a queue.</span>
+<span class="k">class</span> <span class="nc">queue</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queue</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">dynamic</span> <span class="o">=</span> <span class="nb">false</span><span class="p">)</span> <span class="o">:</span> <span class="n">name_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">dynamic_</span><span class="p">(</span><span class="n">dynamic</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">name_</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">subscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Return true if queue can be deleted.</span>
+ <span class="kt">bool</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="k">return</span> <span class="p">(</span><span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dynamic_</span> <span class="o">||</span> <span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">publish</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">dispatch</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">dispatch</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">deliver_to</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="p">{}</span>
+ <span class="p">}</span>
+
+ <span class="kt">bool</span> <span class="n">deliver_to</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Deliver to single sender if supplied, else all consumers</span>
+ <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="n">s</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">count</span><span class="p">)</span> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+
+ <span class="kt">bool</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="n">sender_list</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">s</span> <span class="o">&&</span> <span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="o">&*</span><span class="n">it</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">while</span> <span class="p">(</span><span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="o">-></span><span class="n">credit</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">&</span> <span class="n">m</span> <span class="o">=</span> <span class="n">messages_</span><span class="p">.</span><span class="n">front</span><span class="p">();</span>
+
+ <span class="n">s</span><span class="o">-></span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">pop_front</span><span class="p">();</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">--</span><span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">it</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">deque</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">></span> <span class="n">message_queue</span><span class="p">;</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_list</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name_</span><span class="p">;</span>
+ <span class="kt">bool</span> <span class="n">dynamic_</span><span class="p">;</span>
+ <span class="n">message_queue</span> <span class="n">messages_</span><span class="p">;</span>
+ <span class="n">sender_list</span> <span class="n">consumers_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// A collection of queues and queue factory, used by a broker.</span>
+<span class="k">class</span> <span class="nc">queues</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queues</span><span class="p">()</span> <span class="o">:</span> <span class="n">next_id_</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+ <span class="k">virtual</span> <span class="o">~</span><span class="n">queues</span><span class="p">()</span> <span class="p">{}</span>
+
+ <span class="c1">// Get or create a queue.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">get</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">address</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"empty queue name"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">queue</span><span class="o">*&</span> <span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">address</span><span class="p">];</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">q</span><span class="p">)</span> <span class="n">q</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Create a dynamic queue with a unique name.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">dynamic</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">os</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">"q"</span> <span class="o"><<</span> <span class="n">next_id_</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">queue</span> <span class="o">*</span><span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">()]</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="nb">true</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Delete the named queue</span>
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="n">erase</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">delete</span> <span class="n">queues_</span><span class="p">[</span><span class="n">name</span><span class="p">];</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">queue</span> <span class="o">*></span> <span class="n">queue_map</span><span class="p">;</span>
+ <span class="n">queue_map</span> <span class="n">queues_</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">next_id_</span><span class="p">;</span> <span class="c1">// Use to generate unique queue IDs.</span>
+<span class="p">};</span>
+
+<span class="c1">// A handler to implement broker logic</span>
+<span class="k">class</span> <span class="nc">broker_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">broker_handler</span><span class="p">(</span><span class="n">queues</span><span class="o">&</span> <span class="n">qs</span><span class="p">)</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">(</span><span class="n">qs</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source</span> <span class="n">src</span><span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">source</span><span class="p">());</span>
+ <span class="n">queue</span> <span class="o">&</span><span class="n">q</span> <span class="o">=</span> <span class="n">src</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">?</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">address</span><span class="p">());</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">())));</span>
+ <span class="n">q</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker outgoing link from "</span> <span class="o"><<</span> <span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">receiver</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">.</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">receiver</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">target</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">target_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">address</span><span class="p">)));</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker incoming link to "</span> <span class="o"><<</span> <span class="n">address</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">lnk</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">lnk</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">lnk</span><span class="p">))</span> <span class="p">{</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">c</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">());</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_error</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker client disconnect: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">error</span><span class="p">().</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_error</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">error_condition</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="s">"broker error: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">connection</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">session_range</span> <span class="n">r1</span> <span class="o">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">sessions</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">session_iterator</span> <span class="n">i1</span> <span class="o">=</span> <span class="n">r1</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i1</span> <span class="o">!=</span> <span class="n">r1</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i1</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender_range</span> <span class="n">r2</span> <span class="o">=</span> <span class="n">i1</span><span class="o">-></span><span class="n">senders</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_iterator</span> <span class="n">i2</span> <span class="o">=</span> <span class="n">r2</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i2</span> <span class="o">!=</span> <span class="n">r2</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i2</span><span class="o">-></span><span class="n">active</span><span class="p">())</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="o">*</span><span class="n">i2</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">dispatch</span><span class="p">(</span><span class="o">&</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">publish</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="n">queues</span><span class="o">&</span> <span class="n">queues_</span><span class="p">;</span>
+<span class="p">};</span>
+
+
+<span class="c1">// The broker</span>
+<span class="k">class</span> <span class="nc">broker</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">broker</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">url</span><span class="p">)</span> <span class="o">:</span> <span class="n">handler_</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">queues_</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span><span class="o">&</span> <span class="n">handler</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">handler_</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">class</span> <span class="nc">my_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">broker_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">my_handler</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">queues</span><span class="o">&</span> <span class="n">qs</span><span class="p">)</span> <span class="o">:</span> <span class="n">broker_handler</span><span class="p">(</span><span class="n">qs</span><span class="p">),</span> <span class="n">url_</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url_</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker listening on "</span> <span class="o"><<</span> <span class="n">url_</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">url_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">queues</span> <span class="n">queues_</span><span class="p">;</span>
+ <span class="n">my_handler</span> <span class="n">handler_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">(</span><span class="s">"0.0.0.0"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">broker</span> <span class="n">b</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">b</span><span class="p">.</span><span class="n">handler</span><span class="p">()).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="broker.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp
new file mode 100755
index 0000000..184ddc7
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp
@@ -0,0 +1,236 @@
+#ifndef BROKER_HPP
+#define BROKER_HPP
+
+/*
+ * 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.
+ */
+
+/// @file
+///
+/// Common code used by different broker examples.
+///
+/// The examples add functionality as needed, this helps to make it
+/// easier to see the important differences between the examples.
+
+#include <proton/connection.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/message.hpp>
+#include <proton/sasl.hpp>
+#include <proton/sender.hpp>
+#include <proton/tracker.hpp>
+#include <proton/transport.hpp>
+#include <proton/sender_options.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/target_options.hpp>
+
+#include <iostream>
+#include <deque>
+#include <map>
+#include <list>
+#include <sstream>
+
+/// A simple implementation of a queue.
+class queue {
+ public:
+ queue(const std::string &name, bool dynamic = false) : name_(name), dynamic_(dynamic) {}
+
+ std::string name() const { return name_; }
+
+ void subscribe(proton::sender s) {
+ consumers_.push_back(s);
+ }
+
+ // Return true if queue can be deleted.
+ bool unsubscribe(proton::sender s) {
+ consumers_.remove(s);
+ return (consumers_.size() == 0 && (dynamic_ || messages_.size() == 0));
+ }
+
+ void publish(const proton::message &m) {
+ messages_.push_back(m);
+ dispatch(0);
+ }
+
+ void dispatch(proton::sender *s) {
+ while (deliver_to(s)) {}
+ }
+
+ bool deliver_to(proton::sender *s) {
+ // Deliver to single sender if supplied, else all consumers
+ int count = s ? 1 : consumers_.size();
+
+ if (!count) return false;
+
+ bool result = false;
+ sender_list::iterator it = consumers_.begin();
+
+ if (!s && count) {
+ s = &*it;
+ }
+
+ while (messages_.size()) {
+ if (s->credit()) {
+ const proton::message& m = messages_.front();
+
+ s->send(m);
+ messages_.pop_front();
+ result = true;
+ }
+
+ if (--count) {
+ it++;
+ } else {
+ return result;
+ }
+ }
+
+ return false;
+ }
+
+ private:
+ typedef std::deque<proton::message> message_queue;
+ typedef std::list<proton::sender> sender_list;
+
+ std::string name_;
+ bool dynamic_;
+ message_queue messages_;
+ sender_list consumers_;
+};
+
+/// A collection of queues and queue factory, used by a broker.
+class queues {
+ public:
+ queues() : next_id_(0) {}
+ virtual ~queues() {}
+
+ // Get or create a queue.
+ virtual queue &get(const std::string &address = std::string()) {
+ if (address.empty()) {
+ throw std::runtime_error("empty queue name");
+ }
+
+ queue*& q = queues_[address];
+
+ if (!q) q = new queue(address);
+
+ return *q;
+ }
+
+ // Create a dynamic queue with a unique name.
+ virtual queue &dynamic() {
+ std::ostringstream os;
+ os << "q" << next_id_++;
+ queue *q = queues_[os.str()] = new queue(os.str(), true);
+
+ return *q;
+ }
+
+ // Delete the named queue
+ virtual void erase(std::string &name) {
+ delete queues_[name];
+ queues_.erase(name);
+ }
+
+ protected:
+ typedef std::map<std::string, queue *> queue_map;
+ queue_map queues_;
+ uint64_t next_id_; // Use to generate unique queue IDs.
+};
+
+#include <proton/config.hpp>
+
+/** Common handler logic for brokers. */
+class broker_handler : public proton::messaging_handler {
+ public:
+ broker_handler(queues& qs) : queues_(qs) {}
+
+ void on_transport_open(proton::transport &t) OVERRIDE {
+ std::cout << "Connection from user: " << t.sasl().user() << " (mechanism: " << t.sasl().mech() << ")" << std::endl;
+ }
+
+ void on_sender_open(proton::sender &sender) OVERRIDE {
+ proton::source src(sender.source());
+ queue &q = src.dynamic() ?
+ queues_.dynamic() : queues_.get(src.address());
+ sender.open(proton::sender_options().source(proton::source_options().address(q.name())));
+ q.subscribe(sender);
+ std::cout << "broker outgoing link from " << q.name() << std::endl;
+ }
+
+ void on_receiver_open(proton::receiver &receiver) OVERRIDE {
+ std::string address = receiver.target().address();
+ if (!address.empty()) {
+ receiver.open(proton::receiver_options().target(proton::target_options().address(address)));
+ std::cout << "broker incoming link to " << address << std::endl;
+ }
+ }
+
+ void unsubscribe(proton::sender lnk) {
+ std::string address = lnk.source().address();
+
+ if (queues_.get(address).unsubscribe(lnk)) {
+ queues_.erase(address);
+ }
+ }
+
+ void on_sender_close(proton::sender &sender) OVERRIDE {
+ unsubscribe(sender);
+ }
+
+ void on_connection_close(proton::connection &c) OVERRIDE {
+ remove_stale_consumers(c);
+ }
+
+ void on_transport_close(proton::transport &t) OVERRIDE {
+ remove_stale_consumers(t.connection());
+ }
+
+ void on_transport_error(proton::transport &t) OVERRIDE {
+ std::cout << "broker client disconnect: " << t.error().what() << std::endl;
+ }
+
+ void on_error(const proton::error_condition &c) OVERRIDE {
+ std::cerr << "broker error: " << c.what() << std::endl;
+ }
+
+ void remove_stale_consumers(proton::connection connection) {
+ proton::sender_range sr = connection.senders();
+ for (proton::sender_iterator i = sr.begin(); i != sr.end(); ++i) {
+ if (i->active())
+ unsubscribe(*i);
+ }
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ std::string address = s.source().address();
+
+ queues_.get(address).dispatch(&s);
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ std::string address = d.receiver().target().address();
+ queues_.get(address).publish(m);
+ }
+
+ protected:
+ queues& queues_;
+};
+
+#endif // BROKER_HPP
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[21/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html
new file mode 100644
index 0000000..f0f4f4e
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>options.hpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>options.hpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>options.hpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#ifndef OPTIONS_HPP</span>
+<span class="cp">#define OPTIONS_HPP</span>
+
+
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><ostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><vector></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><stdexcept></span><span class="cp"></span>
+
+<span class="k">namespace</span> <span class="n">example</span> <span class="p">{</span>
+
+<span class="k">struct</span> <span class="nl">bad_option</span> <span class="p">:</span> <span class="k">public</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span> <span class="p">{</span>
+ <span class="n">bad_option</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">s</span><span class="p">)</span> <span class="o">:</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">options</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+
+ <span class="n">options</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">)</span> <span class="o">:</span> <span class="n">argc_</span><span class="p">(</span><span class="n">argc</span><span class="p">),</span> <span class="n">argv_</span><span class="p">(</span><span class="n">argv</span><span class="p">),</span> <span class="n">prog_</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">help_</span><span class="p">()</span> <span class="p">{</span>
+ <span class="kt">size_t</span> <span class="n">slash</span> <span class="o">=</span> <span class="n">prog_</span><span class="p">.</span><span class="n">find_last_of</span><span class="p">(</span><span class="s">"/</span><span class="se">\\</span><span class="s">"</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">slash</span> <span class="o">!=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span>
+ <span class="n">prog_</span> <span class="o">=</span> <span class="n">prog_</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">slash</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> <span class="c1">// Extract prog name from path</span>
+ <span class="n">add_flag</span><span class="p">(</span><span class="n">help_</span><span class="p">,</span> <span class="sc">'h'</span><span class="p">,</span> <span class="s">"help"</span><span class="p">,</span> <span class="s">"Print the help message"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="o">~</span><span class="n">options</span><span class="p">()</span> <span class="p">{</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">opts</span><span class="o">::</span><span class="n">iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
+ <span class="k">delete</span> <span class="o">*</span><span class="n">i</span><span class="p">;</span>
+ <span class="p">}</span>
+
+
+ <span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span>
+ <span class="kt">void</span> <span class="n">add_value</span><span class="p">(</span><span class="n">T</span><span class="o">&</span> <span class="n">value</span><span class="p">,</span> <span class="kt">char</span> <span class="n">short_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">long_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">description</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">var</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">opts_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="k">new</span> <span class="n">option_value</span><span class="o"><</span><span class="n">T</span><span class="o">></span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">short_name</span><span class="p">,</span> <span class="n">long_name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">var</span><span class="p">));</span>
+ <span class="p">}</span>
+
+
+ <span class="kt">void</span> <span class="n">add_flag</span><span class="p">(</span><span class="kt">bool</span><span class="o">&</span> <span class="n">flag</span><span class="p">,</span> <span class="kt">char</span> <span class="n">short_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">long_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">description</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">opts_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="k">new</span> <span class="n">option_flag</span><span class="p">(</span><span class="n">flag</span><span class="p">,</span> <span class="n">short_name</span><span class="p">,</span> <span class="n">long_name</span><span class="p">,</span> <span class="n">description</span><span class="p">));</span>
+ <span class="p">}</span>
+
+
+ <span class="kt">int</span> <span class="n">parse</span><span class="p">()</span> <span class="p">{</span>
+ <span class="kt">int</span> <span class="n">arg</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(;</span> <span class="n">arg</span> <span class="o"><</span> <span class="n">argc_</span> <span class="o">&&</span> <span class="n">argv_</span><span class="p">[</span><span class="n">arg</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'-'</span><span class="p">;</span> <span class="o">++</span><span class="n">arg</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="o">::</span><span class="n">iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">i</span> <span class="o">!=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="o">&&</span> <span class="o">!</span><span class="p">(</span><span class="o">*</span><span class="n">i</span><span class="p">)</span><span class="o">-></span><span class="n">parse</span><span class="p">(</span><span class="n">argc_</span><span class="p">,</span> <span class="n">argv_</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
+ <span class="o">++</span><span class="n">i</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">())</span>
+ <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">"unknown option "</span><span class="p">)</span> <span class="o">+</span> <span class="n">argv_</span><span class="p">[</span><span class="n">arg</span><span class="p">]);</span>
+ <span class="p">}</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">help_</span><span class="p">)</span> <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="s">""</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">arg</span><span class="p">;</span>
+ <span class="p">}</span>
+
+
+ <span class="k">friend</span> <span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="n">os</span><span class="p">,</span> <span class="k">const</span> <span class="n">options</span><span class="o">&</span> <span class="n">op</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"usage: "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">prog_</span> <span class="o"><<</span> <span class="s">" [options]"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"options:"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">opts</span><span class="o">::</span><span class="n">const_iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">op</span><span class="p">.</span><span class="n">opts_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i</span> <span class="o"><</span> <span class="n">op</span><span class="p">.</span><span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="o">**</span><span class="n">i</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">return</span> <span class="n">os</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">class</span> <span class="nc">option</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">option</span><span class="p">(</span><span class="kt">char</span> <span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">l</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">d</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">v</span><span class="p">)</span> <span class="o">:</span>
+ <span class="n">short_</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">"-"</span><span class="p">)</span> <span class="o">+</span> <span class="n">s</span><span class="p">),</span> <span class="n">long_</span><span class="p">(</span><span class="s">"--"</span> <span class="o">+</span> <span class="n">l</span><span class="p">),</span> <span class="n">desc_</span><span class="p">(</span><span class="n">d</span><span class="p">),</span> <span class="n">var_</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="p">{}</span>
+ <span class="k">virtual</span> <span class="o">~</span><span class="n">option</span><span class="p">()</span> <span class="p">{}</span>
+
+ <span class="k">virtual</span> <span class="kt">bool</span> <span class="n">parse</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">,</span> <span class="kt">int</span> <span class="o">&</span><span class="n">i</span><span class="p">)</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="nf">print_default</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span><span class="p">)</span> <span class="k">const</span> <span class="p">{}</span>
+
+ <span class="k">friend</span> <span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="n">os</span><span class="p">,</span> <span class="k">const</span> <span class="n">option</span><span class="o">&</span> <span class="n">op</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">" "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">short_</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="n">os</span> <span class="o"><<</span> <span class="s">" "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">", "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">long_</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="n">os</span> <span class="o"><<</span> <span class="s">"="</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">" "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">desc_</span><span class="p">;</span>
+ <span class="n">op</span><span class="p">.</span><span class="n">print_default</span><span class="p">(</span><span class="n">os</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">os</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">short_</span><span class="p">,</span> <span class="n">long_</span><span class="p">,</span> <span class="n">desc_</span><span class="p">,</span> <span class="n">var_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span>
+ <span class="k">class</span> <span class="nc">option_value</span> <span class="o">:</span> <span class="k">public</span> <span class="n">option</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">option_value</span><span class="p">(</span><span class="n">T</span><span class="o">&</span> <span class="n">value</span><span class="p">,</span> <span class="kt">char</span> <span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">l</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">d</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">v</span><span class="p">)</span> <span class="o">:</span>
+ <span class="n">option</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">v</span><span class="p">),</span> <span class="n">value_</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">bool</span> <span class="n">parse</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">,</span> <span class="kt">int</span> <span class="o">&</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">arg</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">arg</span> <span class="o">==</span> <span class="n">short_</span> <span class="o">||</span> <span class="n">arg</span> <span class="o">==</span> <span class="n">long_</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o"><</span> <span class="n">argc</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">set_value</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">argv</span><span class="p">[</span><span class="o">++</span><span class="n">i</span><span class="p">]);</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="s">"missing value for "</span> <span class="o">+</span> <span class="n">arg</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">arg</span><span class="p">.</span><span class="n">compare</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">long_</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span> <span class="n">long_</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">arg</span><span class="p">[</span><span class="n">long_</span><span class="p">.</span><span class="n">size</span><span class="p">()]</span> <span class="o">==</span> <span class="sc">'='</span> <span class="p">)</span> <span class="p">{</span>
+ <span class="n">set_value</span><span class="p">(</span><span class="n">long_</span><span class="p">,</span> <span class="n">arg</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">long_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="o">+</span><span class="mi">1</span><span class="p">));</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="n">print_default</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="n">os</span><span class="p">)</span> <span class="k">const</span> <span class="p">{</span> <span class="n">os</span> <span class="o"><<</span> <span class="s">" (default "</span> <span class="o"><<</span> <span class="n">value_</span> <span class="o"><<</span> <span class="s">")"</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">set_value</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">opt</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">istringstream</span> <span class="n">is</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="n">is</span> <span class="o">>></span> <span class="n">value_</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">is</span><span class="p">.</span><span class="n">fail</span><span class="p">()</span> <span class="o">||</span> <span class="n">is</span><span class="p">.</span><span class="n">bad</span><span class="p">())</span>
+ <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="s">"bad value for "</span> <span class="o">+</span> <span class="n">opt</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">T</span><span class="o">&</span> <span class="n">value_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">class</span> <span class="nc">option_flag</span><span class="o">:</span> <span class="k">public</span> <span class="n">option</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">option_flag</span><span class="p">(</span><span class="kt">bool</span><span class="o">&</span> <span class="n">flag</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">l</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">d</span><span class="p">)</span> <span class="o">:</span>
+ <span class="n">option</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="s">""</span><span class="p">),</span> <span class="n">flag_</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
+ <span class="p">{</span> <span class="n">flag_</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">bool</span> <span class="n">parse</span><span class="p">(</span><span class="kt">int</span> <span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">,</span> <span class="kt">int</span> <span class="o">&</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">short_</span> <span class="o">||</span> <span class="n">argv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">long_</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">flag_</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="kt">bool</span> <span class="o">&</span><span class="n">flag_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">option</span><span class="o">*></span> <span class="n">opts</span><span class="p">;</span>
+
+ <span class="kt">int</span> <span class="n">argc_</span><span class="p">;</span>
+ <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv_</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">prog_</span><span class="p">;</span>
+ <span class="n">opts</span> <span class="n">opts_</span><span class="p">;</span>
+ <span class="kt">bool</span> <span class="n">help_</span><span class="p">;</span>
+<span class="p">};</span>
+<span class="p">}</span>
+
+<span class="cp">#endif </span><span class="c1">// OPTIONS_HPP</span>
+</pre></div>
+
+<p><a href="options.hpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp
new file mode 100755
index 0000000..649716b
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp
@@ -0,0 +1,67 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+using proton::source_options;
+
+class browser : public proton::messaging_handler {
+ private:
+ proton::url url;
+
+ public:
+ browser(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ proton::connection conn = c.connect(url);
+ source_options browsing = source_options().distribution_mode(proton::source::COPY);
+ conn.open_receiver(url.path(), proton::receiver_options().source(browsing));
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+
+ browser b(url);
+ proton::default_container(b).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html
new file mode 100644
index 0000000..6839a49
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>queue_browser.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>queue_browser.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>queue_browser.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">browser</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">browser</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">source_options</span> <span class="n">browsing</span> <span class="o">=</span> <span class="n">source_options</span><span class="p">().</span><span class="n">distribution_mode</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source</span><span class="o">::</span><span class="n">COPY</span><span class="p">);</span>
+ <span class="n">conn</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">(),</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">browsing</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+
+ <span class="n">browser</span> <span class="n">b</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">b</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="queue_browser.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp
new file mode 100755
index 0000000..c7a63d9
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+namespace {
+
+ // Example custom function to configure an AMQP filter,
+ // specifically an APACHE.ORG:SELECTOR
+ // (http://www.amqp.org/specification/1.0/filters)
+
+ void set_filter(proton::source_options &opts, const std::string& selector_str) {
+ proton::source::filter_map map;
+ proton::symbol filter_key("selector");
+ proton::value filter_value;
+ // The value is a specific AMQP "described type": binary string with symbolic descriptor
+ proton::codec::encoder enc(filter_value);
+ enc << proton::codec::start::described()
+ << proton::symbol("apache.org:selector-filter:string")
+ << proton::binary(selector_str)
+ << proton::codec::finish();
+ // In our case, the map has this one element
+ map[filter_key] = filter_value;
+ opts.filters(map);
+ }
+}
+
+
+class selected_recv : public proton::messaging_handler {
+ private:
+ proton::url url;
+
+ public:
+ selected_recv(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ proton::source_options opts;
+ set_filter(opts, "colour = 'green'");
+ proton::connection conn = c.connect(url);
+ conn.open_receiver(url.path(), proton::receiver_options().source(opts));
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+
+ selected_recv recv(url);
+ proton::default_container(recv).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html
new file mode 100644
index 0000000..7d1b711
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>selected_recv.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>selected_recv.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>selected_recv.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+ <span class="c1">// Example custom function to configure an AMQP filter,</span>
+ <span class="c1">// specifically an APACHE.ORG:SELECTOR</span>
+ <span class="c1">// (http://www.amqp.org/specification/1.0/filters)</span>
+
+ <span class="kt">void</span> <span class="n">set_filter</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span> <span class="o">&</span><span class="n">opts</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">selector_str</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source</span><span class="o">::</span><span class="n">filter_map</span> <span class="n">map</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span> <span class="n">filter_key</span><span class="p">(</span><span class="s">"selector"</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">filter_value</span><span class="p">;</span>
+ <span class="c1">// The value is a specific AMQP "described type": binary string with symbolic descriptor</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">enc</span><span class="p">(</span><span class="n">filter_value</span><span class="p">);</span>
+ <span class="n">enc</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">described</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span><span class="p">(</span><span class="s">"apache.org:selector-filter:string"</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">binary</span><span class="p">(</span><span class="n">selector_str</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="c1">// In our case, the map has this one element</span>
+ <span class="n">map</span><span class="p">[</span><span class="n">filter_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">filter_value</span><span class="p">;</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">filters</span><span class="p">(</span><span class="n">map</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+
+<span class="k">class</span> <span class="nc">selected_recv</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">selected_recv</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source_options</span> <span class="n">opts</span><span class="p">;</span>
+ <span class="n">set_filter</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="s">"colour = 'green'"</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">conn</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">(),</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">opts</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+
+ <span class="n">selected_recv</span> <span class="n">recv</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">recv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="selected_recv.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp
new file mode 100755
index 0000000..ec24f9f
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/tracker.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+#include <map>
+#include <string>
+#include <cctype>
+
+#include "fake_cpp11.hpp"
+
+class server : public proton::messaging_handler {
+ private:
+ typedef std::map<std::string, proton::sender> sender_map;
+ proton::url url;
+ proton::connection connection;
+ sender_map senders;
+
+ public:
+ server(const std::string &u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ connection = c.connect(url);
+ connection.open_receiver(url.path());
+
+ std::cout << "server connected to " << url << std::endl;
+ }
+
+ std::string to_upper(const std::string &s) {
+ std::string uc(s);
+ size_t l = uc.size();
+ for (size_t i=0; i<l; i++)
+ uc[i] = static_cast<char>(std::toupper(uc[i]));
+ return uc;
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << "Received " << m.body() << std::endl;
+
+ std::string reply_to = m.reply_to();
+ proton::message reply;
+
+ reply.to(reply_to);
+ reply.body(to_upper(proton::get<std::string>(m.body())));
+ reply.correlation_id(m.correlation_id());
+
+ if (!senders[reply_to]) {
+ senders[reply_to] = connection.open_sender(reply_to);
+ }
+
+ senders[reply_to].send(reply);
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("amqp://0.0.0.0:5672/examples");
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen on URL", "URL");
+
+ try {
+ opts.parse();
+
+ server srv(address);
+ proton::default_container(srv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[10/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html.in
new file mode 100644
index 0000000..e540fa8
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html.in
@@ -0,0 +1,224 @@
+
+<h1>broker.hpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#ifndef BROKER_HPP</span>
+<span class="cp">#define BROKER_HPP</span>
+
+
+
+<span class="c1">/// @file</span>
+<span class="c1">///</span>
+<span class="c1">/// Common code used by different broker examples.</span>
+<span class="c1">///</span>
+<span class="c1">/// The examples add functionality as needed, this helps to make it</span>
+<span class="c1">/// easier to see the important differences between the examples.</span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/message.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sasl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/target_options.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><deque></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><list></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+
+<span class="c1">/// A simple implementation of a queue.</span>
+<span class="k">class</span> <span class="nc">queue</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queue</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">dynamic</span> <span class="o">=</span> <span class="nb">false</span><span class="p">)</span> <span class="o">:</span> <span class="n">name_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">dynamic_</span><span class="p">(</span><span class="n">dynamic</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">name_</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">subscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Return true if queue can be deleted.</span>
+ <span class="kt">bool</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="k">return</span> <span class="p">(</span><span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dynamic_</span> <span class="o">||</span> <span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">publish</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">dispatch</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">dispatch</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">deliver_to</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="p">{}</span>
+ <span class="p">}</span>
+
+ <span class="kt">bool</span> <span class="n">deliver_to</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Deliver to single sender if supplied, else all consumers</span>
+ <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="n">s</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">count</span><span class="p">)</span> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+
+ <span class="kt">bool</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="n">sender_list</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">s</span> <span class="o">&&</span> <span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="o">&*</span><span class="n">it</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">while</span> <span class="p">(</span><span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="o">-></span><span class="n">credit</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">&</span> <span class="n">m</span> <span class="o">=</span> <span class="n">messages_</span><span class="p">.</span><span class="n">front</span><span class="p">();</span>
+
+ <span class="n">s</span><span class="o">-></span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">pop_front</span><span class="p">();</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">--</span><span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">it</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">deque</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">></span> <span class="n">message_queue</span><span class="p">;</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_list</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name_</span><span class="p">;</span>
+ <span class="kt">bool</span> <span class="n">dynamic_</span><span class="p">;</span>
+ <span class="n">message_queue</span> <span class="n">messages_</span><span class="p">;</span>
+ <span class="n">sender_list</span> <span class="n">consumers_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// A collection of queues and queue factory, used by a broker.</span>
+<span class="k">class</span> <span class="nc">queues</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queues</span><span class="p">()</span> <span class="o">:</span> <span class="n">next_id_</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+ <span class="k">virtual</span> <span class="o">~</span><span class="n">queues</span><span class="p">()</span> <span class="p">{}</span>
+
+ <span class="c1">// Get or create a queue.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">get</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">address</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"empty queue name"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">queue</span><span class="o">*&</span> <span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">address</span><span class="p">];</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">q</span><span class="p">)</span> <span class="n">q</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Create a dynamic queue with a unique name.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">dynamic</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">os</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">"q"</span> <span class="o"><<</span> <span class="n">next_id_</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">queue</span> <span class="o">*</span><span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">()]</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="nb">true</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Delete the named queue</span>
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="n">erase</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">delete</span> <span class="n">queues_</span><span class="p">[</span><span class="n">name</span><span class="p">];</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">queue</span> <span class="o">*></span> <span class="n">queue_map</span><span class="p">;</span>
+ <span class="n">queue_map</span> <span class="n">queues_</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">next_id_</span><span class="p">;</span> <span class="c1">// Use to generate unique queue IDs.</span>
+<span class="p">};</span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/config.hpp></span><span class="cp"></span>
+
+
+<span class="k">class</span> <span class="nc">broker_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">broker_handler</span><span class="p">(</span><span class="n">queues</span><span class="o">&</span> <span class="n">qs</span><span class="p">)</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">(</span><span class="n">qs</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Connection from user: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">sasl</span><span class="p">().</span><span class="n">user</span><span class="p">()</span> <span class="o"><<</span> <span class="s">" (mechanism: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">sasl</span><span class="p">().</span><span class="n">mech</span><span class="p">()</span> <span class="o"><<</span> <span class="s">")"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source</span> <span class="n">src</span><span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">source</span><span class="p">());</span>
+ <span class="n">queue</span> <span class="o">&</span><span class="n">q</span> <span class="o">=</span> <span class="n">src</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">?</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">address</span><span class="p">());</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">())));</span>
+ <span class="n">q</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker outgoing link from "</span> <span class="o"><<</span> <span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">receiver</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">.</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">receiver</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">target</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">target_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">address</span><span class="p">)));</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker incoming link to "</span> <span class="o"><<</span> <span class="n">address</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">lnk</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">lnk</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">lnk</span><span class="p">))</span> <span class="p">{</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">c</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">());</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_error</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker client disconnect: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">error</span><span class="p">().</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_error</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">error_condition</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="s">"broker error: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">connection</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender_range</span> <span class="n">sr</span> <span class="o">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">senders</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">sr</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">sr</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="o">-></span><span class="n">active</span><span class="p">())</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="o">*</span><span class="n">i</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">dispatch</span><span class="p">(</span><span class="o">&</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">publish</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="n">queues</span><span class="o">&</span> <span class="n">queues_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="cp">#endif </span><span class="c1">// BROKER_HPP</span>
+</pre></div>
+
+<p><a href="broker.hpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp
new file mode 100644
index 0000000..dd22ccd
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp
@@ -0,0 +1,107 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/connection.hpp>
+#include <proton/tracker.hpp>
+#include <proton/source_options.hpp>
+
+#include <iostream>
+#include <vector>
+
+#include "fake_cpp11.hpp"
+
+using proton::receiver_options;
+using proton::source_options;
+
+class client : public proton::messaging_handler {
+ private:
+ std::string url;
+ std::vector<std::string> requests;
+ proton::sender sender;
+ proton::receiver receiver;
+
+ public:
+ client(const std::string &u, const std::vector<std::string>& r) : url(u), requests(r) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ sender = c.open_sender(url);
+ // Create a receiver requesting a dynamically created queue
+ // for the message source.
+ receiver_options opts = receiver_options().source(source_options().dynamic(true));
+ receiver = sender.connection().open_receiver("", opts);
+ }
+
+ void send_request() {
+ proton::message req;
+ req.body(requests.front());
+ req.reply_to(receiver.source().address());
+ sender.send(req);
+ }
+
+ void on_receiver_open(proton::receiver &) OVERRIDE {
+ send_request();
+ }
+
+ void on_message(proton::delivery &d, proton::message &response) OVERRIDE {
+ if (requests.empty()) return; // Spurious extra message!
+
+ std::cout << requests.front() << " => " << response.body() << std::endl;
+ requests.erase(requests.begin());
+
+ if (!requests.empty()) {
+ send_request();
+ } else {
+ d.connection().close();
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string url("127.0.0.1:5672/examples");
+ example::options opts(argc, argv);
+
+ opts.add_value(url, 'a', "address", "connect and send to URL", "URL");
+
+ try {
+ opts.parse();
+
+ std::vector<std::string> requests;
+ requests.push_back("Twas brillig, and the slithy toves");
+ requests.push_back("Did gire and gymble in the wabe.");
+ requests.push_back("All mimsy were the borogroves,");
+ requests.push_back("And the mome raths outgrabe.");
+
+ client c(url, requests);
+ proton::default_container(c).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html.in
new file mode 100644
index 0000000..eb97389
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html.in
@@ -0,0 +1,91 @@
+
+<h1>client.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><vector></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">client</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">requests</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">sender</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="n">receiver</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">client</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">u</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">>&</span> <span class="n">r</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">requests</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="c1">// Create a receiver requesting a dynamically created queue</span>
+ <span class="c1">// for the message source.</span>
+ <span class="n">receiver_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">receiver_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">source_options</span><span class="p">().</span><span class="n">dynamic</span><span class="p">(</span><span class="nb">true</span><span class="p">));</span>
+ <span class="n">receiver</span> <span class="o">=</span> <span class="n">sender</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">open_receiver</span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="n">opts</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">send_request</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">req</span><span class="p">;</span>
+ <span class="n">req</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">requests</span><span class="p">.</span><span class="n">front</span><span class="p">());</span>
+ <span class="n">req</span><span class="p">.</span><span class="n">reply_to</span><span class="p">(</span><span class="n">receiver</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">());</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">send_request</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">response</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">requests</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="k">return</span><span class="p">;</span> <span class="c1">// Spurious extra message!</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">requests</span><span class="p">.</span><span class="n">front</span><span class="p">()</span> <span class="o"><<</span> <span class="s">" => "</span> <span class="o"><<</span> <span class="n">response</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">requests</span><span class="p">.</span><span class="n">begin</span><span class="p">());</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">requests</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">send_request</span><span class="p">();</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"connect and send to URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">requests</span><span class="p">;</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"Twas brillig, and the slithy toves"</span><span class="p">);</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"Did gire and gymble in the wabe."</span><span class="p">);</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"All mimsy were the borogroves,"</span><span class="p">);</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"And the mome raths outgrabe."</span><span class="p">);</span>
+
+ <span class="n">client</span> <span class="n">c</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">requests</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">c</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="client.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp
new file mode 100644
index 0000000..f9935a8
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp
@@ -0,0 +1,76 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/connection_options.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/transport.hpp>
+
+#include <iostream>
+
+using proton::connection_options;
+
+#include "fake_cpp11.hpp"
+
+class handler_2 : public proton::messaging_handler {
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "connection events going to handler_2" << std::endl;
+ std::cout << "connection max_frame_size: " << c.max_frame_size() <<
+ ", idle timeout: " << c.idle_timeout() << std::endl;
+ c.close();
+ }
+};
+
+class main_handler : public proton::messaging_handler {
+ private:
+ std::string url;
+ handler_2 conn_handler;
+
+ public:
+ main_handler(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ // Connection options for this connection. Merged with and overriding the container's
+ // client_connection_options() settings.
+ c.connect(url, connection_options().handler(conn_handler).max_frame_size(2468));
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "unexpected connection event on main handler" << std::endl;
+ c.close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+ main_handler handler(url);
+ proton::default_container container(handler);
+ // Global connection options for future connections on container.
+ container.client_connection_options(connection_options().max_frame_size(12345).idle_timeout(proton::duration(15000)));
+ container.run();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html.in
new file mode 100644
index 0000000..e363d82
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html.in
@@ -0,0 +1,60 @@
+
+<h1>connection_options.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">;</span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">handler_2</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"connection events going to handler_2"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"connection max_frame_size: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">max_frame_size</span><span class="p">()</span> <span class="o"><<</span>
+ <span class="s">", idle timeout: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">idle_timeout</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="k">class</span> <span class="nc">main_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">handler_2</span> <span class="n">conn_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">main_handler</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// Connection options for this connection. Merged with and overriding the container's</span>
+ <span class="c1">// client_connection_options() settings.</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">connection_options</span><span class="p">().</span><span class="n">handler</span><span class="p">(</span><span class="n">conn_handler</span><span class="p">).</span><span class="n">max_frame_size</span><span class="p">(</span><span class="mi">2468</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"unexpected connection event on main handler"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+ <span class="n">main_handler</span> <span class="n">handler</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span> <span class="n">container</span><span class="p">(</span><span class="n">handler</span><span class="p">);</span>
+ <span class="c1">// Global connection options for future connections on container.</span>
+ <span class="n">container</span><span class="p">.</span><span class="n">client_connection_options</span><span class="p">(</span><span class="n">connection_options</span><span class="p">().</span><span class="n">max_frame_size</span><span class="p">(</span><span class="mi">12345</span><span class="p">).</span><span class="n">idle_timeout</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">duration</span><span class="p">(</span><span class="mi">15000</span><span class="p">)));</span>
+ <span class="n">container</span><span class="p">.</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="connection_options.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp
new file mode 100644
index 0000000..edbc8b6
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp
@@ -0,0 +1,91 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/link.hpp>
+#include <proton/value.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class direct_recv : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+ uint64_t expected;
+ uint64_t received;
+
+ public:
+ direct_recv(const std::string &s, int c) : url(s), expected(c), received(0) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url);
+ std::cout << "direct_recv listening on " << url << std::endl;
+ }
+
+ void on_message(proton::delivery &d, proton::message &msg) OVERRIDE {
+ if (proton::coerce<uint64_t>(msg.id()) < received) {
+ return; // Ignore duplicate
+ }
+
+ if (expected == 0 || received < expected) {
+ std::cout << msg.body() << std::endl;
+ received++;
+ }
+
+ if (received == expected) {
+ d.receiver().close();
+ d.connection().close();
+ listener.stop();
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen and receive on URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "receive COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ direct_recv recv(address, message_count);
+ proton::default_container(recv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html.in
new file mode 100644
index 0000000..b02926a
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp.html.in
@@ -0,0 +1,75 @@
+
+<h1>direct_recv.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/link.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">direct_recv</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">expected</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">received</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">direct_recv</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">expected</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">received</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"direct_recv listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">msg</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">coerce</span><span class="o"><</span><span class="kt">uint64_t</span><span class="o">></span><span class="p">(</span><span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">())</span> <span class="o"><</span> <span class="n">received</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span><span class="p">;</span> <span class="c1">// Ignore duplicate</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">received</span> <span class="o"><</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">received</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen and receive on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"receive COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">direct_recv</span> <span class="n">recv</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">recv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="direct_recv.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp
new file mode 100644
index 0000000..d8427b7
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp
@@ -0,0 +1,101 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/value.hpp>
+#include <proton/tracker.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class simple_send : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+ int sent;
+ int confirmed;
+ int total;
+
+ public:
+ simple_send(const std::string &s, int c) : url(s), sent(0), confirmed(0), total(c) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url);
+ std::cout << "direct_send listening on " << url << std::endl;
+ }
+
+ void on_sendable(proton::sender &sender) OVERRIDE {
+ while (sender.credit() && sent < total) {
+ proton::message msg;
+ std::map<std::string, int> m;
+ m["sequence"] = sent + 1;
+
+ msg.id(sent + 1);
+ msg.body(m);
+
+ sender.send(msg);
+ sent++;
+ }
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ confirmed++;
+
+ if (confirmed == total) {
+ std::cout << "all messages confirmed" << std::endl;
+ t.connection().close();
+ listener.stop();
+ }
+ }
+
+ void on_transport_close(proton::transport &) OVERRIDE {
+ sent = confirmed;
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen and send on URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "send COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ simple_send send(address, message_count);
+ proton::default_container(send).run();
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[08/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html.in
new file mode 100644
index 0000000..1cb6e80
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp.html.in
@@ -0,0 +1,217 @@
+
+<h1>flow_control.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/listener.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+<span class="kt">bool</span> <span class="n">verbose</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+
+<span class="kt">void</span> <span class="nf">verify</span><span class="p">(</span><span class="kt">bool</span> <span class="n">success</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">msg</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">success</span><span class="p">)</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"example failure:"</span> <span class="o">+</span> <span class="n">msg</span><span class="p">);</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"success: "</span> <span class="o"><<</span> <span class="n">msg</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="p">}</span>
+
+<span class="c1">// flow_sender manages the incoming connection and acts as the message sender.</span>
+<span class="k">class</span> <span class="nc">flow_sender</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="kt">int</span> <span class="n">available</span><span class="p">;</span> <span class="c1">// Number of messages the sender may send assuming sufficient credit.</span>
+ <span class="kt">int</span> <span class="n">sequence</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">flow_sender</span><span class="p">()</span> <span class="o">:</span> <span class="n">available</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">sequence</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_sender in </span><span class="se">\"</span><span class="s">on_sendable</span><span class="se">\"</span><span class="s"> with credit "</span> <span class="o"><<</span> <span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="s">" and "</span> <span class="o"><<</span> <span class="n">available</span> <span class="o"><<</span> <span class="s">" available messages"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="n">sequence</span><span class="p">;</span> <span class="n">available</span> <span class="o">&&</span> <span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">mbody</span><span class="p">;</span>
+ <span class="n">mbody</span> <span class="o"><<</span> <span class="s">"flow_sender message "</span> <span class="o"><<</span> <span class="n">sequence</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">(</span><span class="n">mbody</span><span class="p">.</span><span class="n">str</span><span class="p">());</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">available</span><span class="o">--</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_drain_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_sender in </span><span class="se">\"</span><span class="s">on_drain_start</span><span class="se">\"</span><span class="s"> with credit "</span> <span class="o"><<</span> <span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="s">" making an internal call to </span><span class="se">\"</span><span class="s">on_sendble</span><span class="se">\"</span><span class="s">"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">on_sendable</span><span class="p">(</span><span class="n">s</span><span class="p">);</span> <span class="c1">// send as many as we can</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">return_credit</span><span class="p">();</span> <span class="c1">// return the rest</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">set_available</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span> <span class="n">available</span> <span class="o">=</span> <span class="n">n</span><span class="p">;</span> <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="k">class</span> <span class="nc">flow_receiver</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="kt">int</span> <span class="n">stage</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">received</span><span class="p">;</span>
+ <span class="n">flow_sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">;</span>
+
+ <span class="n">flow_receiver</span><span class="p">(</span><span class="n">flow_sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="o">:</span> <span class="n">stage</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">sender</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">example_setup</span><span class="p">(</span><span class="kt">int</span> <span class="n">n</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">received</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">set_available</span><span class="p">(</span><span class="n">n</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">run_stage</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">r</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">caller</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Serialize the progression of the flow control examples.</span>
+ <span class="k">switch</span> <span class="p">(</span><span class="n">stage</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">case</span> <span class="mi">0</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 1. Simple use of credit."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="c1">// TODO: add timeout callbacks, show no messages until credit.</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="mi">1</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
+ <span class="n">verify</span><span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="mi">2</span><span class="p">,</span> <span class="s">"Example 1: simple credit"</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 2. Use basic drain, sender has 3 </span><span class="se">\"</span><span class="s">immediate</span><span class="se">\"</span><span class="s"> messages."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span> <span class="c1">// ask for up to 5</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">drain</span><span class="p">();</span> <span class="c1">// but only use what's available</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="mi">2</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">caller</span> <span class="o">==</span> <span class="s">"on_message"</span><span class="p">)</span> <span class="k">return</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">caller</span> <span class="o">==</span> <span class="s">"on_receiver_drain_finish"</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Note that unused credit of 2 at sender is returned and is now 0.</span>
+ <span class="n">verify</span><span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="mi">3</span> <span class="o">&&</span> <span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"Example 2: basic drain"</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 3. Drain use with no credit."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">drain</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="n">verify</span><span class="p">(</span><span class="nb">false</span><span class="p">,</span> <span class="s">"example 2 run_stage"</span><span class="p">);</span>
+ <span class="k">return</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="mi">3</span><span class="o">:</span>
+ <span class="n">verify</span><span class="p">(</span><span class="n">caller</span> <span class="o">==</span> <span class="s">"on_receiver_drain_finish"</span> <span class="o">&&</span> <span class="n">received</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"Example 3: drain without credit"</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Example 4. Show using high(10)/low(3) watermark for 25 messages."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">example_setup</span><span class="p">(</span><span class="mi">25</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">case</span> <span class="mi">4</span><span class="o">:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">received</span> <span class="o"><</span> <span class="mi">25</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Top up credit as needed.</span>
+ <span class="kt">uint32_t</span> <span class="n">credit</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">credit</span> <span class="o"><=</span> <span class="mi">3</span><span class="p">)</span> <span class="p">{</span>
+ <span class="kt">uint32_t</span> <span class="n">new_credit</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
+ <span class="kt">uint32_t</span> <span class="n">remaining</span> <span class="o">=</span> <span class="mi">25</span> <span class="o">-</span> <span class="n">received</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">new_credit</span> <span class="o">></span> <span class="n">remaining</span><span class="p">)</span>
+ <span class="n">new_credit</span> <span class="o">=</span> <span class="n">remaining</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">new_credit</span> <span class="o">></span> <span class="n">credit</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">add_credit</span><span class="p">(</span><span class="n">new_credit</span> <span class="o">-</span> <span class="n">credit</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_receiver adding credit for "</span> <span class="o"><<</span> <span class="n">new_credit</span> <span class="o">-</span> <span class="n">credit</span>
+ <span class="o"><<</span> <span class="s">" messages"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="k">return</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">verify</span><span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="mi">25</span> <span class="o">&&</span> <span class="n">r</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="s">"Exmaple 4: high/low watermark"</span><span class="p">);</span>
+ <span class="n">r</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+
+ <span class="k">default</span><span class="o">:</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"run_stage sequencing error"</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">stage</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">r</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">run_stage</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="s">"on_receiver_open"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_receiver in </span><span class="se">\"</span><span class="s">on_message</span><span class="se">\"</span><span class="s"> with "</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="n">r</span><span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">());</span>
+ <span class="n">received</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">run_stage</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="s">"on_message"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_drain_finish</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">r</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">verbose</span><span class="p">)</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"flow_receiver in </span><span class="se">\"</span><span class="s">on_receiver_drain_finish</span><span class="se">\"</span><span class="s">"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">run_stage</span><span class="p">(</span><span class="n">r</span><span class="p">,</span> <span class="s">"on_receiver_drain_finish"</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">flow_control</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+ <span class="n">flow_sender</span> <span class="n">send_handler</span><span class="p">;</span>
+ <span class="n">flow_receiver</span> <span class="n">receive_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">flow_control</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">receive_handler</span><span class="p">(</span><span class="n">send_handler</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">().</span><span class="n">handler</span><span class="p">(</span><span class="n">send_handler</span><span class="p">));</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="p">.</span><span class="n">active</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// outbound connection</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="s">"flow_example"</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">handler</span><span class="p">(</span><span class="n">receive_handler</span><span class="p">).</span><span class="n">credit_window</span><span class="p">(</span><span class="mi">0</span><span class="p">));</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">quiet_arg</span><span class="p">(</span><span class="s">"-quiet"</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">></span> <span class="mi">2</span> <span class="o">&&</span> <span class="n">quiet_arg</span> <span class="o">==</span> <span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+ <span class="n">verbose</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to</span>
+ <span class="c1">// ourselves, not a broker.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:8888/examples"</span><span class="p">;</span>
+
+ <span class="n">flow_control</span> <span class="n">fc</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">fc</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="flow_control.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp
new file mode 100644
index 0000000..fa95af0
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp
@@ -0,0 +1,73 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+class hello_world : public proton::messaging_handler {
+ private:
+ proton::url url;
+
+ public:
+ hello_world(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container& c) OVERRIDE {
+ c.connect(url);
+ }
+
+ void on_connection_open(proton::connection& c) OVERRIDE {
+ c.open_receiver(url.path());
+ c.open_sender(url.path());
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ d.connection().close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+
+ hello_world hw(url);
+ proton::default_container(hw).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html.in
new file mode 100644
index 0000000..8b47462
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld.cpp.html.in
@@ -0,0 +1,57 @@
+
+<h1>helloworld.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">hello_world</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span><span class="o">&</span> <span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span><span class="o">&</span> <span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">());</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">());</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+
+ <span class="n">hello_world</span> <span class="n">hw</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hw</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="helloworld.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp
new file mode 100644
index 0000000..5421e62
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp
@@ -0,0 +1,79 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sender.hpp>
+#include <proton/tracker.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+class hello_world_direct : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+
+ public:
+ hello_world_direct(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url);
+ c.open_sender(url);
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ t.connection().close();
+ }
+
+ void on_connection_close(proton::connection&) OVERRIDE {
+ listener.stop();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ // Pick an "unusual" port since we are going to be talking to
+ // ourselves, not a broker.
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:8888/examples";
+
+ hello_world_direct hwd(url);
+ proton::default_container(hwd).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html.in
new file mode 100644
index 0000000..c9a02cb
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/helloworld_direct.cpp.html.in
@@ -0,0 +1,63 @@
+
+<h1>helloworld_direct.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">hello_world_direct</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world_direct</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span><span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to</span>
+ <span class="c1">// ourselves, not a broker.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:8888/examples"</span><span class="p">;</span>
+
+ <span class="n">hello_world_direct</span> <span class="n">hwd</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hwd</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="helloworld_direct.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/index.md
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/index.md b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/index.md
new file mode 100644
index 0000000..1245466
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/index.md
@@ -0,0 +1,30 @@
+
+# Proton C++ Examples
+
+## Example files
+
+ - [broker.cpp](broker.cpp.html)
+ - [broker.hpp](broker.hpp.html)
+ - [client.cpp](client.cpp.html)
+ - [connection_options.cpp](connection_options.cpp.html)
+ - [direct_recv.cpp](direct_recv.cpp.html)
+ - [direct_send.cpp](direct_send.cpp.html)
+ - [encode_decode.cpp](encode_decode.cpp.html)
+ - [fake_cpp11.hpp](fake_cpp11.hpp.html)
+ - [flow_control.cpp](flow_control.cpp.html)
+ - [helloworld.cpp](helloworld.cpp.html)
+ - [helloworld_direct.cpp](helloworld_direct.cpp.html)
+ - [options.hpp](options.hpp.html)
+ - [queue_browser.cpp](queue_browser.cpp.html)
+ - [selected_recv.cpp](selected_recv.cpp.html)
+ - [server.cpp](server.cpp.html)
+ - [server_direct.cpp](server_direct.cpp.html)
+ - [simple_recv.cpp](simple_recv.cpp.html)
+ - [simple_send.cpp](simple_send.cpp.html)
+ - [ssl.cpp](ssl.cpp.html)
+ - [ssl_client_cert.cpp](ssl_client_cert.cpp.html)
+
+## More information
+
+ - [README](https://github.com/apache/qpid-proton/tree/0.13.0/examples/cpp/README.hpp)
+ - [Source location](https://github.com/apache/qpid-proton/tree/0.13.0/examples/cpp)
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp
new file mode 100644
index 0000000..dab1bc2
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp
@@ -0,0 +1,175 @@
+#ifndef OPTIONS_HPP
+#define OPTIONS_HPP
+/*
+ * 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.
+ */
+
+#include <string>
+#include <sstream>
+#include <ostream>
+#include <vector>
+#include <stdexcept>
+
+namespace example {
+/** bad_option is thrown for option parsing errors */
+struct bad_option : public std::runtime_error {
+ bad_option(const std::string& s) : std::runtime_error(s) {}
+};
+
+/** Simple command-line option parser for example programs */
+class options {
+ public:
+
+ options(int argc, char const * const * argv) : argc_(argc), argv_(argv), prog_(argv[0]), help_() {
+ size_t slash = prog_.find_last_of("/\\");
+ if (slash != std::string::npos)
+ prog_ = prog_.substr(slash+1); // Extract prog name from path
+ add_flag(help_, 'h', "help", "Print the help message");
+ }
+
+ ~options() {
+ for (opts::iterator i = opts_.begin(); i != opts_.end(); ++i)
+ delete *i;
+ }
+
+ /** Updates value when parse() is called if option is present with a value. */
+ template<class T>
+ void add_value(T& value, char short_name, const std::string& long_name, const std::string& description, const std::string var) {
+ opts_.push_back(new option_value<T>(value, short_name, long_name, description, var));
+ }
+
+ /** Sets flag when parse() is called if option is present. */
+ void add_flag(bool& flag, char short_name, const std::string& long_name, const std::string& description) {
+ opts_.push_back(new option_flag(flag, short_name, long_name, description));
+ }
+
+ /** Parse the command line, return the index of the first non-option argument.
+ *@throws bad_option if there is a parsing error or unknown option.
+ */
+ int parse() {
+ int arg = 1;
+ for (; arg < argc_ && argv_[arg][0] == '-'; ++arg) {
+ opts::iterator i = opts_.begin();
+ while (i != opts_.end() && !(*i)->parse(argc_, argv_, arg))
+ ++i;
+ if (i == opts_.end())
+ throw bad_option(std::string("unknown option ") + argv_[arg]);
+ }
+ if (help_) throw bad_option("");
+ return arg;
+ }
+
+ /** Print a usage message */
+ friend std::ostream& operator<<(std::ostream& os, const options& op) {
+ os << std::endl << "usage: " << op.prog_ << " [options]" << std::endl;
+ os << std::endl << "options:" << std::endl;
+ for (opts::const_iterator i = op.opts_.begin(); i < op.opts_.end(); ++i)
+ os << **i << std::endl;
+ return os;
+ }
+
+ private:
+ class option {
+ public:
+ option(char s, const std::string& l, const std::string& d, const std::string v) :
+ short_(std::string("-") + s), long_("--" + l), desc_(d), var_(v) {}
+ virtual ~option() {}
+
+ virtual bool parse(int argc, char const * const * argv, int &i) = 0;
+ virtual void print_default(std::ostream&) const {}
+
+ friend std::ostream& operator<<(std::ostream& os, const option& op) {
+ os << " " << op.short_;
+ if (!op.var_.empty()) os << " " << op.var_;
+ os << ", " << op.long_;
+ if (!op.var_.empty()) os << "=" << op.var_;
+ os << std::endl << " " << op.desc_;
+ op.print_default(os);
+ return os;
+ }
+
+ protected:
+ std::string short_, long_, desc_, var_;
+ };
+
+ template <class T>
+ class option_value : public option {
+ public:
+ option_value(T& value, char s, const std::string& l, const std::string& d, const std::string& v) :
+ option(s, l, d, v), value_(value) {}
+
+ bool parse(int argc, char const * const * argv, int &i) {
+ std::string arg(argv[i]);
+ if (arg == short_ || arg == long_) {
+ if (i < argc-1) {
+ set_value(arg, argv[++i]);
+ return true;
+ } else {
+ throw bad_option("missing value for " + arg);
+ }
+ }
+ if (arg.compare(0, long_.size(), long_) == 0 && arg[long_.size()] == '=' ) {
+ set_value(long_, arg.substr(long_.size()+1));
+ return true;
+ }
+ return false;
+ }
+
+ virtual void print_default(std::ostream& os) const { os << " (default " << value_ << ")"; }
+
+ void set_value(const std::string& opt, const std::string& s) {
+ std::istringstream is(s);
+ is >> value_;
+ if (is.fail() || is.bad())
+ throw bad_option("bad value for " + opt + ": " + s);
+ }
+
+ private:
+ T& value_;
+ };
+
+ class option_flag: public option {
+ public:
+ option_flag(bool& flag, const char s, const std::string& l, const std::string& d) :
+ option(s, l, d, ""), flag_(flag)
+ { flag_ = false; }
+
+ bool parse(int /*argc*/, char const * const * argv, int &i) {
+ if (argv[i] == short_ || argv[i] == long_) {
+ flag_ = true;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ private:
+ bool &flag_;
+ };
+
+ typedef std::vector<option*> opts;
+
+ int argc_;
+ char const * const * argv_;
+ std::string prog_;
+ opts opts_;
+ bool help_;
+};
+}
+
+#endif // OPTIONS_HPP
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[17/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html
new file mode 100644
index 0000000..00b739a
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>db_common.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>db_common.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>db_common.py</h1>
+<div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">Queue</span>
+<span class="k">except</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">queue</span> <span class="kn">as</span> <span class="nn">Queue</span>
+
+<span class="kn">import</span> <span class="nn">sqlite3</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="k">class</span> <span class="nc">Db</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">injector</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span> <span class="o">=</span> <span class="n">injector</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span> <span class="o">=</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Queue</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">running</span> <span class="o">=</span> <span class="bp">True</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">daemon</span><span class="o">=</span><span class="bp">True</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_close</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reset</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_load</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_id</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_insert</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delete</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">_reset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignored</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignored</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">running</span> <span class="o">=</span> <span class="bp">False</span>
+
+ <span class="k">def</span> <span class="nf">_get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records ORDER BY id DESC"</span><span class="p">)</span>
+ <span class="n">row</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">row</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">position</span><span class="p">:</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records WHERE id > ? ORDER BY id"</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">position</span><span class="p">,))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records ORDER BY id"</span><span class="p">)</span>
+ <span class="k">while</span> <span class="ow">not</span> <span class="n">records</span><span class="o">.</span><span class="n">full</span><span class="p">():</span>
+ <span class="n">row</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">row</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span>
+ <span class="n">records</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">row</span><span class="p">))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">break</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="nb">id</span><span class="p">:</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"INSERT INTO records(id, description) VALUES (?, ?)"</span><span class="p">,</span> <span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"INSERT INTO records(description) VALUES (?)"</span><span class="p">,</span> <span class="p">(</span><span class="n">data</span><span class="p">,))</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"DELETE FROM records WHERE id=?"</span><span class="p">,</span> <span class="p">(</span><span class="nb">id</span><span class="p">,))</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span>
+ <span class="k">with</span> <span class="n">conn</span><span class="p">:</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">running</span><span class="p">:</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="n">f</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
+ <span class="k">except</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Empty</span><span class="p">:</span> <span class="k">pass</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="db_common.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py
new file mode 100755
index 0000000..04770ce
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import sqlite3
+import sys
+
+if len(sys.argv) < 3:
+ print("Usage: %s [init|insert|list] db" % sys.argv[0])
+else:
+ conn = sqlite3.connect(sys.argv[2])
+ with conn:
+ if sys.argv[1] == "init":
+ conn.execute("DROP TABLE IF EXISTS records")
+ conn.execute("CREATE TABLE records(id INTEGER PRIMARY KEY AUTOINCREMENT, description TEXT)")
+ conn.commit()
+ elif sys.argv[1] == "list":
+ cursor = conn.cursor()
+ cursor.execute("SELECT * FROM records")
+ rows = cursor.fetchall()
+ for r in rows:
+ print(r)
+ elif sys.argv[1] == "insert":
+ while True:
+ l = sys.stdin.readline()
+ if not l: break
+ conn.execute("INSERT INTO records(description) VALUES (?)", (l.rstrip(),))
+ conn.commit()
+ else:
+ print("Unrecognised command: %s" % sys.argv[1])
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html
new file mode 100644
index 0000000..5213b16
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html
@@ -0,0 +1,176 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>db_ctrl.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>db_ctrl.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>db_ctrl.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">sqlite3</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o"><</span> <span class="mi">3</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Usage: </span><span class="si">%s</span><span class="s2"> [init|insert|list] db"</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+<span class="k">else</span><span class="p">:</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+ <span class="k">with</span> <span class="n">conn</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"init"</span><span class="p">:</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"DROP TABLE IF EXISTS records"</span><span class="p">)</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"CREATE TABLE records(id INTEGER PRIMARY KEY AUTOINCREMENT, description TEXT)"</span><span class="p">)</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"list"</span><span class="p">:</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
+ <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records"</span><span class="p">)</span>
+ <span class="n">rows</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"insert"</span><span class="p">:</span>
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="n">l</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="p">:</span> <span class="k">break</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"INSERT INTO records(description) VALUES (?)"</span><span class="p">,</span> <span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(),))</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Unrecognised command: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+</pre></div>
+
+<p><a href="db_ctrl.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py
new file mode 100755
index 0000000..8c79049
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton.handlers import MessagingHandler
+from proton.reactor import ApplicationEvent, Container, EventInjector
+from db_common import Db
+
+class Recv(MessagingHandler):
+ def __init__(self, url, count):
+ super(Recv, self).__init__(auto_accept=False)
+ self.url = url
+ self.delay = 0
+ self.last_id = None
+ self.expected = count
+ self.received = 0
+ self.accepted = 0
+ self.db = Db("dst_db", EventInjector())
+
+ def on_start(self, event):
+ event.container.selectable(self.db.injector)
+ e = ApplicationEvent("id_loaded")
+ e.container = event.container
+ self.db.get_id(e)
+
+ def on_id_loaded(self, event):
+ self.last_id = event.id
+ event.container.create_receiver(self.url)
+
+ def on_record_inserted(self, event):
+ self.accept(event.delivery)
+ self.accepted += 1
+ if self.accepted == self.expected:
+ event.connection.close()
+ self.db.close()
+
+ def on_message(self, event):
+ id = int(event.message.id)
+ if (not self.last_id) or id > self.last_id:
+ if self.received < self.expected:
+ self.received += 1
+ self.last_id = id
+ self.db.insert(id, event.message.body, ApplicationEvent("record_inserted", delivery=event.delivery))
+ print("inserted message %s" % id)
+ else:
+ self.release(event.delivery)
+ else:
+ self.accept(event.delivery)
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=0,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Recv(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html
new file mode 100644
index 0000000..546e756
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>db_recv.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>db_recv.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>db_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">ApplicationEvent</span><span class="p">,</span> <span class="n">Container</span><span class="p">,</span> <span class="n">EventInjector</span>
+<span class="kn">from</span> <span class="nn">db_common</span> <span class="kn">import</span> <span class="n">Db</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">delay</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">Db</span><span class="p">(</span><span class="s2">"dst_db"</span><span class="p">,</span> <span class="n">EventInjector</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">selectable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">injector</span><span class="p">)</span>
+ <span class="n">e</span> <span class="o">=</span> <span class="n">ApplicationEvent</span><span class="p">(</span><span class="s2">"id_loaded"</span><span class="p">)</span>
+ <span class="n">e</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_id_loaded</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">id</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_record_inserted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="nb">id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+ <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">id</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span><span class="p">:</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span> <span class="o">=</span> <span class="nb">id</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">,</span> <span class="n">ApplicationEvent</span><span class="p">(</span><span class="s2">"record_inserted"</span><span class="p">,</span> <span class="n">delivery</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">))</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"inserted message </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">id</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="db_recv.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py
new file mode 100755
index 0000000..c07dcc0
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+import time
+try:
+ import Queue
+except:
+ import queue as Queue
+
+
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import ApplicationEvent, Container, EventInjector
+from db_common import Db
+
+class Send(MessagingHandler):
+ def __init__(self, url, count):
+ super(Send, self).__init__()
+ self.url = url
+ self.delay = 0
+ self.sent = 0
+ self.confirmed = 0
+ self.load_count = 0
+ self.records = Queue.Queue(maxsize=50)
+ self.target = count
+ self.db = Db("src_db", EventInjector())
+
+ def keep_sending(self):
+ return self.target == 0 or self.sent < self.target
+
+ def on_start(self, event):
+ self.container = event.container
+ self.container.selectable(self.db.injector)
+ self.sender = self.container.create_sender(self.url)
+
+ def on_records_loaded(self, event):
+ if self.records.empty():
+ if event.subject == self.load_count:
+ print("Exhausted available data, waiting to recheck...")
+ # check for new data after 5 seconds
+ self.container.schedule(5, self)
+ else:
+ self.send()
+
+ def request_records(self):
+ if not self.records.full():
+ print("loading records...")
+ self.load_count += 1
+ self.db.load(self.records, event=ApplicationEvent("records_loaded", link=self.sender, subject=self.load_count))
+
+ def on_sendable(self, event):
+ self.send()
+
+ def send(self):
+ while self.sender.credit and not self.records.empty():
+ if not self.keep_sending(): return
+ record = self.records.get(False)
+ id = record['id']
+ self.sender.send(Message(id=id, durable=True, body=record['description']), tag=str(id))
+ self.sent += 1
+ print("sent message %s" % id)
+ self.request_records()
+
+ def on_settled(self, event):
+ id = int(event.delivery.tag)
+ self.db.delete(id)
+ print("settled message %s" % id)
+ self.confirmed += 1
+ if self.confirmed == self.target:
+ event.connection.close()
+ self.db.close()
+
+ def on_disconnected(self, event):
+ self.db.reset()
+ self.sent = self.confirmed
+
+ def on_timer_task(self, event):
+ print("Rechecking for data...")
+ self.request_records()
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=0,
+ help="number of messages to send; 0 sends indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Send(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html
new file mode 100644
index 0000000..9145112
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html
@@ -0,0 +1,239 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>db_send.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>db_send.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>db_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="k">try</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">Queue</span>
+<span class="k">except</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">queue</span> <span class="kn">as</span> <span class="nn">Queue</span>
+
+
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">ApplicationEvent</span><span class="p">,</span> <span class="n">Container</span><span class="p">,</span> <span class="n">EventInjector</span>
+<span class="kn">from</span> <span class="nn">db_common</span> <span class="kn">import</span> <span class="n">Db</span>
+
+<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">delay</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">load_count</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">records</span> <span class="o">=</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Queue</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">Db</span><span class="p">(</span><span class="s2">"src_db"</span><span class="p">,</span> <span class="n">EventInjector</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">keep_sending</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">selectable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">injector</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_records_loaded</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">subject</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_count</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Exhausted available data, waiting to recheck..."</span><span class="p">)</span>
+ <span class="c1"># check for new data after 5 seconds</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">request_records</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">full</span><span class="p">():</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"loading records..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">load_count</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="n">ApplicationEvent</span><span class="p">(</span><span class="s2">"records_loaded"</span><span class="p">,</span> <span class="n">link</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">load_count</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">keep_sending</span><span class="p">():</span> <span class="k">return</span>
+ <span class="n">record</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
+ <span class="nb">id</span> <span class="o">=</span> <span class="n">record</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="nb">id</span><span class="p">,</span> <span class="n">durable</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">record</span><span class="p">[</span><span class="s1">'description'</span><span class="p">]),</span> <span class="n">tag</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"sent message </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">id</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">request_records</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_settled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="nb">id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"settled message </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">id</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span>
+
+ <span class="k">def</span> <span class="nf">on_timer_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Rechecking for data..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">request_records</span><span class="p">()</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send; 0 sends indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="db_send.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py
new file mode 100755
index 0000000..1c6bf36
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Recv(MessagingHandler):
+ def __init__(self, url, count):
+ super(Recv, self).__init__()
+ self.url = url
+ self.expected = count
+ self.received = 0
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+
+ def on_message(self, event):
+ if event.message.id and event.message.id < self.received:
+ # ignore duplicate message
+ return
+ if self.expected == 0 or self.received < self.expected:
+ print(event.message.body)
+ self.received += 1
+ if self.received == self.expected:
+ event.receiver.close()
+ event.connection.close()
+ self.acceptor.close()
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Recv(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[15/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html
new file mode 100644
index 0000000..3fc25eb
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld_tornado.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>helloworld_tornado.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_tornado.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/index.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/index.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/index.html
new file mode 100644
index 0000000..6caef7d
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/index.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>Proton Python Examples - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li>Proton Python Examples</li></ul>
+
+ <div id="-middle-content">
+ <h1 id="proton-python-examples">Proton Python Examples</h1>
+
+<h2 id="example-files">Example files</h2>
+
+<ul>
+<li><a href="abstract_server.py.html">abstract_server.py</a></li>
+<li><a href="broker.py.html">broker.py</a></li>
+<li><a href="client.py.html">client.py</a></li>
+<li><a href="client_http.py.html">client_http.py</a></li>
+<li><a href="db_common.py.html">db_common.py</a></li>
+<li><a href="db_ctrl.py.html">db_ctrl.py</a></li>
+<li><a href="db_recv.py.html">db_recv.py</a></li>
+<li><a href="db_send.py.html">db_send.py</a></li>
+<li><a href="direct_recv.py.html">direct_recv.py</a></li>
+<li><a href="direct_send.py.html">direct_send.py</a></li>
+<li><a href="helloworld.py.html">helloworld.py</a></li>
+<li><a href="helloworld_blocking.py.html">helloworld_blocking.py</a></li>
+<li><a href="helloworld_direct.py.html">helloworld_direct.py</a></li>
+<li><a href="helloworld_direct_tornado.py.html">helloworld_direct_tornado.py</a></li>
+<li><a href="helloworld_tornado.py.html">helloworld_tornado.py</a></li>
+<li><a href="proton_server.py.html">proton_server.py</a></li>
+<li><a href="proton_tornado.py.html">proton_tornado.py</a></li>
+<li><a href="queue_browser.py.html">queue_browser.py</a></li>
+<li><a href="recurring_timer.py.html">recurring_timer.py</a></li>
+<li><a href="recurring_timer_tornado.py.html">recurring_timer_tornado.py</a></li>
+<li><a href="selected_recv.py.html">selected_recv.py</a></li>
+<li><a href="server.py.html">server.py</a></li>
+<li><a href="server_direct.py.html">server_direct.py</a></li>
+<li><a href="server_tx.py.html">server_tx.py</a></li>
+<li><a href="simple_recv.py.html">simple_recv.py</a></li>
+<li><a href="simple_send.py.html">simple_send.py</a></li>
+<li><a href="sync_client.py.html">sync_client.py</a></li>
+<li><a href="test_examples.py.html">test_examples.py</a></li>
+<li><a href="tx_recv.py.html">tx_recv.py</a></li>
+<li><a href="tx_recv_interactive.py.html">tx_recv_interactive.py</a></li>
+<li><a href="tx_send.py.html">tx_send.py</a></li>
+</ul>
+
+<h2 id="more-information">More information</h2>
+
+<ul>
+<li><a href="https://github.com/apache/qpid-proton/tree/0.13.0/examples/python/README">README</a></li>
+<li><a href="https://github.com/apache/qpid-proton/tree/0.13.0/examples/python">Source location</a></li>
+</ul>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py
new file mode 100755
index 0000000..9351f55
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py
@@ -0,0 +1,51 @@
+from __future__ import print_function
+#
+# 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.
+#
+
+from proton import Message
+from proton.reactor import Container
+from proton.handlers import MessagingHandler
+
+class Server(MessagingHandler):
+ def __init__(self, host, address):
+ super(Server, self).__init__()
+ self.container = Container(self)
+ self.conn = self.container.connect(host)
+ self.receiver = self.container.create_receiver(self.conn, address)
+ self.sender = self.container.create_sender(self.conn, None)
+
+ def on_message(self, event):
+ self.on_request(event.message.body, event.message.reply_to)
+
+ def on_connection_close(self, endpoint, error):
+ if error: print("Closed due to %s" % error)
+ self.conn.close()
+
+ def run(self):
+ self.container.run()
+
+ def send(self, response, reply_to):
+ msg = Message(body=response)
+ if self.sender:
+ msg.address = reply_to
+ self.sender.send(msg)
+
+ def on_request(self, request, reply_to):
+ pass
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html
new file mode 100644
index 0000000..15cbffe
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html
@@ -0,0 +1,199 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>proton_server.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>proton_server.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>proton_server.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="c1">#</span>
+<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
+<span class="c1"># or more contributor license agreements. See the NOTICE file</span>
+<span class="c1"># distributed with this work for additional information</span>
+<span class="c1"># regarding copyright ownership. The ASF licenses this file</span>
+<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
+<span class="c1"># "License"); you may not use this file except in compliance</span>
+<span class="c1"># with the License. You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
+<span class="c1"># software distributed under the License is distributed on an</span>
+<span class="c1"># "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
+<span class="c1"># KIND, either express or implied. See the License for the</span>
+<span class="c1"># specific language governing permissions and limitations</span>
+<span class="c1"># under the License.</span>
+<span class="c1">#</span>
+
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">on_request</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">error</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s2">"Closed due to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">error</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">):</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="n">response</span><span class="p">)</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">:</span>
+ <span class="n">msg</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">reply_to</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">):</span>
+ <span class="k">pass</span>
+</pre></div>
+
+<p><a href="proton_server.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py
new file mode 100755
index 0000000..f946b43
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+import tornado.ioloop
+from proton.reactor import Container as BaseContainer
+from proton.handlers import IOHandler
+
+class TornadoLoopHandler:
+
+ def __init__(self, loop=None, handler_base=None):
+ self.loop = loop or tornado.ioloop.IOLoop.instance()
+ self.io = handler_base or IOHandler()
+ self.count = 0
+
+ def on_reactor_init(self, event):
+ self.reactor = event.reactor
+
+ def on_reactor_quiesced(self, event):
+ event.reactor.yield_()
+
+ def on_unhandled(self, name, event):
+ event.dispatch(self.io)
+
+ def _events(self, sel):
+ events = self.loop.ERROR
+ if sel.reading:
+ events |= self.loop.READ
+ if sel.writing:
+ events |= self.loop.WRITE
+ return events
+
+ def _schedule(self, sel):
+ if sel.deadline:
+ self.loop.add_timeout(sel.deadline, lambda: self.expired(sel))
+
+ def _expired(self, sel):
+ sel.expired()
+
+ def _process(self):
+ self.reactor.process()
+ if not self.reactor.quiesced:
+ self.loop.add_callback(self._process)
+
+ def _callback(self, sel, events):
+ if self.loop.READ & events:
+ sel.readable()
+ if self.loop.WRITE & events:
+ sel.writable()
+ self._process()
+
+ def on_selectable_init(self, event):
+ sel = event.context
+ if sel.fileno() >= 0:
+ self.loop.add_handler(sel.fileno(), lambda fd, events: self._callback(sel, events), self._events(sel))
+ self._schedule(sel)
+ self.count += 1
+
+ def on_selectable_updated(self, event):
+ sel = event.context
+ if sel.fileno() > 0:
+ self.loop.update_handler(sel.fileno(), self._events(sel))
+ self._schedule(sel)
+
+ def on_selectable_final(self, event):
+ sel = event.context
+ if sel.fileno() > 0:
+ self.loop.remove_handler(sel.fileno())
+ sel.release()
+ self.count -= 1
+ if self.count == 0:
+ self.loop.add_callback(self._stop)
+
+ def _stop(self):
+ self.reactor.stop()
+ self.loop.stop()
+
+class Container(object):
+ def __init__(self, *handlers, **kwargs):
+ self.tornado_loop = kwargs.get('loop', tornado.ioloop.IOLoop.instance())
+ kwargs['global_handler'] = TornadoLoopHandler(self.tornado_loop, kwargs.get('handler_base', None))
+ self.container = BaseContainer(*handlers, **kwargs)
+
+ def initialise(self):
+ self.container.start()
+ self.container.process()
+
+ def run(self):
+ self.initialise()
+ self.tornado_loop.start()
+
+ def touch(self):
+ self._process()
+
+ def _process(self):
+ self.container.process()
+ if not self.container.quiesced:
+ self.tornado_loop.add_callback(self._process)
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html
new file mode 100644
index 0000000..ba3c52a
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>proton_tornado.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>proton_tornado.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>proton_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">tornado.ioloop</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span> <span class="k">as</span> <span class="n">BaseContainer</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IOHandler</span>
+
+<span class="k">class</span> <span class="nc">TornadoLoopHandler</span><span class="p">:</span>
+
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">handler_base</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="o">=</span> <span class="n">loop</span> <span class="ow">or</span> <span class="n">tornado</span><span class="o">.</span><span class="n">ioloop</span><span class="o">.</span><span class="n">IOLoop</span><span class="o">.</span><span class="n">instance</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">io</span> <span class="o">=</span> <span class="n">handler_base</span> <span class="ow">or</span> <span class="n">IOHandler</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_reactor_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">reactor</span>
+
+ <span class="k">def</span> <span class="nf">on_reactor_quiesced</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">yield_</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_unhandled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">io</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_events</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">):</span>
+ <span class="n">events</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">ERROR</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">reading</span><span class="p">:</span>
+ <span class="n">events</span> <span class="o">|=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">READ</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">writing</span><span class="p">:</span>
+ <span class="n">events</span> <span class="o">|=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">WRITE</span>
+ <span class="k">return</span> <span class="n">events</span>
+
+ <span class="k">def</span> <span class="nf">_schedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">deadline</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_timeout</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">deadline</span><span class="p">,</span> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expired</span><span class="p">(</span><span class="n">sel</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">_expired</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">):</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">expired</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">process</span><span class="p">()</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">quiesced</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">,</span> <span class="n">events</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">READ</span> <span class="o">&</span> <span class="n">events</span><span class="p">:</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">readable</span><span class="p">()</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">WRITE</span> <span class="o">&</span> <span class="n">events</span><span class="p">:</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">writable</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_selectable_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">context</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_handler</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="k">lambda</span> <span class="n">fd</span><span class="p">,</span> <span class="n">events</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_callback</span><span class="p">(</span><span class="n">sel</span><span class="p">,</span> <span class="n">events</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_events</span><span class="p">(</span><span class="n">sel</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_schedule</span><span class="p">(</span><span class="n">sel</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_selectable_updated</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">context</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">update_handler</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_events</span><span class="p">(</span><span class="n">sel</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_schedule</span><span class="p">(</span><span class="n">sel</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_selectable_final</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">context</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">remove_handler</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">())</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">-=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+
+<span class="k">class</span> <span class="nc">Container</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">handlers</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'loop'</span><span class="p">,</span> <span class="n">tornado</span><span class="o">.</span><span class="n">ioloop</span><span class="o">.</span><span class="n">IOLoop</span><span class="o">.</span><span class="n">instance</span><span class="p">())</span>
+ <span class="n">kwargs</span><span class="p">[</span><span class="s1">'global_handler'</span><span class="p">]</span> <span class="o">=</span> <span class="n">TornadoLoopHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'handler_base'</span><span class="p">,</span> <span class="bp">None</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">BaseContainer</span><span class="p">(</span><span class="o">*</span><span class="n">handlers</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">initialise</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">process</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">initialise</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">process</span><span class="p">()</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">quiesced</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+</pre></div>
+
+<p><a href="proton_tornado.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py
new file mode 100755
index 0000000..34d2377
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton.reactor import Container, Copy
+from proton.handlers import MessagingHandler
+
+class Recv(MessagingHandler):
+ def __init__(self):
+ super(Recv, self).__init__()
+
+ def on_start(self, event):
+ conn = event.container.connect("localhost:5672")
+ event.container.create_receiver(conn, "examples", options=Copy())
+
+ def on_message(self, event):
+ print(event.message)
+ if event.receiver.queued == 0 and event.receiver.drained:
+ event.connection.close()
+
+try:
+ Container(Recv()).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html
new file mode 100644
index 0000000..9b125e1
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>queue_browser.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>queue_browser.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>queue_browser.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">Copy</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">Copy</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">queued</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">drained</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">())</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="queue_browser.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py
new file mode 100755
index 0000000..b59dbe1
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton.reactor import Container, Handler
+
+class Recurring(Handler):
+ def __init__(self, period):
+ self.period = period
+
+ def on_reactor_init(self, event):
+ self.container = event.reactor
+ self.container.schedule(self.period, self)
+
+ def on_timer_task(self, event):
+ print("Tick...")
+ self.container.schedule(self.period, self)
+
+try:
+ container = Container(Recurring(1.0))
+ container.run()
+except KeyboardInterrupt:
+ container.stop()
+ print()
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html
new file mode 100644
index 0000000..70738a7
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>recurring_timer.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>recurring_timer.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>recurring_timer.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">Handler</span>
+
+<span class="k">class</span> <span class="nc">Recurring</span><span class="p">(</span><span class="n">Handler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">period</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">period</span> <span class="o">=</span> <span class="n">period</span>
+
+ <span class="k">def</span> <span class="nf">on_reactor_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">reactor</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_timer_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Tick..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">Recurring</span><span class="p">(</span><span class="mf">1.0</span><span class="p">))</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+ <span class="k">print</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="recurring_timer.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py
new file mode 100755
index 0000000..07ebd26
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import time
+from proton.reactor import Handler
+from proton_tornado import TornadoLoop
+
+class Recurring(Handler):
+ def __init__(self, period):
+ self.period = period
+
+ def on_start(self, event):
+ self.container = event.container
+ self.container.schedule(time.time() + self.period, subject=self)
+
+ def on_timer(self, event):
+ print("Tick...")
+ self.container.schedule(time.time() + self.period, subject=self)
+
+try:
+ container = TornadoLoop(Recurring(1.0))
+ container.run()
+except KeyboardInterrupt:
+ container.stop()
+ print()
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[20/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html
new file mode 100644
index 0000000..f326305
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>server.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>server.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>server.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><cctype></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">server</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_map</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">connection</span><span class="p">;</span>
+ <span class="n">sender_map</span> <span class="n">senders</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">server</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">connection</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">connection</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">());</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"server connected to "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">to_upper</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">uc</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="kt">size_t</span> <span class="n">l</span> <span class="o">=</span> <span class="n">uc</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o"><</span><span class="n">l</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
+ <span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">static_cast</span><span class="o"><</span><span class="kt">char</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">toupper</span><span class="p">(</span><span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]));</span>
+ <span class="k">return</span> <span class="n">uc</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Received "</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">reply_to</span> <span class="o">=</span> <span class="n">m</span><span class="p">.</span><span class="n">reply_to</span><span class="p">();</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">reply</span><span class="p">;</span>
+
+ <span class="n">reply</span><span class="p">.</span><span class="n">to</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">to_upper</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">())));</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">());</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">senders</span><span class="p">[</span><span class="n">reply_to</span><span class="p">])</span> <span class="p">{</span>
+ <span class="n">senders</span><span class="p">[</span><span class="n">reply_to</span><span class="p">]</span> <span class="o">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">senders</span><span class="p">[</span><span class="n">reply_to</span><span class="p">].</span><span class="n">send</span><span class="p">(</span><span class="n">reply</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"amqp://0.0.0.0:5672/examples"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">server</span> <span class="n">srv</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">srv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="server.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp
new file mode 100755
index 0000000..220934f
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp
@@ -0,0 +1,119 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sender.hpp>
+#include <proton/source_options.hpp>
+#include <proton/tracker.hpp>
+
+#include <iostream>
+#include <map>
+#include <string>
+#include <sstream>
+#include <cctype>
+
+#include "fake_cpp11.hpp"
+
+class server : public proton::messaging_handler {
+ private:
+ typedef std::map<std::string, proton::sender> sender_map;
+ std::string url;
+ sender_map senders;
+ int address_counter;
+
+ public:
+ server(const std::string &u) : url(u), address_counter(0) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ c.listen(url);
+ std::cout << "server listening on " << url << std::endl;
+ }
+
+ std::string to_upper(const std::string &s) {
+ std::string uc(s);
+ size_t l = uc.size();
+
+ for (size_t i=0; i<l; i++)
+ uc[i] = static_cast<char>(std::toupper(uc[i]));
+
+ return uc;
+ }
+
+ std::string generate_address() {
+ std::ostringstream addr;
+ addr << "server" << address_counter++;
+
+ return addr.str();
+ }
+
+ void on_sender_open(proton::sender &sender) OVERRIDE {
+ if (sender.source().dynamic()) {
+ std::string addr = generate_address();
+ sender.open(proton::sender_options().source(proton::source_options().address(addr)));
+ senders[addr] = sender;
+ }
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << "Received " << m.body() << std::endl;
+
+ std::string reply_to = m.reply_to();
+ sender_map::iterator it = senders.find(reply_to);
+
+ if (it == senders.end()) {
+ std::cout << "No link for reply_to: " << reply_to << std::endl;
+ } else {
+ proton::sender sender = it->second;
+ proton::message reply;
+
+ reply.to(reply_to);
+ reply.body(to_upper(proton::get<std::string>(m.body())));
+ reply.correlation_id(m.correlation_id());
+
+ sender.send(reply);
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("amqp://127.0.0.1:5672/examples");
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen on URL", "URL");
+
+ try {
+ opts.parse();
+
+ server srv(address);
+ proton::default_container(srv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html
new file mode 100644
index 0000000..c41a49d
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html
@@ -0,0 +1,247 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>server_direct.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>server_direct.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>server_direct.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><cctype></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">server</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_map</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">sender_map</span> <span class="n">senders</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">address_counter</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">server</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">address_counter</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"server listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">to_upper</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">uc</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="kt">size_t</span> <span class="n">l</span> <span class="o">=</span> <span class="n">uc</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o"><</span><span class="n">l</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
+ <span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">static_cast</span><span class="o"><</span><span class="kt">char</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">toupper</span><span class="p">(</span><span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]));</span>
+
+ <span class="k">return</span> <span class="n">uc</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">generate_address</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">addr</span><span class="p">;</span>
+ <span class="n">addr</span> <span class="o"><<</span> <span class="s">"server"</span> <span class="o"><<</span> <span class="n">address_counter</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">return</span> <span class="n">addr</span><span class="p">.</span><span class="n">str</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">dynamic</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">generate_address</span><span class="p">();</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">addr</span><span class="p">)));</span>
+ <span class="n">senders</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Received "</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">reply_to</span> <span class="o">=</span> <span class="n">m</span><span class="p">.</span><span class="n">reply_to</span><span class="p">();</span>
+ <span class="n">sender_map</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">senders</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">it</span> <span class="o">==</span> <span class="n">senders</span><span class="p">.</span><span class="n">end</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"No link for reply_to: "</span> <span class="o"><<</span> <span class="n">reply_to</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">sender</span> <span class="o">=</span> <span class="n">it</span><span class="o">-></span><span class="n">second</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">reply</span><span class="p">;</span>
+
+ <span class="n">reply</span><span class="p">.</span><span class="n">to</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">to_upper</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">())));</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">());</span>
+
+ <span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">reply</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"amqp://127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">server</span> <span class="n">srv</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">srv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="server_direct.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp
new file mode 100755
index 0000000..7621941
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp
@@ -0,0 +1,92 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/link.hpp>
+#include <proton/message_id.hpp>
+#include <proton/value.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class simple_recv : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::receiver receiver;
+ uint64_t expected;
+ uint64_t received;
+
+ public:
+ simple_recv(const std::string &s, int c) : url(s), expected(c), received(0) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ receiver = c.open_receiver(url);
+ std::cout << "simple_recv listening on " << url << std::endl;
+ }
+
+ void on_message(proton::delivery &d, proton::message &msg) OVERRIDE {
+ if (proton::get<uint64_t>(msg.id()) < received) {
+ return; // Ignore duplicate
+ }
+
+ if (expected == 0 || received < expected) {
+ std::cout << msg.body() << std::endl;
+ received++;
+
+ if (received == expected) {
+ d.receiver().close();
+ d.connection().close();
+ }
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "connect to and receive from URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "receive COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ simple_recv recv(address, message_count);
+ proton::default_container(recv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html
new file mode 100644
index 0000000..9affee5
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>simple_recv.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>simple_recv.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>simple_recv.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/link.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/message_id.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">simple_recv</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="n">receiver</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">expected</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">received</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">simple_recv</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">expected</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">received</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">receiver</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"simple_recv listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">msg</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="kt">uint64_t</span><span class="o">></span><span class="p">(</span><span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">())</span> <span class="o"><</span> <span class="n">received</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span><span class="p">;</span> <span class="c1">// Ignore duplicate</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">received</span> <span class="o"><</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">received</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"connect to and receive from URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"receive COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">simple_recv</span> <span class="n">recv</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">recv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="simple_recv.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp
new file mode 100755
index 0000000..3ce72b4
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/tracker.hpp>
+#include <proton/value.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class simple_send : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::sender sender;
+ int sent;
+ int confirmed;
+ int total;
+
+ public:
+ simple_send(const std::string &s, int c) : url(s), sent(0), confirmed(0), total(c) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ sender = c.open_sender(url);
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ while (s.credit() && sent < total) {
+ proton::message msg;
+ std::map<std::string, int> m;
+ m["sequence"] = sent + 1;
+
+ msg.id(sent + 1);
+ msg.body(m);
+
+ s.send(msg);
+ sent++;
+ }
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ confirmed++;
+
+ if (confirmed == total) {
+ std::cout << "all messages confirmed" << std::endl;
+ t.connection().close();
+ }
+ }
+
+ void on_transport_close(proton::transport &) OVERRIDE {
+ sent = confirmed;
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "connect and send to URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "send COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ simple_send send(address, message_count);
+ proton::default_container(send).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html
new file mode 100644
index 0000000..b02cbb6
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html
@@ -0,0 +1,228 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>simple_send.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>simple_send.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>simple_send.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">simple_send</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">sender</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">sent</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">total</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">simple_send</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">sent</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">confirmed</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">total</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">&&</span> <span class="n">sent</span> <span class="o"><</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">msg</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"sequence"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
+
+ <span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">(</span><span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+ <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">);</span>
+ <span class="n">sent</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">confirmed</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">confirmed</span> <span class="o">==</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"all messages confirmed"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sent</span> <span class="o">=</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"connect and send to URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"send COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">simple_send</span> <span class="n">send</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">send</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="simple_send.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[11/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html
new file mode 100644
index 0000000..0089e2e
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/tx_send.py.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>tx_send.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>tx_send.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>tx_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span><span class="p">,</span> <span class="n">Url</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxSend</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">,</span> <span class="n">batch_size</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxSend</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span> <span class="o">=</span> <span class="n">batch_size</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">transaction</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span><span class="p">)</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="n">seq</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">+</span> <span class="mi">1</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">seq</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s1">'sequence'</span><span class="p">:</span><span class="n">seq</span><span class="p">})</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">batch_size</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">transaction</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">committed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"all messages committed"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">current_batch</span> <span class="o">=</span> <span class="mi">0</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages transactionally to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-b"</span><span class="p">,</span> <span class="s2">"--batch-size"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages in each transaction (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">TxSend</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">batch_size</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="tx_send.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp
new file mode 100644
index 0000000..bb3aefb
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp
@@ -0,0 +1,276 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/message.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/sender.hpp>
+#include <proton/sender_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/target_options.hpp>
+#include <proton/transport.hpp>
+#include <proton/url.hpp>
+
+#include <deque>
+#include <iostream>
+#include <list>
+#include <map>
+#include <string>
+
+#include "fake_cpp11.hpp"
+
+/// A simple implementation of a queue.
+class queue {
+ public:
+ queue(const std::string &name, bool dynamic = false) : name_(name), dynamic_(dynamic) {}
+
+ std::string name() const { return name_; }
+
+ void subscribe(proton::sender s) {
+ consumers_.push_back(s);
+ }
+
+ // Return true if queue can be deleted.
+ bool unsubscribe(proton::sender s) {
+ consumers_.remove(s);
+ return (consumers_.size() == 0 && (dynamic_ || messages_.size() == 0));
+ }
+
+ void publish(const proton::message &m) {
+ messages_.push_back(m);
+ dispatch(0);
+ }
+
+ void dispatch(proton::sender *s) {
+ while (deliver_to(s)) {}
+ }
+
+ bool deliver_to(proton::sender *s) {
+ // Deliver to single sender if supplied, else all consumers
+ int count = s ? 1 : consumers_.size();
+
+ if (!count) return false;
+
+ bool result = false;
+ sender_list::iterator it = consumers_.begin();
+
+ if (!s && count) {
+ s = &*it;
+ }
+
+ while (messages_.size()) {
+ if (s->credit()) {
+ const proton::message& m = messages_.front();
+
+ s->send(m);
+ messages_.pop_front();
+ result = true;
+ }
+
+ if (--count) {
+ it++;
+ } else {
+ return result;
+ }
+ }
+
+ return false;
+ }
+
+ private:
+ typedef std::deque<proton::message> message_queue;
+ typedef std::list<proton::sender> sender_list;
+
+ std::string name_;
+ bool dynamic_;
+ message_queue messages_;
+ sender_list consumers_;
+};
+
+/// A collection of queues and queue factory, used by a broker.
+class queues {
+ public:
+ queues() : next_id_(0) {}
+ virtual ~queues() {}
+
+ // Get or create a queue.
+ virtual queue &get(const std::string &address = std::string()) {
+ if (address.empty()) {
+ throw std::runtime_error("empty queue name");
+ }
+
+ queue*& q = queues_[address];
+
+ if (!q) q = new queue(address);
+
+ return *q;
+ }
+
+ // Create a dynamic queue with a unique name.
+ virtual queue &dynamic() {
+ std::ostringstream os;
+ os << "q" << next_id_++;
+ queue *q = queues_[os.str()] = new queue(os.str(), true);
+
+ return *q;
+ }
+
+ // Delete the named queue
+ virtual void erase(std::string &name) {
+ delete queues_[name];
+ queues_.erase(name);
+ }
+
+ protected:
+ typedef std::map<std::string, queue *> queue_map;
+ queue_map queues_;
+ uint64_t next_id_; // Use to generate unique queue IDs.
+};
+
+// A handler to implement broker logic
+class broker_handler : public proton::messaging_handler {
+ public:
+ broker_handler(queues& qs) : queues_(qs) {}
+
+ void on_sender_open(proton::sender &sender) OVERRIDE {
+ proton::source src(sender.source());
+ queue &q = src.dynamic() ?
+ queues_.dynamic() : queues_.get(src.address());
+ sender.open(proton::sender_options().source(proton::source_options().address(q.name())));
+ q.subscribe(sender);
+ std::cout << "broker outgoing link from " << q.name() << std::endl;
+ }
+
+ void on_receiver_open(proton::receiver &receiver) OVERRIDE {
+ std::string address = receiver.target().address();
+ if (!address.empty()) {
+ receiver.open(proton::receiver_options().target(proton::target_options().address(address)));
+ std::cout << "broker incoming link to " << address << std::endl;
+ }
+ }
+
+ void unsubscribe(proton::sender lnk) {
+ std::string address = lnk.source().address();
+
+ if (queues_.get(address).unsubscribe(lnk)) {
+ queues_.erase(address);
+ }
+ }
+
+ void on_sender_close(proton::sender &sender) OVERRIDE {
+ unsubscribe(sender);
+ }
+
+ void on_connection_close(proton::connection &c) OVERRIDE {
+ remove_stale_consumers(c);
+ }
+
+ void on_transport_close(proton::transport &t) OVERRIDE {
+ remove_stale_consumers(t.connection());
+ }
+
+ void on_transport_error(proton::transport &t) OVERRIDE {
+ std::cout << "broker client disconnect: " << t.error().what() << std::endl;
+ }
+
+ void on_error(const proton::error_condition &c) OVERRIDE {
+ std::cerr << "broker error: " << c.what() << std::endl;
+ }
+
+ void remove_stale_consumers(proton::connection connection) {
+ proton::session_range r1 = connection.sessions();
+ for (proton::session_iterator i1 = r1.begin(); i1 != r1.end(); ++i1) {
+ proton::sender_range r2 = i1->senders();
+ for (proton::sender_iterator i2 = r2.begin(); i2 != r2.end(); ++i2) {
+ if (i2->active())
+ unsubscribe(*i2);
+ }
+ }
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ std::string address = s.source().address();
+
+ queues_.get(address).dispatch(&s);
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ std::string address = d.receiver().target().address();
+ queues_.get(address).publish(m);
+ }
+
+ protected:
+ queues& queues_;
+};
+
+
+// The broker
+class broker {
+ public:
+ broker(const std::string& url) : handler_(url, queues_) {}
+
+ proton::messaging_handler& handler() { return handler_; }
+
+ private:
+ class my_handler : public broker_handler {
+ public:
+ my_handler(const std::string& u, queues& qs) : broker_handler(qs), url_(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ c.listen(url_);
+ std::cout << "broker listening on " << url_ << std::endl;
+ }
+
+ private:
+ const std::string& url_;
+ };
+
+ private:
+ queues queues_;
+ my_handler handler_;
+};
+
+int main(int argc, char **argv) {
+ std::string url("0.0.0.0");
+ example::options opts(argc, argv);
+
+ opts.add_value(url, 'a', "address", "listen on URL", "URL");
+
+ try {
+ opts.parse();
+
+ broker b(url);
+ proton::default_container(b.handler()).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html.in
new file mode 100644
index 0000000..0878d30
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.cpp.html.in
@@ -0,0 +1,260 @@
+
+<h1>broker.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/message.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/target_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><deque></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><list></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="c1">/// A simple implementation of a queue.</span>
+<span class="k">class</span> <span class="nc">queue</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queue</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">dynamic</span> <span class="o">=</span> <span class="nb">false</span><span class="p">)</span> <span class="o">:</span> <span class="n">name_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">dynamic_</span><span class="p">(</span><span class="n">dynamic</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">name_</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">subscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Return true if queue can be deleted.</span>
+ <span class="kt">bool</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="k">return</span> <span class="p">(</span><span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dynamic_</span> <span class="o">||</span> <span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">publish</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">dispatch</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">dispatch</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">deliver_to</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="p">{}</span>
+ <span class="p">}</span>
+
+ <span class="kt">bool</span> <span class="n">deliver_to</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Deliver to single sender if supplied, else all consumers</span>
+ <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="n">s</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">count</span><span class="p">)</span> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+
+ <span class="kt">bool</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="n">sender_list</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">s</span> <span class="o">&&</span> <span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="o">&*</span><span class="n">it</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">while</span> <span class="p">(</span><span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="o">-></span><span class="n">credit</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">&</span> <span class="n">m</span> <span class="o">=</span> <span class="n">messages_</span><span class="p">.</span><span class="n">front</span><span class="p">();</span>
+
+ <span class="n">s</span><span class="o">-></span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">pop_front</span><span class="p">();</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">--</span><span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">it</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">deque</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">></span> <span class="n">message_queue</span><span class="p">;</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_list</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name_</span><span class="p">;</span>
+ <span class="kt">bool</span> <span class="n">dynamic_</span><span class="p">;</span>
+ <span class="n">message_queue</span> <span class="n">messages_</span><span class="p">;</span>
+ <span class="n">sender_list</span> <span class="n">consumers_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// A collection of queues and queue factory, used by a broker.</span>
+<span class="k">class</span> <span class="nc">queues</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queues</span><span class="p">()</span> <span class="o">:</span> <span class="n">next_id_</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+ <span class="k">virtual</span> <span class="o">~</span><span class="n">queues</span><span class="p">()</span> <span class="p">{}</span>
+
+ <span class="c1">// Get or create a queue.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">get</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">address</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"empty queue name"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">queue</span><span class="o">*&</span> <span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">address</span><span class="p">];</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">q</span><span class="p">)</span> <span class="n">q</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Create a dynamic queue with a unique name.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">dynamic</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">os</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">"q"</span> <span class="o"><<</span> <span class="n">next_id_</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">queue</span> <span class="o">*</span><span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">()]</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="nb">true</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Delete the named queue</span>
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="n">erase</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">delete</span> <span class="n">queues_</span><span class="p">[</span><span class="n">name</span><span class="p">];</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">queue</span> <span class="o">*></span> <span class="n">queue_map</span><span class="p">;</span>
+ <span class="n">queue_map</span> <span class="n">queues_</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">next_id_</span><span class="p">;</span> <span class="c1">// Use to generate unique queue IDs.</span>
+<span class="p">};</span>
+
+<span class="c1">// A handler to implement broker logic</span>
+<span class="k">class</span> <span class="nc">broker_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">broker_handler</span><span class="p">(</span><span class="n">queues</span><span class="o">&</span> <span class="n">qs</span><span class="p">)</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">(</span><span class="n">qs</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source</span> <span class="n">src</span><span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">source</span><span class="p">());</span>
+ <span class="n">queue</span> <span class="o">&</span><span class="n">q</span> <span class="o">=</span> <span class="n">src</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">?</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">address</span><span class="p">());</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">())));</span>
+ <span class="n">q</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker outgoing link from "</span> <span class="o"><<</span> <span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">receiver</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">.</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">receiver</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">target</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">target_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">address</span><span class="p">)));</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker incoming link to "</span> <span class="o"><<</span> <span class="n">address</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">lnk</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">lnk</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">lnk</span><span class="p">))</span> <span class="p">{</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">c</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">());</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_error</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker client disconnect: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">error</span><span class="p">().</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_error</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">error_condition</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="s">"broker error: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">connection</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">session_range</span> <span class="n">r1</span> <span class="o">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">sessions</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">session_iterator</span> <span class="n">i1</span> <span class="o">=</span> <span class="n">r1</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i1</span> <span class="o">!=</span> <span class="n">r1</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i1</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender_range</span> <span class="n">r2</span> <span class="o">=</span> <span class="n">i1</span><span class="o">-></span><span class="n">senders</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_iterator</span> <span class="n">i2</span> <span class="o">=</span> <span class="n">r2</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i2</span> <span class="o">!=</span> <span class="n">r2</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i2</span><span class="o">-></span><span class="n">active</span><span class="p">())</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="o">*</span><span class="n">i2</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">dispatch</span><span class="p">(</span><span class="o">&</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">publish</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="n">queues</span><span class="o">&</span> <span class="n">queues_</span><span class="p">;</span>
+<span class="p">};</span>
+
+
+<span class="c1">// The broker</span>
+<span class="k">class</span> <span class="nc">broker</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">broker</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">url</span><span class="p">)</span> <span class="o">:</span> <span class="n">handler_</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">queues_</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span><span class="o">&</span> <span class="n">handler</span><span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="n">handler_</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">class</span> <span class="nc">my_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">broker_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">my_handler</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">,</span> <span class="n">queues</span><span class="o">&</span> <span class="n">qs</span><span class="p">)</span> <span class="o">:</span> <span class="n">broker_handler</span><span class="p">(</span><span class="n">qs</span><span class="p">),</span> <span class="n">url_</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url_</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker listening on "</span> <span class="o"><<</span> <span class="n">url_</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">url_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">queues</span> <span class="n">queues_</span><span class="p">;</span>
+ <span class="n">my_handler</span> <span class="n">handler_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">(</span><span class="s">"0.0.0.0"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">broker</span> <span class="n">b</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">b</span><span class="p">.</span><span class="n">handler</span><span class="p">()).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="broker.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp
new file mode 100644
index 0000000..184ddc7
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp
@@ -0,0 +1,236 @@
+#ifndef BROKER_HPP
+#define BROKER_HPP
+
+/*
+ * 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.
+ */
+
+/// @file
+///
+/// Common code used by different broker examples.
+///
+/// The examples add functionality as needed, this helps to make it
+/// easier to see the important differences between the examples.
+
+#include <proton/connection.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/message.hpp>
+#include <proton/sasl.hpp>
+#include <proton/sender.hpp>
+#include <proton/tracker.hpp>
+#include <proton/transport.hpp>
+#include <proton/sender_options.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/target_options.hpp>
+
+#include <iostream>
+#include <deque>
+#include <map>
+#include <list>
+#include <sstream>
+
+/// A simple implementation of a queue.
+class queue {
+ public:
+ queue(const std::string &name, bool dynamic = false) : name_(name), dynamic_(dynamic) {}
+
+ std::string name() const { return name_; }
+
+ void subscribe(proton::sender s) {
+ consumers_.push_back(s);
+ }
+
+ // Return true if queue can be deleted.
+ bool unsubscribe(proton::sender s) {
+ consumers_.remove(s);
+ return (consumers_.size() == 0 && (dynamic_ || messages_.size() == 0));
+ }
+
+ void publish(const proton::message &m) {
+ messages_.push_back(m);
+ dispatch(0);
+ }
+
+ void dispatch(proton::sender *s) {
+ while (deliver_to(s)) {}
+ }
+
+ bool deliver_to(proton::sender *s) {
+ // Deliver to single sender if supplied, else all consumers
+ int count = s ? 1 : consumers_.size();
+
+ if (!count) return false;
+
+ bool result = false;
+ sender_list::iterator it = consumers_.begin();
+
+ if (!s && count) {
+ s = &*it;
+ }
+
+ while (messages_.size()) {
+ if (s->credit()) {
+ const proton::message& m = messages_.front();
+
+ s->send(m);
+ messages_.pop_front();
+ result = true;
+ }
+
+ if (--count) {
+ it++;
+ } else {
+ return result;
+ }
+ }
+
+ return false;
+ }
+
+ private:
+ typedef std::deque<proton::message> message_queue;
+ typedef std::list<proton::sender> sender_list;
+
+ std::string name_;
+ bool dynamic_;
+ message_queue messages_;
+ sender_list consumers_;
+};
+
+/// A collection of queues and queue factory, used by a broker.
+class queues {
+ public:
+ queues() : next_id_(0) {}
+ virtual ~queues() {}
+
+ // Get or create a queue.
+ virtual queue &get(const std::string &address = std::string()) {
+ if (address.empty()) {
+ throw std::runtime_error("empty queue name");
+ }
+
+ queue*& q = queues_[address];
+
+ if (!q) q = new queue(address);
+
+ return *q;
+ }
+
+ // Create a dynamic queue with a unique name.
+ virtual queue &dynamic() {
+ std::ostringstream os;
+ os << "q" << next_id_++;
+ queue *q = queues_[os.str()] = new queue(os.str(), true);
+
+ return *q;
+ }
+
+ // Delete the named queue
+ virtual void erase(std::string &name) {
+ delete queues_[name];
+ queues_.erase(name);
+ }
+
+ protected:
+ typedef std::map<std::string, queue *> queue_map;
+ queue_map queues_;
+ uint64_t next_id_; // Use to generate unique queue IDs.
+};
+
+#include <proton/config.hpp>
+
+/** Common handler logic for brokers. */
+class broker_handler : public proton::messaging_handler {
+ public:
+ broker_handler(queues& qs) : queues_(qs) {}
+
+ void on_transport_open(proton::transport &t) OVERRIDE {
+ std::cout << "Connection from user: " << t.sasl().user() << " (mechanism: " << t.sasl().mech() << ")" << std::endl;
+ }
+
+ void on_sender_open(proton::sender &sender) OVERRIDE {
+ proton::source src(sender.source());
+ queue &q = src.dynamic() ?
+ queues_.dynamic() : queues_.get(src.address());
+ sender.open(proton::sender_options().source(proton::source_options().address(q.name())));
+ q.subscribe(sender);
+ std::cout << "broker outgoing link from " << q.name() << std::endl;
+ }
+
+ void on_receiver_open(proton::receiver &receiver) OVERRIDE {
+ std::string address = receiver.target().address();
+ if (!address.empty()) {
+ receiver.open(proton::receiver_options().target(proton::target_options().address(address)));
+ std::cout << "broker incoming link to " << address << std::endl;
+ }
+ }
+
+ void unsubscribe(proton::sender lnk) {
+ std::string address = lnk.source().address();
+
+ if (queues_.get(address).unsubscribe(lnk)) {
+ queues_.erase(address);
+ }
+ }
+
+ void on_sender_close(proton::sender &sender) OVERRIDE {
+ unsubscribe(sender);
+ }
+
+ void on_connection_close(proton::connection &c) OVERRIDE {
+ remove_stale_consumers(c);
+ }
+
+ void on_transport_close(proton::transport &t) OVERRIDE {
+ remove_stale_consumers(t.connection());
+ }
+
+ void on_transport_error(proton::transport &t) OVERRIDE {
+ std::cout << "broker client disconnect: " << t.error().what() << std::endl;
+ }
+
+ void on_error(const proton::error_condition &c) OVERRIDE {
+ std::cerr << "broker error: " << c.what() << std::endl;
+ }
+
+ void remove_stale_consumers(proton::connection connection) {
+ proton::sender_range sr = connection.senders();
+ for (proton::sender_iterator i = sr.begin(); i != sr.end(); ++i) {
+ if (i->active())
+ unsubscribe(*i);
+ }
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ std::string address = s.source().address();
+
+ queues_.get(address).dispatch(&s);
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ std::string address = d.receiver().target().address();
+ queues_.get(address).publish(m);
+ }
+
+ protected:
+ queues& queues_;
+};
+
+#endif // BROKER_HPP
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[09/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html.in
new file mode 100644
index 0000000..5b29bba
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_send.cpp.html.in
@@ -0,0 +1,85 @@
+
+<h1>direct_send.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">simple_send</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">sent</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">total</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">simple_send</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">sent</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">confirmed</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">total</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"direct_send listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">&&</span> <span class="n">sent</span> <span class="o"><</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">msg</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"sequence"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
+
+ <span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">(</span><span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+ <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+
+ <span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">);</span>
+ <span class="n">sent</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">confirmed</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">confirmed</span> <span class="o">==</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"all messages confirmed"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sent</span> <span class="o">=</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen and send on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"send COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">simple_send</span> <span class="n">send</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">send</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="direct_send.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp
new file mode 100644
index 0000000..17971d9
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp
@@ -0,0 +1,252 @@
+/*
+ * 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.
+ */
+
+#include <proton/types.hpp>
+#include <proton/codec/encoder.hpp>
+#include <proton/codec/decoder.hpp>
+
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <sstream>
+
+// Examples of how to use the encoder and decoder to create and examine AMQP values.
+//
+
+// Print is defined at the end as an example of how to query and extract complex
+// values from a decoder in terms of their simple components.
+void print(proton::value&);
+
+// Some helper templates to print map and std::vector results.
+namespace std {
+template<class T, class U> ostream& operator<<(ostream& o, const std::pair<T,U>& p) {
+ return o << p.first << ":" << p.second;
+}
+template<class T> ostream& operator<<(ostream& o, const std::vector<T>& v) {
+ o << "[ ";
+ ostream_iterator<T> oi(o, " ");
+ copy(v.begin(), v.end(), oi);
+ return o << "]";
+}
+template<class T> ostream& operator<<(ostream& o, const std::list<T>& v) {
+ o << "[ ";
+ ostream_iterator<T> oi(o, " ");
+ copy(v.begin(), v.end(), oi);
+ return o << "]";
+}
+template<class K, class T> ostream& operator<<(ostream& o, const map<K, T>& m) {
+ o << "{ ";
+ ostream_iterator<std::pair<K,T> > oi(o, " ");
+ copy(m.begin(), m.end(), oi);
+ return o << "}";
+}
+}
+
+// Insert/extract native C++ containers with uniform type values.
+static void uniform_containers() {
+ std::cout << std::endl << "== Array, list and map of uniform type." << std::endl;
+ proton::value v;
+
+ std::vector<int> a;
+ a.push_back(1);
+ a.push_back(2);
+ a.push_back(3);
+ // By default a C++ container is encoded as an AMQP array.
+ v = a;
+ print(v);
+ std::list<int> a1;
+ proton::get(v, a1);
+ std::cout << a1 << std::endl;
+
+ // You can specify that a container should be encoded as an AMQP list instead.
+ v = proton::codec::encoder::list(a1);
+ print(v);
+ std::cout << proton::get<std::vector<int> >(v) << std::endl;
+
+ // C++ map types (types with key_type, mapped_type) convert to an AMQP map by default.
+ std::map<std::string, int> m;
+ m["one"] = 1;
+ m["two"] = 2;
+ v = m;
+ print(v);
+ std::cout << proton::get<std::map<std::string, int> >(v) << std::endl;
+
+ // A sequence of pairs encodes as an AMQP MAP, which lets you control the encoded order.
+ std::vector<std::pair<std::string, int> > pairs;
+ pairs.push_back(std::make_pair("z", 3));
+ pairs.push_back(std::make_pair("a", 4));
+ v = pairs;
+ print(v);
+
+ // You can also decode an AMQP map as a sequence of pairs to preserve encode order.
+ std::vector<std::pair<std::string, int> > pairs2;
+ proton::codec::decoder d(v);
+ d >> pairs2;
+ std::cout << pairs2 << std::endl;
+
+ // A vector of proton::value is normally encoded as a mixed-type AMQP LIST,
+ // but you can encoded it as an array provided all the values match the array type.
+ std::vector<proton::value> vv;
+ vv.push_back(proton::value("a"));
+ vv.push_back(proton::value("b"));
+ vv.push_back(proton::value("c"));
+ v = vv;
+ print(v);
+}
+
+// Containers with mixed types use value to represent arbitrary AMQP types.
+static void mixed_containers() {
+ std::cout << std::endl << "== List and map of mixed type values." << std::endl;
+ proton::value v;
+
+ std::vector<proton::value> l;
+ l.push_back(proton::value(42));
+ l.push_back(proton::value(std::string("foo")));
+ // By default, a sequence of proton::value is treated as an AMQP list.
+ v = l;
+ print(v);
+ std::vector<proton::value> l2 = proton::get<std::vector<proton::value> >(v);
+ std::cout << l2 << std::endl;
+
+ std::map<proton::value, proton::value> m;
+ m[proton::value("five")] = proton::value(5);
+ m[proton::value(4)] = proton::value("four"); v = m;
+ print(v);
+ typedef std::map<proton::value, proton::value> value_map;
+ value_map m2(proton::get<value_map>(v));
+ std::cout << m2 << std::endl;
+}
+
+// Insert using stream operators (see print_next for example of extracting with stream ops.)
+static void insert_stream_operators() {
+ std::cout << std::endl << "== Insert with stream operators." << std::endl;
+ proton::value v;
+
+ // Create an array of INT with values [1, 2, 3]
+ proton::codec::encoder e(v);
+ e << proton::codec::start::array(proton::INT)
+ << int32_t(1) << int32_t(2) << int32_t(3)
+ << proton::codec::finish();
+ print(v);
+
+ // Create a mixed-type list of the values [42, false, "x"].
+ proton::codec::encoder e2(v);
+ e2 << proton::codec::start::list()
+ << int32_t(42) << false << proton::symbol("x")
+ << proton::codec::finish();
+ print(v);
+
+ // Create a map { "k1":42, "k2": false }
+ proton::codec::encoder e3(v);
+ e3 << proton::codec::start::map()
+ << "k1" << int32_t(42)
+ << proton::symbol("k2") << false
+ << proton::codec::finish();
+ print(v);
+}
+
+int main(int, char**) {
+ try {
+ uniform_containers();
+ mixed_containers();
+ insert_stream_operators();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << std::endl << "error: " << e.what() << std::endl;
+ }
+ return 1;
+}
+
+// print_next prints the next value from values by recursively descending into complex values.
+//
+// NOTE this is for example puroses only: There is a built in ostream operator<< for values.
+//
+//
+static void print_next(proton::codec::decoder& d) {
+ proton::type_id type = d.next_type();
+ proton::codec::start s;
+ switch (type) {
+ case proton::ARRAY: {
+ d >> s;
+ std::cout << "array<" << s.element;
+ if (s.is_described) {
+ std::cout << ", descriptor=";
+ print_next(d);
+ }
+ std::cout << ">[";
+ for (size_t i = 0; i < s.size; ++i) {
+ if (i) std::cout << ", ";
+ print_next(d);
+ }
+ std::cout << "]";
+ d >> proton::codec::finish();
+ break;
+ }
+ case proton::LIST: {
+ d >> s;
+ std::cout << "list[";
+ for (size_t i = 0; i < s.size; ++i) {
+ if (i) std::cout << ", ";
+ print_next(d);
+ }
+ std::cout << "]";
+ d >> proton::codec::finish();
+ break;
+ }
+ case proton::MAP: {
+ d >> s;
+ std::cout << "map{";
+ for (size_t i = 0; i < s.size/2; ++i) {
+ if (i) std::cout << ", ";
+ print_next(d);
+ std::cout << ":"; // key:value
+ print_next(d);
+ }
+ std::cout << "}";
+ d >> proton::codec::finish();
+ break;
+ }
+ case proton::DESCRIBED: {
+ d >> s;
+ std::cout << "described(";
+ print_next(d); // Descriptor
+ print_next(d); // value
+ d >> proton::codec::finish();
+ break;
+ }
+ default:
+ // A simple type. We could continue the switch for all AMQP types but
+ // we will take a short cut and extract to another value and print that.
+ proton::value v2;
+ d >> v2;
+ std::cout << type << "(" << v2 << ")";
+ }
+}
+
+// Print a value, for example purposes. Normal code can use operator<<
+void print(proton::value& v) {
+ proton::codec::decoder d(v);
+ d.rewind();
+ std::cout << std::boolalpha; // Print boolean as true/false.
+ while (d.more()) {
+ print_next(d);
+ if (d.more()) std::cout << ", ";
+ }
+ std::cout << std::endl;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html.in
new file mode 100644
index 0000000..6ec6c85
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html.in
@@ -0,0 +1,238 @@
+
+<h1>encode_decode.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/types.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/codec/encoder.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/codec/decoder.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><algorithm></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><iterator></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+
+<span class="c1">// Examples of how to use the encoder and decoder to create and examine AMQP values.</span>
+<span class="c1">//</span>
+
+<span class="c1">// Print is defined at the end as an example of how to query and extract complex</span>
+<span class="c1">// values from a decoder in terms of their simple components.</span>
+<span class="kt">void</span> <span class="nf">print</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">&</span><span class="p">);</span>
+
+<span class="c1">// Some helper templates to print map and std::vector results.</span>
+<span class="k">namespace</span> <span class="n">std</span> <span class="p">{</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="p">,</span> <span class="k">class</span> <span class="nc">U</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">T</span><span class="p">,</span><span class="n">U</span><span class="o">>&</span> <span class="n">p</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="n">p</span><span class="p">.</span><span class="n">first</span> <span class="o"><<</span> <span class="s">":"</span> <span class="o"><<</span> <span class="n">p</span><span class="p">.</span><span class="n">second</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">T</span><span class="o">>&</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">o</span> <span class="o"><<</span> <span class="s">"[ "</span><span class="p">;</span>
+ <span class="n">ostream_iterator</span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="n">oi</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span>
+ <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">oi</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="n">T</span><span class="o">>&</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">o</span> <span class="o"><<</span> <span class="s">"[ "</span><span class="p">;</span>
+ <span class="n">ostream_iterator</span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="n">oi</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span>
+ <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">oi</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">K</span><span class="p">,</span> <span class="k">class</span> <span class="nc">T</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">map</span><span class="o"><</span><span class="n">K</span><span class="p">,</span> <span class="n">T</span><span class="o">>&</span> <span class="n">m</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">o</span> <span class="o"><<</span> <span class="s">"{ "</span><span class="p">;</span>
+ <span class="n">ostream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">K</span><span class="p">,</span><span class="n">T</span><span class="o">></span> <span class="o">></span> <span class="n">oi</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span>
+ <span class="n">copy</span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">m</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">oi</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="s">"}"</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">// Insert/extract native C++ containers with uniform type values.</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">uniform_containers</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"== Array, list and map of uniform type."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">a</span><span class="p">;</span>
+ <span class="n">a</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+ <span class="n">a</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
+ <span class="n">a</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
+ <span class="c1">// By default a C++ container is encoded as an AMQP array.</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">a1</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">a1</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">a1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// You can specify that a container should be encoded as an AMQP list instead.</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span><span class="o">::</span><span class="n">list</span><span class="p">(</span><span class="n">a1</span><span class="p">);</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// C++ map types (types with key_type, mapped_type) convert to an AMQP map by default.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"one"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"two"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// A sequence of pairs encodes as an AMQP MAP, which lets you control the encoded order.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="o">></span> <span class="n">pairs</span><span class="p">;</span>
+ <span class="n">pairs</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">make_pair</span><span class="p">(</span><span class="s">"z"</span><span class="p">,</span> <span class="mi">3</span><span class="p">));</span>
+ <span class="n">pairs</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">make_pair</span><span class="p">(</span><span class="s">"a"</span><span class="p">,</span> <span class="mi">4</span><span class="p">));</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">pairs</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+
+ <span class="c1">// You can also decode an AMQP map as a sequence of pairs to preserve encode order.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="o">></span> <span class="n">pairs2</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">decoder</span> <span class="n">d</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">pairs2</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">pairs2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// A vector of proton::value is normally encoded as a mixed-type AMQP LIST,</span>
+ <span class="c1">// but you can encoded it as an array provided all the values match the array type.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">vv</span><span class="p">;</span>
+ <span class="n">vv</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"a"</span><span class="p">));</span>
+ <span class="n">vv</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"b"</span><span class="p">));</span>
+ <span class="n">vv</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"c"</span><span class="p">));</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">vv</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="c1">// Containers with mixed types use value to represent arbitrary AMQP types.</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">mixed_containers</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"== List and map of mixed type values."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">l</span><span class="p">;</span>
+ <span class="n">l</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="mi">42</span><span class="p">));</span>
+ <span class="n">l</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">"foo"</span><span class="p">)));</span>
+ <span class="c1">// By default, a sequence of proton::value is treated as an AMQP list.</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">l</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">l2</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">l2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"five"</span><span class="p">)]</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span>
+ <span class="n">m</span><span class="p">[</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="mi">4</span><span class="p">)]</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"four"</span><span class="p">);</span> <span class="n">v</span> <span class="o">=</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">value_map</span><span class="p">;</span>
+ <span class="n">value_map</span> <span class="nf">m2</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">value_map</span><span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">));</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">// Insert using stream operators (see print_next for example of extracting with stream ops.)</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">insert_stream_operators</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"== Insert with stream operators."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v</span><span class="p">;</span>
+
+ <span class="c1">// Create an array of INT with values [1, 2, 3]</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">e</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">e</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">array</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">INT</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+
+ <span class="c1">// Create a mixed-type list of the values [42, false, "x"].</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">e2</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">e2</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">list</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="o"><<</span> <span class="nb">false</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span><span class="p">(</span><span class="s">"x"</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+
+ <span class="c1">// Create a map { "k1":42, "k2": false }</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">e3</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">e3</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">map</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="s">"k1"</span> <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span><span class="p">(</span><span class="s">"k2"</span><span class="p">)</span> <span class="o"><<</span> <span class="nb">false</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="kt">int</span> <span class="n">main</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">char</span><span class="o">**</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">uniform_containers</span><span class="p">();</span>
+ <span class="n">mixed_containers</span><span class="p">();</span>
+ <span class="n">insert_stream_operators</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"error: "</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">// print_next prints the next value from values by recursively descending into complex values.</span>
+<span class="c1">//</span>
+<span class="c1">// NOTE this is for example puroses only: There is a built in ostream operator<< for values.</span>
+<span class="c1">//</span>
+<span class="c1">//</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">print_next</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">decoder</span><span class="o">&</span> <span class="n">d</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">type_id</span> <span class="n">type</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">next_type</span><span class="p">();</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span> <span class="n">s</span><span class="p">;</span>
+ <span class="k">switch</span> <span class="p">(</span><span class="n">type</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">ARRAY</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"array<"</span> <span class="o"><<</span> <span class="n">s</span><span class="p">.</span><span class="n">element</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">is_described</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", descriptor="</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">">["</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">s</span><span class="p">.</span><span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">LIST</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"list["</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">s</span><span class="p">.</span><span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">MAP</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"map{"</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">s</span><span class="p">.</span><span class="n">size</span><span class="o">/</span><span class="mi">2</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">":"</span><span class="p">;</span> <span class="c1">// key:value</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"}"</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">DESCRIBED</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"described("</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span> <span class="c1">// Descriptor</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span> <span class="c1">// value</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">default</span><span class="o">:</span>
+ <span class="c1">// A simple type. We could continue the switch for all AMQP types but</span>
+ <span class="c1">// we will take a short cut and extract to another value and print that.</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v2</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">v2</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">type</span> <span class="o"><<</span> <span class="s">"("</span> <span class="o"><<</span> <span class="n">v2</span> <span class="o"><<</span> <span class="s">")"</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">// Print a value, for example purposes. Normal code can use operator<<</span>
+<span class="kt">void</span> <span class="n">print</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">&</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">decoder</span> <span class="n">d</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">rewind</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">boolalpha</span><span class="p">;</span> <span class="c1">// Print boolean as true/false.</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">more</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">more</span><span class="p">())</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="encode_decode.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp
new file mode 100644
index 0000000..03daa3b
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp
@@ -0,0 +1,34 @@
+#ifndef FAKE_CPP11_HPP
+#define FAKE_CPP11_HPP
+
+/*
+ * 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.
+ */
+
+/// These definitions allow us to use some new C++11 features in previous compilers
+///
+/// It is strongly recommended not to copy this - just use C++11/C++14 instead!
+
+#if __cplusplus < 201103L
+#define OVERRIDE
+#else
+#define OVERRIDE override
+#endif
+
+
+#endif // FAKE_CPP11_HPP
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html.in
new file mode 100644
index 0000000..45258cb
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html.in
@@ -0,0 +1,22 @@
+
+<h1>fake_cpp11.hpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#ifndef FAKE_CPP11_HPP</span>
+<span class="cp">#define FAKE_CPP11_HPP</span>
+
+
+
+<span class="c1">/// These definitions allow us to use some new C++11 features in previous compilers</span>
+<span class="c1">///</span>
+<span class="c1">/// It is strongly recommended not to copy this - just use C++11/C++14 instead!</span>
+
+<span class="cp">#if __cplusplus < 201103L</span>
+<span class="cp">#define OVERRIDE</span>
+<span class="cp">#else</span>
+<span class="cp">#define OVERRIDE override</span>
+<span class="cp">#endif</span>
+
+
+<span class="cp">#endif </span><span class="c1">// FAKE_CPP11_HPP</span>
+</pre></div>
+
+<p><a href="fake_cpp11.hpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp
new file mode 100644
index 0000000..2eedd65
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp
@@ -0,0 +1,233 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/listener.hpp>
+#include <proton/connection.hpp>
+#include <proton/connection_options.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sender.hpp>
+#include <proton/tracker.hpp>
+#include <proton/delivery.hpp>
+
+#include <iostream>
+#include <sstream>
+
+#include "fake_cpp11.hpp"
+
+namespace {
+
+bool verbose = true;
+
+void verify(bool success, const std::string &msg) {
+ if (!success)
+ throw std::runtime_error("example failure:" + msg);
+ else {
+ std::cout << "success: " << msg << std::endl;
+ if (verbose) std::cout << std::endl;
+ }
+}
+
+}
+
+// flow_sender manages the incoming connection and acts as the message sender.
+class flow_sender : public proton::messaging_handler {
+ private:
+ int available; // Number of messages the sender may send assuming sufficient credit.
+ int sequence;
+
+ public:
+ flow_sender() : available(0), sequence(0) {}
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_sender in \"on_sendable\" with credit " << s.credit()
+ << " and " << available << " available messages" << std::endl;
+ for (int i = sequence; available && s.credit() > 0; i++) {
+ std::ostringstream mbody;
+ mbody << "flow_sender message " << sequence++;
+ proton::message m(mbody.str());
+ s.send(m);
+ available--;
+ }
+ }
+
+ void on_sender_drain_start(proton::sender &s) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_sender in \"on_drain_start\" with credit " << s.credit()
+ << " making an internal call to \"on_sendble\"" << std::endl;
+ on_sendable(s); // send as many as we can
+ if (s.credit()) {
+ s.return_credit(); // return the rest
+ }
+ }
+
+ void set_available(int n) { available = n; }
+};
+
+class flow_receiver : public proton::messaging_handler {
+ public:
+ int stage;
+ int received;
+ flow_sender &sender;
+
+ flow_receiver(flow_sender &s) : stage(0), sender(s) {}
+
+ void example_setup(int n) {
+ received = 0;
+ sender.set_available(n);
+ }
+
+ void run_stage(proton::receiver &r, const std::string &caller) {
+ // Serialize the progression of the flow control examples.
+ switch (stage) {
+ case 0:
+ if (verbose) std::cout << "Example 1. Simple use of credit." << std::endl;
+ // TODO: add timeout callbacks, show no messages until credit.
+ example_setup(2);
+ r.add_credit(2);
+ break;
+ case 1:
+ if (r.credit() > 0) return;
+ verify(received == 2, "Example 1: simple credit");
+
+ if (verbose) std::cout << "Example 2. Use basic drain, sender has 3 \"immediate\" messages." << std::endl;
+ example_setup(3);
+ r.add_credit(5); // ask for up to 5
+ r.drain(); // but only use what's available
+ break;
+ case 2:
+ if (caller == "on_message") return;
+ if (caller == "on_receiver_drain_finish") {
+ // Note that unused credit of 2 at sender is returned and is now 0.
+ verify(received == 3 && r.credit() == 0, "Example 2: basic drain");
+
+ if (verbose) std::cout << "Example 3. Drain use with no credit." << std::endl;
+ example_setup(0);
+ r.drain();
+ break;
+ }
+ verify(false, "example 2 run_stage");
+ return;
+
+ case 3:
+ verify(caller == "on_receiver_drain_finish" && received == 0, "Example 3: drain without credit");
+
+ if (verbose) std::cout << "Example 4. Show using high(10)/low(3) watermark for 25 messages." << std::endl;
+ example_setup(25);
+ r.add_credit(10);
+ break;
+
+ case 4:
+ if (received < 25) {
+ // Top up credit as needed.
+ uint32_t credit = r.credit();
+ if (credit <= 3) {
+ uint32_t new_credit = 10;
+ uint32_t remaining = 25 - received;
+ if (new_credit > remaining)
+ new_credit = remaining;
+ if (new_credit > credit) {
+ r.add_credit(new_credit - credit);
+ if (verbose)
+ std::cout << "flow_receiver adding credit for " << new_credit - credit
+ << " messages" << std::endl;
+ }
+ }
+ return;
+ }
+
+ verify(received == 25 && r.credit() == 0, "Exmaple 4: high/low watermark");
+ r.connection().close();
+ break;
+
+ default:
+ throw std::runtime_error("run_stage sequencing error");
+ }
+ stage++;
+ }
+
+ void on_receiver_open(proton::receiver &r) OVERRIDE {
+ run_stage(r, "on_receiver_open");
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_receiver in \"on_message\" with " << m.body() << std::endl;
+ proton::receiver r(d.receiver());
+ received++;
+ run_stage(r, "on_message");
+ }
+
+ void on_receiver_drain_finish(proton::receiver &r) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_receiver in \"on_receiver_drain_finish\"" << std::endl;
+ run_stage(r, "on_receiver_drain_finish");
+ }
+};
+
+
+class flow_control : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+ flow_sender send_handler;
+ flow_receiver receive_handler;
+
+ public:
+ flow_control(const std::string& u) : url(u), receive_handler(send_handler) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url, proton::connection_options().handler(send_handler));
+ c.connect(url);
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ if (c.active()) {
+ // outbound connection
+ c.open_receiver("flow_example", proton::receiver_options().handler(receive_handler).credit_window(0));
+ }
+ }
+
+ void on_connection_close(proton::connection &) OVERRIDE {
+ listener.stop();
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string quiet_arg("-quiet");
+ if (argc > 2 && quiet_arg == argv[2])
+ verbose = false;
+ try {
+ // Pick an "unusual" port since we are going to be talking to
+ // ourselves, not a broker.
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:8888/examples";
+
+ flow_control fc(url);
+ proton::default_container(fc).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[19/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp
new file mode 100755
index 0000000..91a4230
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp
@@ -0,0 +1,179 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection_options.hpp>
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/ssl.hpp>
+#include <proton/tracker.hpp>
+#include <proton/transport.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+using proton::connection_options;
+using proton::ssl_client_options;
+using proton::ssl_server_options;
+using proton::ssl_certificate;
+
+// Helper functions defined below.
+bool using_OpenSSL();
+std::string platform_CA(const std::string &base_name);
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd);
+static std::string cert_directory;
+std::string find_CN(const std::string &);
+
+
+struct server_handler : public proton::messaging_handler {
+ std::string url;
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "Inbound server connection connected via SSL. Protocol: " <<
+ c.transport().ssl().protocol() << std::endl;
+ c.container().stop_listening(url);
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+
+class hello_world_direct : public proton::messaging_handler {
+ private:
+ std::string url;
+ server_handler s_handler;
+
+ public:
+ hello_world_direct(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ // Configure listener. Details vary by platform.
+ ssl_certificate server_cert = platform_certificate("tserver", "tserverpw");
+ ssl_server_options ssl_srv(server_cert);
+ connection_options server_opts;
+ server_opts.ssl_server_options(ssl_srv).handler(s_handler);
+ c.server_connection_options(server_opts);
+
+ // Configure client with a Certificate Authority database populated with the server's self signed certificate.
+ // Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification
+ // from VERIFY_PEER_NAME to VERIFY_PEER.
+ connection_options client_opts;
+ ssl_client_options ssl_cli(platform_CA("tserver"), proton::ssl::VERIFY_PEER);
+ client_opts.ssl_client_options(ssl_cli);
+ c.client_connection_options(client_opts);
+
+ s_handler.url = url;
+ c.listen(url);
+ c.open_sender(url);
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::string subject = c.transport().ssl().remote_subject();
+ std::cout << "Outgoing client connection connected via SSL. Server certificate identity " <<
+ find_CN(subject) << std::endl;
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m;
+ m.body("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ // All done.
+ t.connection().close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ // Pick an "unusual" port since we are going to be talking to ourselves, not a broker.
+ // Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.
+ std::string url = argc > 1 ? argv[1] : "amqps://127.0.0.1:8888/examples";
+ // Location of certificates and private key information:
+ if (argc > 2) {
+ cert_directory = argv[2];
+ size_t sz = cert_directory.size();
+ if (sz && cert_directory[sz -1] != '/')
+ cert_directory.append("/");
+ }
+ else cert_directory = "ssl_certs/";
+
+ hello_world_direct hwd(url);
+ proton::default_container(hwd).run();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ return 1;
+}
+
+
+bool using_OpenSSL() {
+ // Current defaults.
+#if defined(WIN32)
+ return false;
+#else
+ return true;
+#endif
+}
+
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd) {
+ if (using_OpenSSL()) {
+ // The first argument will be the name of the file containing the public certificate, the
+ // second argument will be the name of the file containing the private key.
+ return ssl_certificate(cert_directory + base_name + "-certificate.pem",
+ cert_directory + base_name + "-private-key.pem", passwd);
+ }
+ else {
+ // Windows SChannel
+ // The first argument will be the database or store that contains one or more complete certificates
+ // (public and private data). The second will be an optional name of the certificate in the store
+ // (not used in this example with one certificate per store).
+ return ssl_certificate(cert_directory + base_name + "-full.p12", "", passwd);
+ }
+}
+
+std::string platform_CA(const std::string &base_name) {
+ if (using_OpenSSL()) {
+ // In this simple example with self-signed certificates, the peer's certificate is the CA database.
+ return cert_directory + base_name + "-certificate.pem";
+ }
+ else {
+ // Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.
+ return cert_directory + base_name + "-certificate.p12";
+ }
+}
+
+std::string find_CN(const std::string &subject) {
+ // The subject string is returned with different whitespace and component ordering between platforms.
+ // Here we just return the common name by searching for "CN=...." in the subject, knowing that
+ // the test certificates do not contain any escaped characters.
+ size_t pos = subject.find("CN=");
+ if (pos == std::string::npos) throw std::runtime_error("No common name in certificate subject");
+ std::string cn = subject.substr(pos);
+ pos = cn.find(',');
+ return pos == std::string::npos ? cn : cn.substr(0, pos);
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html
new file mode 100644
index 0000000..0f15d4d
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html
@@ -0,0 +1,307 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>ssl.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>ssl.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>ssl.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/ssl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_client_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_server_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_certificate</span><span class="p">;</span>
+
+<span class="c1">// Helper functions defined below.</span>
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">();</span>
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">);</span>
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cert_directory</span><span class="p">;</span>
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="p">);</span>
+
+
+<span class="k">struct</span> <span class="nl">server_handler</span> <span class="p">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="kt">void</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound server connection connected via SSL. Protocol: "</span> <span class="o"><<</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">protocol</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">container</span><span class="p">().</span><span class="n">stop_listening</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="nf">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">hello_world_direct</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">server_handler</span> <span class="n">s_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world_direct</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// Configure listener. Details vary by platform.</span>
+ <span class="n">ssl_certificate</span> <span class="n">server_cert</span> <span class="o">=</span> <span class="n">platform_certificate</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">,</span> <span class="s">"tserverpw"</span><span class="p">);</span>
+ <span class="n">ssl_server_options</span> <span class="nf">ssl_srv</span><span class="p">(</span><span class="n">server_cert</span><span class="p">);</span>
+ <span class="n">connection_options</span> <span class="n">server_opts</span><span class="p">;</span>
+ <span class="n">server_opts</span><span class="p">.</span><span class="n">ssl_server_options</span><span class="p">(</span><span class="n">ssl_srv</span><span class="p">).</span><span class="n">handler</span><span class="p">(</span><span class="n">s_handler</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">server_connection_options</span><span class="p">(</span><span class="n">server_opts</span><span class="p">);</span>
+
+ <span class="c1">// Configure client with a Certificate Authority database populated with the server's self signed certificate.</span>
+ <span class="c1">// Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification</span>
+ <span class="c1">// from VERIFY_PEER_NAME to VERIFY_PEER.</span>
+ <span class="n">connection_options</span> <span class="n">client_opts</span><span class="p">;</span>
+ <span class="n">ssl_client_options</span> <span class="nf">ssl_cli</span><span class="p">(</span><span class="n">platform_CA</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">),</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl</span><span class="o">::</span><span class="n">VERIFY_PEER</span><span class="p">);</span>
+ <span class="n">client_opts</span><span class="p">.</span><span class="n">ssl_client_options</span><span class="p">(</span><span class="n">ssl_cli</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">client_connection_options</span><span class="p">(</span><span class="n">client_opts</span><span class="p">);</span>
+
+ <span class="n">s_handler</span><span class="p">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">remote_subject</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Outgoing client connection connected via SSL. Server certificate identity "</span> <span class="o"><<</span>
+ <span class="n">find_CN</span><span class="p">(</span><span class="n">subject</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// All done.</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to ourselves, not a broker.</span>
+ <span class="c1">// Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"amqps://127.0.0.1:8888/examples"</span><span class="p">;</span>
+ <span class="c1">// Location of certificates and private key information:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">></span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">cert_directory</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
+ <span class="kt">size_t</span> <span class="n">sz</span> <span class="o">=</span> <span class="n">cert_directory</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">sz</span> <span class="o">&&</span> <span class="n">cert_directory</span><span class="p">[</span><span class="n">sz</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'/'</span><span class="p">)</span>
+ <span class="n">cert_directory</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="s">"/"</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="n">cert_directory</span> <span class="o">=</span> <span class="s">"ssl_certs/"</span><span class="p">;</span>
+
+ <span class="n">hello_world_direct</span> <span class="n">hwd</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hwd</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+
+
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">()</span> <span class="p">{</span>
+ <span class="c1">// Current defaults.</span>
+<span class="cp">#if defined(WIN32)</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+<span class="cp">#else</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+<span class="cp">#endif</span>
+<span class="p">}</span>
+
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// The first argument will be the name of the file containing the public certificate, the</span>
+ <span class="c1">// second argument will be the name of the file containing the private key.</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">,</span>
+ <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-private-key.pem"</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel</span>
+ <span class="c1">// The first argument will be the database or store that contains one or more complete certificates</span>
+ <span class="c1">// (public and private data). The second will be an optional name of the certificate in the store</span>
+ <span class="c1">// (not used in this example with one certificate per store).</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-full.p12"</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// In this simple example with self-signed certificates, the peer's certificate is the CA database.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.p12"</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">subject</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// The subject string is returned with different whitespace and component ordering between platforms.</span>
+ <span class="c1">// Here we just return the common name by searching for "CN=...." in the subject, knowing that</span>
+ <span class="c1">// the test certificates do not contain any escaped characters.</span>
+ <span class="kt">size_t</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">"CN="</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span> <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"No common name in certificate subject"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cn</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">pos</span><span class="p">);</span>
+ <span class="n">pos</span> <span class="o">=</span> <span class="n">cn</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="sc">','</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span> <span class="o">?</span> <span class="nl">cn</span> <span class="p">:</span> <span class="n">cn</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">pos</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="ssl.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp
new file mode 100755
index 0000000..42b6593
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp
@@ -0,0 +1,193 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/connection_options.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sasl.hpp>
+#include <proton/ssl.hpp>
+#include <proton/tracker.hpp>
+#include <proton/transport.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+using proton::connection_options;
+using proton::ssl_client_options;
+using proton::ssl_server_options;
+using proton::ssl_certificate;
+using proton::sasl;
+
+// Helper functions defined below.
+bool using_OpenSSL();
+std::string platform_CA(const std::string &base_name);
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd);
+static std::string cert_directory;
+static std::string find_CN(const std::string &);
+
+
+struct server_handler : public proton::messaging_handler {
+ proton::listener listener;
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "Inbound server connection connected via SSL. Protocol: " <<
+ c.transport().ssl().protocol() << std::endl;
+ if (c.transport().sasl().outcome() == sasl::OK) {
+ std::string subject = c.transport().ssl().remote_subject();
+ std::cout << "Inbound client certificate identity " << find_CN(subject) << std::endl;
+ }
+ else {
+ std::cout << "Inbound client authentication failed" <<std::endl;
+ c.close();
+ }
+ listener.stop();
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+
+class hello_world_direct : public proton::messaging_handler {
+ private:
+ std::string url;
+ server_handler s_handler;
+
+ public:
+ hello_world_direct(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ // Configure listener. Details vary by platform.
+ ssl_certificate server_cert = platform_certificate("tserver", "tserverpw");
+ std::string client_CA = platform_CA("tclient");
+ // Specify an SSL domain with CA's for client certificate verification.
+ ssl_server_options srv_ssl(server_cert, client_CA);
+ connection_options server_opts;
+ server_opts.ssl_server_options(srv_ssl).handler(s_handler);
+ server_opts.sasl_allowed_mechs("EXTERNAL");
+ c.server_connection_options(server_opts);
+
+ // Configure client.
+ ssl_certificate client_cert = platform_certificate("tclient", "tclientpw");
+ std::string server_CA = platform_CA("tserver");
+ // Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification
+ // from VERIFY_PEER_NAME to VERIFY_PEER.
+ ssl_client_options ssl_cli(client_cert, server_CA, proton::ssl::VERIFY_PEER);
+ connection_options client_opts;
+ client_opts.ssl_client_options(ssl_cli).sasl_allowed_mechs("EXTERNAL");
+ c.client_connection_options(client_opts);
+
+ s_handler.listener = c.listen(url);
+ c.open_sender(url);
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::string subject = c.transport().ssl().remote_subject();
+ std::cout << "Outgoing client connection connected via SSL. Server certificate identity " <<
+ find_CN(subject) << std::endl;
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m;
+ m.body("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ // All done.
+ t.connection().close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ // Pick an "unusual" port since we are going to be talking to ourselves, not a broker.
+ // Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.
+ std::string url = argc > 1 ? argv[1] : "amqps://127.0.0.1:8888/examples";
+ // Location of certificates and private key information:
+ if (argc > 2) {
+ cert_directory = argv[2];
+ size_t sz = cert_directory.size();
+ if (sz && cert_directory[sz -1] != '/')
+ cert_directory.append("/");
+ }
+ else cert_directory = "ssl_certs/";
+
+ hello_world_direct hwd(url);
+ proton::default_container(hwd).run();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ return 1;
+}
+
+
+bool using_OpenSSL() {
+ // Current defaults.
+#if defined(WIN32)
+ return false;
+#else
+ return true;
+#endif
+}
+
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd) {
+ if (using_OpenSSL()) {
+ // The first argument will be the name of the file containing the public certificate, the
+ // second argument will be the name of the file containing the private key.
+ return ssl_certificate(cert_directory + base_name + "-certificate.pem",
+ cert_directory + base_name + "-private-key.pem", passwd);
+ }
+ else {
+ // Windows SChannel
+ // The first argument will be the database or store that contains one or more complete certificates
+ // (public and private data). The second will be an optional name of the certificate in the store
+ // (not used in this example with one certificate per store).
+ return ssl_certificate(cert_directory + base_name + "-full.p12", "", passwd);
+ }
+}
+
+std::string platform_CA(const std::string &base_name) {
+ if (using_OpenSSL()) {
+ // In this simple example with self-signed certificates, the peer's certificate is the CA database.
+ return cert_directory + base_name + "-certificate.pem";
+ }
+ else {
+ // Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.
+ return cert_directory + base_name + "-certificate.p12";
+ }
+}
+
+std::string find_CN(const std::string &subject) {
+ // The subject string is returned with different whitespace and component ordering between platforms.
+ // Here we just return the common name by searching for "CN=...." in the subject, knowing that
+ // the test certificates do not contain any escaped characters.
+ size_t pos = subject.find("CN=");
+ if (pos == std::string::npos) throw std::runtime_error("No common name in certificate subject");
+ std::string cn = subject.substr(pos);
+ pos = cn.find(',');
+ return pos == std::string::npos ? cn : cn.substr(0, pos);
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html
new file mode 100644
index 0000000..f3f4712
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>ssl_client_cert.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>ssl_client_cert.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>ssl_client_cert.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sasl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/ssl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_client_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_server_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_certificate</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">sasl</span><span class="p">;</span>
+
+<span class="c1">// Helper functions defined below.</span>
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">();</span>
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">);</span>
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cert_directory</span><span class="p">;</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="p">);</span>
+
+
+<span class="k">struct</span> <span class="nl">server_handler</span> <span class="p">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">listener</span> <span class="n">listener</span><span class="p">;</span>
+
+ <span class="kt">void</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound server connection connected via SSL. Protocol: "</span> <span class="o"><<</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">protocol</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">sasl</span><span class="p">().</span><span class="n">outcome</span><span class="p">()</span> <span class="o">==</span> <span class="n">sasl</span><span class="o">::</span><span class="n">OK</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">remote_subject</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound client certificate identity "</span> <span class="o"><<</span> <span class="n">find_CN</span><span class="p">(</span><span class="n">subject</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound client authentication failed"</span> <span class="o"><<</span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="n">listener</span><span class="p">.</span><span class="n">stop</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="nf">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">hello_world_direct</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">server_handler</span> <span class="n">s_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world_direct</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// Configure listener. Details vary by platform.</span>
+ <span class="n">ssl_certificate</span> <span class="n">server_cert</span> <span class="o">=</span> <span class="n">platform_certificate</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">,</span> <span class="s">"tserverpw"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">client_CA</span> <span class="o">=</span> <span class="n">platform_CA</span><span class="p">(</span><span class="s">"tclient"</span><span class="p">);</span>
+ <span class="c1">// Specify an SSL domain with CA's for client certificate verification.</span>
+ <span class="n">ssl_server_options</span> <span class="nf">srv_ssl</span><span class="p">(</span><span class="n">server_cert</span><span class="p">,</span> <span class="n">client_CA</span><span class="p">);</span>
+ <span class="n">connection_options</span> <span class="n">server_opts</span><span class="p">;</span>
+ <span class="n">server_opts</span><span class="p">.</span><span class="n">ssl_server_options</span><span class="p">(</span><span class="n">srv_ssl</span><span class="p">).</span><span class="n">handler</span><span class="p">(</span><span class="n">s_handler</span><span class="p">);</span>
+ <span class="n">server_opts</span><span class="p">.</span><span class="n">sasl_allowed_mechs</span><span class="p">(</span><span class="s">"EXTERNAL"</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">server_connection_options</span><span class="p">(</span><span class="n">server_opts</span><span class="p">);</span>
+
+ <span class="c1">// Configure client.</span>
+ <span class="n">ssl_certificate</span> <span class="n">client_cert</span> <span class="o">=</span> <span class="n">platform_certificate</span><span class="p">(</span><span class="s">"tclient"</span><span class="p">,</span> <span class="s">"tclientpw"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">server_CA</span> <span class="o">=</span> <span class="n">platform_CA</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">);</span>
+ <span class="c1">// Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification</span>
+ <span class="c1">// from VERIFY_PEER_NAME to VERIFY_PEER.</span>
+ <span class="n">ssl_client_options</span> <span class="nf">ssl_cli</span><span class="p">(</span><span class="n">client_cert</span><span class="p">,</span> <span class="n">server_CA</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl</span><span class="o">::</span><span class="n">VERIFY_PEER</span><span class="p">);</span>
+ <span class="n">connection_options</span> <span class="n">client_opts</span><span class="p">;</span>
+ <span class="n">client_opts</span><span class="p">.</span><span class="n">ssl_client_options</span><span class="p">(</span><span class="n">ssl_cli</span><span class="p">).</span><span class="n">sasl_allowed_mechs</span><span class="p">(</span><span class="s">"EXTERNAL"</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">client_connection_options</span><span class="p">(</span><span class="n">client_opts</span><span class="p">);</span>
+
+ <span class="n">s_handler</span><span class="p">.</span><span class="n">listener</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">remote_subject</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Outgoing client connection connected via SSL. Server certificate identity "</span> <span class="o"><<</span>
+ <span class="n">find_CN</span><span class="p">(</span><span class="n">subject</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// All done.</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to ourselves, not a broker.</span>
+ <span class="c1">// Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"amqps://127.0.0.1:8888/examples"</span><span class="p">;</span>
+ <span class="c1">// Location of certificates and private key information:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">></span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">cert_directory</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
+ <span class="kt">size_t</span> <span class="n">sz</span> <span class="o">=</span> <span class="n">cert_directory</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">sz</span> <span class="o">&&</span> <span class="n">cert_directory</span><span class="p">[</span><span class="n">sz</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'/'</span><span class="p">)</span>
+ <span class="n">cert_directory</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="s">"/"</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="n">cert_directory</span> <span class="o">=</span> <span class="s">"ssl_certs/"</span><span class="p">;</span>
+
+ <span class="n">hello_world_direct</span> <span class="n">hwd</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hwd</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+
+
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">()</span> <span class="p">{</span>
+ <span class="c1">// Current defaults.</span>
+<span class="cp">#if defined(WIN32)</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+<span class="cp">#else</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+<span class="cp">#endif</span>
+<span class="p">}</span>
+
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// The first argument will be the name of the file containing the public certificate, the</span>
+ <span class="c1">// second argument will be the name of the file containing the private key.</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">,</span>
+ <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-private-key.pem"</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel</span>
+ <span class="c1">// The first argument will be the database or store that contains one or more complete certificates</span>
+ <span class="c1">// (public and private data). The second will be an optional name of the certificate in the store</span>
+ <span class="c1">// (not used in this example with one certificate per store).</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-full.p12"</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// In this simple example with self-signed certificates, the peer's certificate is the CA database.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.p12"</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">subject</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// The subject string is returned with different whitespace and component ordering between platforms.</span>
+ <span class="c1">// Here we just return the common name by searching for "CN=...." in the subject, knowing that</span>
+ <span class="c1">// the test certificates do not contain any escaped characters.</span>
+ <span class="kt">size_t</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">"CN="</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span> <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"No common name in certificate subject"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cn</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">pos</span><span class="p">);</span>
+ <span class="n">pos</span> <span class="o">=</span> <span class="n">cn</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="sc">','</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span> <span class="o">?</span> <span class="nl">cn</span> <span class="p">:</span> <span class="n">cn</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">pos</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="ssl_client_cert.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py
new file mode 100755
index 0000000..fed7fb2
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/abstract_server.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton_server import Server
+
+class Application(Server):
+ def __init__(self, host, address):
+ super(Application, self).__init__(host, address)
+
+ def on_request(self, request, reply_to):
+ response = request.upper()
+ self.send(response, reply_to)
+ print("Request from: %s" % reply_to)
+
+try:
+ Application("localhost:5672", "examples").run()
+except KeyboardInterrupt: pass
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[02/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py
new file mode 100755
index 0000000..8cebaad
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Server(MessagingHandler):
+ def __init__(self, url, address):
+ super(Server, self).__init__()
+ self.url = url
+ self.address = address
+
+ def on_start(self, event):
+ print("Listening on", self.url)
+ self.container = event.container
+ self.conn = event.container.connect(self.url)
+ self.receiver = event.container.create_receiver(self.conn, self.address)
+ self.server = self.container.create_sender(self.conn, None)
+
+ def on_message(self, event):
+ print("Received", event.message)
+ self.server.send(Message(address=event.message.reply_to, body=event.message.body.upper(),
+ correlation_id=event.message.correlation_id))
+
+try:
+ Container(Server("0.0.0.0:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html.in
new file mode 100644
index 0000000..dbb8edc
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/server.py.html.in
@@ -0,0 +1,31 @@
+
+<h1>server.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Listening on"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Received"</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
+ <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">))</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Server</span><span class="p">(</span><span class="s2">"0.0.0.0:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="server.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py
new file mode 100755
index 0000000..a9910f1
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import generate_uuid, Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Server(MessagingHandler):
+ def __init__(self, url):
+ super(Server, self).__init__()
+ self.url = url
+ self.senders = {}
+
+ def on_start(self, event):
+ print("Listening on", self.url)
+ self.container = event.container
+ self.acceptor = event.container.listen(self.url)
+
+ def on_link_opening(self, event):
+ if event.link.is_sender:
+ if event.link.remote_source and event.link.remote_source.dynamic:
+ event.link.source.address = str(generate_uuid())
+ self.senders[event.link.source.address] = event.link
+ elif event.link.remote_target and event.link.remote_target.address:
+ event.link.target.address = event.link.remote_target.address
+ self.senders[event.link.remote_target.address] = event.link
+ elif event.link.remote_source:
+ event.link.source.address = event.link.remote_source.address
+ elif event.link.remote_target:
+ event.link.target.address = event.link.remote_target.address
+
+ def on_message(self, event):
+ print("Received", event.message)
+ sender = self.senders.get(event.message.reply_to)
+ if not sender:
+ print("No link for reply")
+ return
+ sender.send(Message(address=event.message.reply_to, body=event.message.body.upper(),
+ correlation_id=event.message.correlation_id))
+
+try:
+ Container(Server("0.0.0.0:8888")).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html.in
new file mode 100644
index 0000000..b642d52
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_direct.py.html.in
@@ -0,0 +1,46 @@
+
+<h1>server_direct.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">generate_uuid</span><span class="p">,</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="p">{}</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Listening on"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_link_opening</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">is_sender</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">dynamic</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">generate_uuid</span><span class="p">())</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span><span class="p">]</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">source</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_source</span><span class="o">.</span><span class="n">address</span>
+ <span class="k">elif</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">link</span><span class="o">.</span><span class="n">remote_target</span><span class="o">.</span><span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Received"</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"No link for reply"</span><span class="p">)</span>
+ <span class="k">return</span>
+ <span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
+ <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">))</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Server</span><span class="p">(</span><span class="s2">"0.0.0.0:8888"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="server_direct.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py
new file mode 100755
index 0000000..51e734c
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.reactor import Container
+from proton.handlers import MessagingHandler, TransactionHandler
+
+class TxRequest(TransactionHandler):
+ def __init__(self, response, sender, request_delivery):
+ super(TxRequest, self).__init__()
+ self.response = response
+ self.sender = sender
+ self.request_delivery = request_delivery
+
+ def on_transaction_declared(self, event):
+ event.transaction.send(self.sender, self.response)
+ event.transaction.accept(self.request_delivery)
+ event.transaction.commit()
+
+ def on_transaction_committed(self, event):
+ print("Request processed successfully")
+
+ def on_transaction_aborted(self, event):
+ print("Request processing aborted")
+
+
+class TxServer(MessagingHandler):
+ def __init__(self, host, address):
+ super(TxServer, self).__init__(auto_accept=False)
+ self.host = host
+ self.address = address
+
+ def on_start(self, event):
+ self.container = event.container
+ self.conn = event.container.connect(self.host, reconnect=False)
+ self.receiver = event.container.create_receiver(self.conn, self.address)
+ self.senders = {}
+ self.relay = None
+
+ def on_message(self, event):
+ sender = self.relay
+ if not sender:
+ sender = self.senders.get(event.message.reply_to)
+ if not sender:
+ sender = self.container.create_sender(self.conn, event.message.reply_to)
+ self.senders[event.message.reply_to] = sender
+
+ response = Message(address=event.message.reply_to, body=event.message.body.upper(),
+ correlation_id=event.message.correlation_id)
+ self.container.declare_transaction(self.conn, handler=TxRequest(response, sender, event.delivery))
+
+ def on_connection_open(self, event):
+ if event.connection.remote_offered_capabilities and 'ANONYMOUS-RELAY' in event.connection.remote_offered_capabilities:
+ self.relay = self.container.create_sender(self.conn, None)
+
+try:
+ Container(TxServer("localhost:5672", "examples")).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html.in
new file mode 100644
index 0000000..5434190
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/server_tx.py.html.in
@@ -0,0 +1,61 @@
+
+<h1>server_tx.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span><span class="p">,</span> <span class="n">TransactionHandler</span>
+
+<span class="k">class</span> <span class="nc">TxRequest</span><span class="p">(</span><span class="n">TransactionHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">request_delivery</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxRequest</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">response</span> <span class="o">=</span> <span class="n">response</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="n">sender</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">request_delivery</span> <span class="o">=</span> <span class="n">request_delivery</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_declared</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">response</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request_delivery</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_committed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Request processed successfully"</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_transaction_aborted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Request processing aborted"</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="nc">TxServer</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">TxServer</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="p">,</span> <span class="n">reconnect</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span> <span class="o">=</span> <span class="p">{}</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">relay</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">sender</span><span class="p">:</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">senders</span><span class="p">[</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender</span>
+
+ <span class="n">response</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">address</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span>
+ <span class="n">correlation_id</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">correlation_id</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">declare_transaction</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">handler</span><span class="o">=</span><span class="n">TxRequest</span><span class="p">(</span><span class="n">response</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">remote_offered_capabilities</span> <span class="ow">and</span> <span class="s1">'ANONYMOUS-RELAY'</span> <span class="ow">in</span> <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">remote_offered_capabilities</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">relay</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">TxServer</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="server_tx.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py
new file mode 100755
index 0000000..5322500
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Recv(MessagingHandler):
+ def __init__(self, url, count):
+ super(Recv, self).__init__()
+ self.url = url
+ self.expected = count
+ self.received = 0
+
+ def on_start(self, event):
+ event.container.create_receiver(self.url)
+
+ def on_message(self, event):
+ if event.message.id and event.message.id < self.received:
+ # ignore duplicate message
+ return
+ if self.expected == 0 or self.received < self.expected:
+ print(event.message.body)
+ self.received += 1
+ if self.received == self.expected:
+ event.receiver.close()
+ event.connection.close()
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Recv(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html.in
new file mode 100644
index 0000000..9e6316b
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html.in
@@ -0,0 +1,41 @@
+
+<h1>simple_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span><span class="p">:</span>
+ <span class="c1"># ignore duplicate message</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="simple_recv.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py
new file mode 100755
index 0000000..7717a16
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Send(MessagingHandler):
+ def __init__(self, url, messages):
+ super(Send, self).__init__()
+ self.url = url
+ self.sent = 0
+ self.confirmed = 0
+ self.total = messages
+
+ def on_start(self, event):
+ event.container.create_sender(self.url)
+
+ def on_sendable(self, event):
+ while event.sender.credit and self.sent < self.total:
+ msg = Message(id=(self.sent+1), body={'sequence':(self.sent+1)})
+ event.sender.send(msg)
+ self.sent += 1
+
+ def on_accepted(self, event):
+ self.confirmed += 1
+ if self.confirmed == self.total:
+ print("all messages confirmed")
+ event.connection.close()
+
+ def on_disconnected(self, event):
+ self.sent = self.confirmed
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to send (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Send(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html.in
new file mode 100644
index 0000000..aa03913
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html.in
@@ -0,0 +1,48 @@
+
+<h1>simple_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">while</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s1">'sequence'</span><span class="p">:(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">)})</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"all messages confirmed"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="simple_send.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py
new file mode 100755
index 0000000..95a5650
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+"""
+Demonstrates the client side of the synchronous request-response pattern
+(also known as RPC or Remote Procecure Call) using proton.
+
+"""
+from __future__ import print_function
+
+import optparse
+from proton import Message, Url, ConnectionException, Timeout
+from proton.utils import SyncRequestResponse, BlockingConnection
+from proton.handlers import IncomingMessageHandler
+import sys
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send requests to the supplied address and print responses.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-t", "--timeout", type="float", default=5,
+ help="Give up after this time out (default %default)")
+opts, args = parser.parse_args()
+
+url = Url(opts.address)
+client = SyncRequestResponse(BlockingConnection(url, timeout=opts.timeout), url.path)
+
+try:
+ REQUESTS= ["Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe."]
+ for request in REQUESTS:
+ response = client.call(Message(body=request))
+ print("%s => %s" % (request, response.body))
+finally:
+ client.connection.close()
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html.in
new file mode 100644
index 0000000..c2f1637
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html.in
@@ -0,0 +1,39 @@
+
+<h1>sync_client.py</h1>
+<div class="highlight"><pre><span></span><span class="sd">"""</span>
+<span class="sd">Demonstrates the client side of the synchronous request-response pattern</span>
+<span class="sd">(also known as RPC or Remote Procecure Call) using proton.</span>
+
+<span class="sd">"""</span>
+<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span><span class="p">,</span> <span class="n">Url</span><span class="p">,</span> <span class="n">ConnectionException</span><span class="p">,</span> <span class="n">Timeout</span>
+<span class="kn">from</span> <span class="nn">proton.utils</span> <span class="kn">import</span> <span class="n">SyncRequestResponse</span><span class="p">,</span> <span class="n">BlockingConnection</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IncomingMessageHandler</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send requests to the supplied address and print responses."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"--timeout"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"float"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"Give up after this time out (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+<span class="n">client</span> <span class="o">=</span> <span class="n">SyncRequestResponse</span><span class="p">(</span><span class="n">BlockingConnection</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span> <span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">REQUESTS</span><span class="o">=</span> <span class="p">[</span><span class="s2">"Twas brillig, and the slithy toves"</span><span class="p">,</span>
+ <span class="s2">"Did gire and gymble in the wabe."</span><span class="p">,</span>
+ <span class="s2">"All mimsy were the borogroves,"</span><span class="p">,</span>
+ <span class="s2">"And the mome raths outgrabe."</span><span class="p">]</span>
+ <span class="k">for</span> <span class="n">request</span> <span class="ow">in</span> <span class="n">REQUESTS</span><span class="p">:</span>
+ <span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="n">request</span><span class="p">))</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
+<span class="k">finally</span><span class="p">:</span>
+ <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="sync_client.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py
new file mode 100644
index 0000000..3d97b97
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py
@@ -0,0 +1,151 @@
+#
+# 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.
+#
+
+import sys
+import subprocess
+import time
+import unittest
+
+if sys.version_info[0] == 2:
+ _unicode_prefix = 'u'
+else:
+ _unicode_prefix = ''
+
+
+class ExamplesTest(unittest.TestCase):
+ def test_helloworld(self, example="helloworld.py"):
+ p = subprocess.Popen([example], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ p.wait()
+ output = [l.strip() for l in p.stdout]
+ self.assertEqual(output, ['Hello World!'])
+
+ def test_helloworld_direct(self):
+ self.test_helloworld('helloworld_direct.py')
+
+ def test_helloworld_blocking(self):
+ self.test_helloworld('helloworld_blocking.py')
+
+ def test_helloworld_tornado(self):
+ self.test_helloworld('helloworld_tornado.py')
+
+ def test_helloworld_direct_tornado(self):
+ self.test_helloworld('helloworld_direct_tornado.py')
+
+ def test_simple_send_recv(self, recv='simple_recv.py', send='simple_send.py'):
+ r = subprocess.Popen([recv], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s = subprocess.Popen([send], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s.wait()
+ r.wait()
+ actual = [l.strip() for l in r.stdout]
+ expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)]
+ self.assertEqual(actual, expected)
+
+ def test_client_server(self, client=['client.py'], server=['server.py'], sleep=0):
+ s = subprocess.Popen(server, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ if sleep:
+ time.sleep(sleep)
+ c = subprocess.Popen(client, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ c.wait()
+ s.terminate()
+ actual = [l.strip() for l in c.stdout]
+ inputs = ["Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe."]
+ expected = ["%s => %s" % (l, l.upper()) for l in inputs]
+ self.assertEqual(actual, expected)
+
+ def test_sync_client_server(self):
+ self.test_client_server(client=['sync_client.py'])
+
+ def test_client_server_tx(self):
+ self.test_client_server(server=['server_tx.py'])
+
+ def test_sync_client_server_tx(self):
+ self.test_client_server(client=['sync_client.py'], server=['server_tx.py'])
+
+ def test_client_server_direct(self):
+ self.test_client_server(client=['client.py', '-a', 'localhost:8888/examples'], server=['server_direct.py'], sleep=0.5)
+
+ def test_sync_client_server_direct(self):
+ self.test_client_server(client=['sync_client.py', '-a', 'localhost:8888/examples'], server=['server_direct.py'], sleep=0.5)
+
+ def test_db_send_recv(self):
+ self.maxDiff = None
+ # setup databases
+ subprocess.check_call(['db_ctrl.py', 'init', './src_db'])
+ subprocess.check_call(['db_ctrl.py', 'init', './dst_db'])
+ fill = subprocess.Popen(['db_ctrl.py', 'insert', './src_db'],
+ stdin=subprocess.PIPE, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ for i in range(100):
+ fill.stdin.write("Message-%i\n" % (i+1))
+ fill.stdin.close()
+ fill.wait()
+ # run send and recv
+ r = subprocess.Popen(['db_recv.py', '-m', '100'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s = subprocess.Popen(['db_send.py', '-m', '100'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s.wait()
+ r.wait()
+ # verify output of receive
+ actual = [l.strip() for l in r.stdout]
+ expected = ["inserted message %i" % (i+1) for i in range(100)]
+ self.assertEqual(actual, expected)
+ # verify state of databases
+ v = subprocess.Popen(['db_ctrl.py', 'list', './dst_db'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ v.wait()
+ expected = ["(%i, %s'Message-%i')" % ((i+1), _unicode_prefix, (i+1)) for i in range(100)]
+ actual = [l.strip() for l in v.stdout]
+ self.assertEqual(actual, expected)
+
+ def test_tx_send_tx_recv(self):
+ self.test_simple_send_recv(recv='tx_recv.py', send='tx_send.py')
+
+ def test_simple_send_direct_recv(self):
+ self.maxDiff = None
+ r = subprocess.Popen(['direct_recv.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ time.sleep(0.5)
+ s = subprocess.Popen(['simple_send.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s.wait()
+ r.wait()
+ actual = [l.strip() for l in r.stdout]
+ expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)]
+ self.assertEqual(actual, expected)
+
+ def test_direct_send_simple_recv(self):
+ s = subprocess.Popen(['direct_send.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ time.sleep(0.5)
+ r = subprocess.Popen(['simple_recv.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ r.wait()
+ s.wait()
+ actual = [l.strip() for l in r.stdout]
+ expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)]
+ self.assertEqual(actual, expected)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[23/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html
new file mode 100644
index 0000000..e7cf83a
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/encode_decode.cpp.html
@@ -0,0 +1,382 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>encode_decode.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>encode_decode.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>encode_decode.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/types.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/codec/encoder.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/codec/decoder.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><algorithm></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><iterator></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+
+<span class="c1">// Examples of how to use the encoder and decoder to create and examine AMQP values.</span>
+<span class="c1">//</span>
+
+<span class="c1">// Print is defined at the end as an example of how to query and extract complex</span>
+<span class="c1">// values from a decoder in terms of their simple components.</span>
+<span class="kt">void</span> <span class="nf">print</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">&</span><span class="p">);</span>
+
+<span class="c1">// Some helper templates to print map and std::vector results.</span>
+<span class="k">namespace</span> <span class="n">std</span> <span class="p">{</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="p">,</span> <span class="k">class</span> <span class="nc">U</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">T</span><span class="p">,</span><span class="n">U</span><span class="o">>&</span> <span class="n">p</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="n">p</span><span class="p">.</span><span class="n">first</span> <span class="o"><<</span> <span class="s">":"</span> <span class="o"><<</span> <span class="n">p</span><span class="p">.</span><span class="n">second</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">T</span><span class="o">>&</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">o</span> <span class="o"><<</span> <span class="s">"[ "</span><span class="p">;</span>
+ <span class="n">ostream_iterator</span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="n">oi</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span>
+ <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">oi</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="n">T</span><span class="o">>&</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">o</span> <span class="o"><<</span> <span class="s">"[ "</span><span class="p">;</span>
+ <span class="n">ostream_iterator</span><span class="o"><</span><span class="n">T</span><span class="o">></span> <span class="n">oi</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span>
+ <span class="n">copy</span><span class="p">(</span><span class="n">v</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">v</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">oi</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">K</span><span class="p">,</span> <span class="k">class</span> <span class="nc">T</span><span class="o">></span> <span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">ostream</span><span class="o">&</span> <span class="n">o</span><span class="p">,</span> <span class="k">const</span> <span class="n">map</span><span class="o"><</span><span class="n">K</span><span class="p">,</span> <span class="n">T</span><span class="o">>&</span> <span class="n">m</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">o</span> <span class="o"><<</span> <span class="s">"{ "</span><span class="p">;</span>
+ <span class="n">ostream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">K</span><span class="p">,</span><span class="n">T</span><span class="o">></span> <span class="o">></span> <span class="n">oi</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="s">" "</span><span class="p">);</span>
+ <span class="n">copy</span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span> <span class="n">m</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span> <span class="n">oi</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">o</span> <span class="o"><<</span> <span class="s">"}"</span><span class="p">;</span>
+<span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">// Insert/extract native C++ containers with uniform type values.</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">uniform_containers</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"== Array, list and map of uniform type."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">a</span><span class="p">;</span>
+ <span class="n">a</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+ <span class="n">a</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
+ <span class="n">a</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
+ <span class="c1">// By default a C++ container is encoded as an AMQP array.</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">a</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="n">a1</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="n">a1</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">a1</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// You can specify that a container should be encoded as an AMQP list instead.</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span><span class="o">::</span><span class="n">list</span><span class="p">(</span><span class="n">a1</span><span class="p">);</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span> <span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// C++ map types (types with key_type, mapped_type) convert to an AMQP map by default.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"one"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"two"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// A sequence of pairs encodes as an AMQP MAP, which lets you control the encoded order.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="o">></span> <span class="n">pairs</span><span class="p">;</span>
+ <span class="n">pairs</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">make_pair</span><span class="p">(</span><span class="s">"z"</span><span class="p">,</span> <span class="mi">3</span><span class="p">));</span>
+ <span class="n">pairs</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">make_pair</span><span class="p">(</span><span class="s">"a"</span><span class="p">,</span> <span class="mi">4</span><span class="p">));</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">pairs</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+
+ <span class="c1">// You can also decode an AMQP map as a sequence of pairs to preserve encode order.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">pair</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="o">></span> <span class="n">pairs2</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">decoder</span> <span class="n">d</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">pairs2</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">pairs2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="c1">// A vector of proton::value is normally encoded as a mixed-type AMQP LIST,</span>
+ <span class="c1">// but you can encoded it as an array provided all the values match the array type.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">vv</span><span class="p">;</span>
+ <span class="n">vv</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"a"</span><span class="p">));</span>
+ <span class="n">vv</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"b"</span><span class="p">));</span>
+ <span class="n">vv</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"c"</span><span class="p">));</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">vv</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="c1">// Containers with mixed types use value to represent arbitrary AMQP types.</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">mixed_containers</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"== List and map of mixed type values."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">l</span><span class="p">;</span>
+ <span class="n">l</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="mi">42</span><span class="p">));</span>
+ <span class="n">l</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">"foo"</span><span class="p">)));</span>
+ <span class="c1">// By default, a sequence of proton::value is treated as an AMQP list.</span>
+ <span class="n">v</span> <span class="o">=</span> <span class="n">l</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">l2</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">l2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"five"</span><span class="p">)]</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="mi">5</span><span class="p">);</span>
+ <span class="n">m</span><span class="p">[</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="mi">4</span><span class="p">)]</span> <span class="o">=</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s">"four"</span><span class="p">);</span> <span class="n">v</span> <span class="o">=</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">></span> <span class="n">value_map</span><span class="p">;</span>
+ <span class="n">value_map</span> <span class="nf">m2</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">value_map</span><span class="o">></span><span class="p">(</span><span class="n">v</span><span class="p">));</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m2</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">// Insert using stream operators (see print_next for example of extracting with stream ops.)</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">insert_stream_operators</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"== Insert with stream operators."</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v</span><span class="p">;</span>
+
+ <span class="c1">// Create an array of INT with values [1, 2, 3]</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">e</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">e</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">array</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">INT</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+
+ <span class="c1">// Create a mixed-type list of the values [42, false, "x"].</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">e2</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">e2</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">list</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span> <span class="o"><<</span> <span class="nb">false</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span><span class="p">(</span><span class="s">"x"</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+
+ <span class="c1">// Create a map { "k1":42, "k2": false }</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">e3</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">e3</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">map</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="s">"k1"</span> <span class="o"><<</span> <span class="kt">int32_t</span><span class="p">(</span><span class="mi">42</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span><span class="p">(</span><span class="s">"k2"</span><span class="p">)</span> <span class="o"><<</span> <span class="nb">false</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="n">print</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+<span class="p">}</span>
+
+<span class="kt">int</span> <span class="n">main</span><span class="p">(</span><span class="kt">int</span><span class="p">,</span> <span class="kt">char</span><span class="o">**</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">uniform_containers</span><span class="p">();</span>
+ <span class="n">mixed_containers</span><span class="p">();</span>
+ <span class="n">insert_stream_operators</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"error: "</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="c1">// print_next prints the next value from values by recursively descending into complex values.</span>
+<span class="c1">//</span>
+<span class="c1">// NOTE this is for example puroses only: There is a built in ostream operator<< for values.</span>
+<span class="c1">//</span>
+<span class="c1">//</span>
+<span class="k">static</span> <span class="kt">void</span> <span class="n">print_next</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">decoder</span><span class="o">&</span> <span class="n">d</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">type_id</span> <span class="n">type</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">next_type</span><span class="p">();</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span> <span class="n">s</span><span class="p">;</span>
+ <span class="k">switch</span> <span class="p">(</span><span class="n">type</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">ARRAY</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"array<"</span> <span class="o"><<</span> <span class="n">s</span><span class="p">.</span><span class="n">element</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">is_described</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", descriptor="</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">">["</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">s</span><span class="p">.</span><span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">LIST</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"list["</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">s</span><span class="p">.</span><span class="n">size</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"]"</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">MAP</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"map{"</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o"><</span> <span class="n">s</span><span class="p">.</span><span class="n">size</span><span class="o">/</span><span class="mi">2</span><span class="p">;</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">":"</span><span class="p">;</span> <span class="c1">// key:value</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"}"</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">case</span> <span class="n">proton</span><span class="o">::</span><span class="nl">DESCRIBED</span><span class="p">:</span> <span class="p">{</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">s</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"described("</span><span class="p">;</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span> <span class="c1">// Descriptor</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span> <span class="c1">// value</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">default</span><span class="o">:</span>
+ <span class="c1">// A simple type. We could continue the switch for all AMQP types but</span>
+ <span class="c1">// we will take a short cut and extract to another value and print that.</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">v2</span><span class="p">;</span>
+ <span class="n">d</span> <span class="o">>></span> <span class="n">v2</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">type</span> <span class="o"><<</span> <span class="s">"("</span> <span class="o"><<</span> <span class="n">v2</span> <span class="o"><<</span> <span class="s">")"</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="c1">// Print a value, for example purposes. Normal code can use operator<<</span>
+<span class="kt">void</span> <span class="n">print</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">value</span><span class="o">&</span> <span class="n">v</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">decoder</span> <span class="n">d</span><span class="p">(</span><span class="n">v</span><span class="p">);</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">rewind</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">boolalpha</span><span class="p">;</span> <span class="c1">// Print boolean as true/false.</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">more</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">print_next</span><span class="p">(</span><span class="n">d</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">d</span><span class="p">.</span><span class="n">more</span><span class="p">())</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">", "</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="encode_decode.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp
new file mode 100755
index 0000000..03daa3b
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp
@@ -0,0 +1,34 @@
+#ifndef FAKE_CPP11_HPP
+#define FAKE_CPP11_HPP
+
+/*
+ * 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.
+ */
+
+/// These definitions allow us to use some new C++11 features in previous compilers
+///
+/// It is strongly recommended not to copy this - just use C++11/C++14 instead!
+
+#if __cplusplus < 201103L
+#define OVERRIDE
+#else
+#define OVERRIDE override
+#endif
+
+
+#endif // FAKE_CPP11_HPP
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html
new file mode 100644
index 0000000..a6862ab
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/fake_cpp11.hpp.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>fake_cpp11.hpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>fake_cpp11.hpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>fake_cpp11.hpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#ifndef FAKE_CPP11_HPP</span>
+<span class="cp">#define FAKE_CPP11_HPP</span>
+
+
+
+<span class="c1">/// These definitions allow us to use some new C++11 features in previous compilers</span>
+<span class="c1">///</span>
+<span class="c1">/// It is strongly recommended not to copy this - just use C++11/C++14 instead!</span>
+
+<span class="cp">#if __cplusplus < 201103L</span>
+<span class="cp">#define OVERRIDE</span>
+<span class="cp">#else</span>
+<span class="cp">#define OVERRIDE override</span>
+<span class="cp">#endif</span>
+
+
+<span class="cp">#endif </span><span class="c1">// FAKE_CPP11_HPP</span>
+</pre></div>
+
+<p><a href="fake_cpp11.hpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp
new file mode 100755
index 0000000..2eedd65
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/flow_control.cpp
@@ -0,0 +1,233 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/listener.hpp>
+#include <proton/connection.hpp>
+#include <proton/connection_options.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sender.hpp>
+#include <proton/tracker.hpp>
+#include <proton/delivery.hpp>
+
+#include <iostream>
+#include <sstream>
+
+#include "fake_cpp11.hpp"
+
+namespace {
+
+bool verbose = true;
+
+void verify(bool success, const std::string &msg) {
+ if (!success)
+ throw std::runtime_error("example failure:" + msg);
+ else {
+ std::cout << "success: " << msg << std::endl;
+ if (verbose) std::cout << std::endl;
+ }
+}
+
+}
+
+// flow_sender manages the incoming connection and acts as the message sender.
+class flow_sender : public proton::messaging_handler {
+ private:
+ int available; // Number of messages the sender may send assuming sufficient credit.
+ int sequence;
+
+ public:
+ flow_sender() : available(0), sequence(0) {}
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_sender in \"on_sendable\" with credit " << s.credit()
+ << " and " << available << " available messages" << std::endl;
+ for (int i = sequence; available && s.credit() > 0; i++) {
+ std::ostringstream mbody;
+ mbody << "flow_sender message " << sequence++;
+ proton::message m(mbody.str());
+ s.send(m);
+ available--;
+ }
+ }
+
+ void on_sender_drain_start(proton::sender &s) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_sender in \"on_drain_start\" with credit " << s.credit()
+ << " making an internal call to \"on_sendble\"" << std::endl;
+ on_sendable(s); // send as many as we can
+ if (s.credit()) {
+ s.return_credit(); // return the rest
+ }
+ }
+
+ void set_available(int n) { available = n; }
+};
+
+class flow_receiver : public proton::messaging_handler {
+ public:
+ int stage;
+ int received;
+ flow_sender &sender;
+
+ flow_receiver(flow_sender &s) : stage(0), sender(s) {}
+
+ void example_setup(int n) {
+ received = 0;
+ sender.set_available(n);
+ }
+
+ void run_stage(proton::receiver &r, const std::string &caller) {
+ // Serialize the progression of the flow control examples.
+ switch (stage) {
+ case 0:
+ if (verbose) std::cout << "Example 1. Simple use of credit." << std::endl;
+ // TODO: add timeout callbacks, show no messages until credit.
+ example_setup(2);
+ r.add_credit(2);
+ break;
+ case 1:
+ if (r.credit() > 0) return;
+ verify(received == 2, "Example 1: simple credit");
+
+ if (verbose) std::cout << "Example 2. Use basic drain, sender has 3 \"immediate\" messages." << std::endl;
+ example_setup(3);
+ r.add_credit(5); // ask for up to 5
+ r.drain(); // but only use what's available
+ break;
+ case 2:
+ if (caller == "on_message") return;
+ if (caller == "on_receiver_drain_finish") {
+ // Note that unused credit of 2 at sender is returned and is now 0.
+ verify(received == 3 && r.credit() == 0, "Example 2: basic drain");
+
+ if (verbose) std::cout << "Example 3. Drain use with no credit." << std::endl;
+ example_setup(0);
+ r.drain();
+ break;
+ }
+ verify(false, "example 2 run_stage");
+ return;
+
+ case 3:
+ verify(caller == "on_receiver_drain_finish" && received == 0, "Example 3: drain without credit");
+
+ if (verbose) std::cout << "Example 4. Show using high(10)/low(3) watermark for 25 messages." << std::endl;
+ example_setup(25);
+ r.add_credit(10);
+ break;
+
+ case 4:
+ if (received < 25) {
+ // Top up credit as needed.
+ uint32_t credit = r.credit();
+ if (credit <= 3) {
+ uint32_t new_credit = 10;
+ uint32_t remaining = 25 - received;
+ if (new_credit > remaining)
+ new_credit = remaining;
+ if (new_credit > credit) {
+ r.add_credit(new_credit - credit);
+ if (verbose)
+ std::cout << "flow_receiver adding credit for " << new_credit - credit
+ << " messages" << std::endl;
+ }
+ }
+ return;
+ }
+
+ verify(received == 25 && r.credit() == 0, "Exmaple 4: high/low watermark");
+ r.connection().close();
+ break;
+
+ default:
+ throw std::runtime_error("run_stage sequencing error");
+ }
+ stage++;
+ }
+
+ void on_receiver_open(proton::receiver &r) OVERRIDE {
+ run_stage(r, "on_receiver_open");
+ }
+
+ void on_message(proton::delivery &d, proton::message &m) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_receiver in \"on_message\" with " << m.body() << std::endl;
+ proton::receiver r(d.receiver());
+ received++;
+ run_stage(r, "on_message");
+ }
+
+ void on_receiver_drain_finish(proton::receiver &r) OVERRIDE {
+ if (verbose)
+ std::cout << "flow_receiver in \"on_receiver_drain_finish\"" << std::endl;
+ run_stage(r, "on_receiver_drain_finish");
+ }
+};
+
+
+class flow_control : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+ flow_sender send_handler;
+ flow_receiver receive_handler;
+
+ public:
+ flow_control(const std::string& u) : url(u), receive_handler(send_handler) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url, proton::connection_options().handler(send_handler));
+ c.connect(url);
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ if (c.active()) {
+ // outbound connection
+ c.open_receiver("flow_example", proton::receiver_options().handler(receive_handler).credit_window(0));
+ }
+ }
+
+ void on_connection_close(proton::connection &) OVERRIDE {
+ listener.stop();
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string quiet_arg("-quiet");
+ if (argc > 2 && quiet_arg == argv[2])
+ verbose = false;
+ try {
+ // Pick an "unusual" port since we are going to be talking to
+ // ourselves, not a broker.
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:8888/examples";
+
+ flow_control fc(url);
+ proton::default_container(fc).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[06/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp
new file mode 100644
index 0000000..7621941
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp
@@ -0,0 +1,92 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/link.hpp>
+#include <proton/message_id.hpp>
+#include <proton/value.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class simple_recv : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::receiver receiver;
+ uint64_t expected;
+ uint64_t received;
+
+ public:
+ simple_recv(const std::string &s, int c) : url(s), expected(c), received(0) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ receiver = c.open_receiver(url);
+ std::cout << "simple_recv listening on " << url << std::endl;
+ }
+
+ void on_message(proton::delivery &d, proton::message &msg) OVERRIDE {
+ if (proton::get<uint64_t>(msg.id()) < received) {
+ return; // Ignore duplicate
+ }
+
+ if (expected == 0 || received < expected) {
+ std::cout << msg.body() << std::endl;
+ received++;
+
+ if (received == expected) {
+ d.receiver().close();
+ d.connection().close();
+ }
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "connect to and receive from URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "receive COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ simple_recv recv(address, message_count);
+ proton::default_container(recv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html.in
new file mode 100644
index 0000000..3bd8012
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_recv.cpp.html.in
@@ -0,0 +1,76 @@
+
+<h1>simple_recv.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/link.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/message_id.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">simple_recv</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="n">receiver</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">expected</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">received</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">simple_recv</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">expected</span><span class="p">(</span><span class="n">c</span><span class="p">),</span> <span class="n">received</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">receiver</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"simple_recv listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">msg</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="kt">uint64_t</span><span class="o">></span><span class="p">(</span><span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">())</span> <span class="o"><</span> <span class="n">received</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">return</span><span class="p">;</span> <span class="c1">// Ignore duplicate</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">received</span> <span class="o"><</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">received</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">received</span> <span class="o">==</span> <span class="n">expected</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"connect to and receive from URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"receive COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">simple_recv</span> <span class="n">recv</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">recv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="simple_recv.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp
new file mode 100644
index 0000000..3ce72b4
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/tracker.hpp>
+#include <proton/value.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class simple_send : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::sender sender;
+ int sent;
+ int confirmed;
+ int total;
+
+ public:
+ simple_send(const std::string &s, int c) : url(s), sent(0), confirmed(0), total(c) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ sender = c.open_sender(url);
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ while (s.credit() && sent < total) {
+ proton::message msg;
+ std::map<std::string, int> m;
+ m["sequence"] = sent + 1;
+
+ msg.id(sent + 1);
+ msg.body(m);
+
+ s.send(msg);
+ sent++;
+ }
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ confirmed++;
+
+ if (confirmed == total) {
+ std::cout << "all messages confirmed" << std::endl;
+ t.connection().close();
+ }
+ }
+
+ void on_transport_close(proton::transport &) OVERRIDE {
+ sent = confirmed;
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "connect and send to URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "send COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ simple_send send(address, message_count);
+ proton::default_container(send).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html.in
new file mode 100644
index 0000000..ea1805c
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/simple_send.cpp.html.in
@@ -0,0 +1,84 @@
+
+<h1>simple_send.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/value.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">simple_send</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">sender</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">sent</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">total</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">simple_send</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">,</span> <span class="kt">int</span> <span class="n">c</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">s</span><span class="p">),</span> <span class="n">sent</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">confirmed</span><span class="p">(</span><span class="mi">0</span><span class="p">),</span> <span class="n">total</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">credit</span><span class="p">()</span> <span class="o">&&</span> <span class="n">sent</span> <span class="o"><</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">msg</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="kt">int</span><span class="o">></span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">[</span><span class="s">"sequence"</span><span class="p">]</span> <span class="o">=</span> <span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
+
+ <span class="n">msg</span><span class="p">.</span><span class="n">id</span><span class="p">(</span><span class="n">sent</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
+ <span class="n">msg</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">);</span>
+ <span class="n">sent</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">confirmed</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">confirmed</span> <span class="o">==</span> <span class="n">total</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"all messages confirmed"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sent</span> <span class="o">=</span> <span class="n">confirmed</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="kt">int</span> <span class="n">message_count</span> <span class="o">=</span> <span class="mi">100</span><span class="p">;</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"connect and send to URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">message_count</span><span class="p">,</span> <span class="sc">'m'</span><span class="p">,</span> <span class="s">"messages"</span><span class="p">,</span> <span class="s">"send COUNT messages"</span><span class="p">,</span> <span class="s">"COUNT"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">simple_send</span> <span class="n">send</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="n">message_count</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">send</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="simple_send.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp
new file mode 100644
index 0000000..91a4230
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp
@@ -0,0 +1,179 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection_options.hpp>
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/ssl.hpp>
+#include <proton/tracker.hpp>
+#include <proton/transport.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+using proton::connection_options;
+using proton::ssl_client_options;
+using proton::ssl_server_options;
+using proton::ssl_certificate;
+
+// Helper functions defined below.
+bool using_OpenSSL();
+std::string platform_CA(const std::string &base_name);
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd);
+static std::string cert_directory;
+std::string find_CN(const std::string &);
+
+
+struct server_handler : public proton::messaging_handler {
+ std::string url;
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "Inbound server connection connected via SSL. Protocol: " <<
+ c.transport().ssl().protocol() << std::endl;
+ c.container().stop_listening(url);
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+
+class hello_world_direct : public proton::messaging_handler {
+ private:
+ std::string url;
+ server_handler s_handler;
+
+ public:
+ hello_world_direct(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ // Configure listener. Details vary by platform.
+ ssl_certificate server_cert = platform_certificate("tserver", "tserverpw");
+ ssl_server_options ssl_srv(server_cert);
+ connection_options server_opts;
+ server_opts.ssl_server_options(ssl_srv).handler(s_handler);
+ c.server_connection_options(server_opts);
+
+ // Configure client with a Certificate Authority database populated with the server's self signed certificate.
+ // Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification
+ // from VERIFY_PEER_NAME to VERIFY_PEER.
+ connection_options client_opts;
+ ssl_client_options ssl_cli(platform_CA("tserver"), proton::ssl::VERIFY_PEER);
+ client_opts.ssl_client_options(ssl_cli);
+ c.client_connection_options(client_opts);
+
+ s_handler.url = url;
+ c.listen(url);
+ c.open_sender(url);
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::string subject = c.transport().ssl().remote_subject();
+ std::cout << "Outgoing client connection connected via SSL. Server certificate identity " <<
+ find_CN(subject) << std::endl;
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m;
+ m.body("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ // All done.
+ t.connection().close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ // Pick an "unusual" port since we are going to be talking to ourselves, not a broker.
+ // Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.
+ std::string url = argc > 1 ? argv[1] : "amqps://127.0.0.1:8888/examples";
+ // Location of certificates and private key information:
+ if (argc > 2) {
+ cert_directory = argv[2];
+ size_t sz = cert_directory.size();
+ if (sz && cert_directory[sz -1] != '/')
+ cert_directory.append("/");
+ }
+ else cert_directory = "ssl_certs/";
+
+ hello_world_direct hwd(url);
+ proton::default_container(hwd).run();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ return 1;
+}
+
+
+bool using_OpenSSL() {
+ // Current defaults.
+#if defined(WIN32)
+ return false;
+#else
+ return true;
+#endif
+}
+
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd) {
+ if (using_OpenSSL()) {
+ // The first argument will be the name of the file containing the public certificate, the
+ // second argument will be the name of the file containing the private key.
+ return ssl_certificate(cert_directory + base_name + "-certificate.pem",
+ cert_directory + base_name + "-private-key.pem", passwd);
+ }
+ else {
+ // Windows SChannel
+ // The first argument will be the database or store that contains one or more complete certificates
+ // (public and private data). The second will be an optional name of the certificate in the store
+ // (not used in this example with one certificate per store).
+ return ssl_certificate(cert_directory + base_name + "-full.p12", "", passwd);
+ }
+}
+
+std::string platform_CA(const std::string &base_name) {
+ if (using_OpenSSL()) {
+ // In this simple example with self-signed certificates, the peer's certificate is the CA database.
+ return cert_directory + base_name + "-certificate.pem";
+ }
+ else {
+ // Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.
+ return cert_directory + base_name + "-certificate.p12";
+ }
+}
+
+std::string find_CN(const std::string &subject) {
+ // The subject string is returned with different whitespace and component ordering between platforms.
+ // Here we just return the common name by searching for "CN=...." in the subject, knowing that
+ // the test certificates do not contain any escaped characters.
+ size_t pos = subject.find("CN=");
+ if (pos == std::string::npos) throw std::runtime_error("No common name in certificate subject");
+ std::string cn = subject.substr(pos);
+ pos = cn.find(',');
+ return pos == std::string::npos ? cn : cn.substr(0, pos);
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html.in
new file mode 100644
index 0000000..a3eba3c
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl.cpp.html.in
@@ -0,0 +1,163 @@
+
+<h1>ssl.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/ssl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_client_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_server_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl_certificate</span><span class="p">;</span>
+
+<span class="c1">// Helper functions defined below.</span>
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">();</span>
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">);</span>
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">);</span>
+<span class="k">static</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cert_directory</span><span class="p">;</span>
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="p">);</span>
+
+
+<span class="k">struct</span> <span class="nl">server_handler</span> <span class="p">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="kt">void</span> <span class="nf">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Inbound server connection connected via SSL. Protocol: "</span> <span class="o"><<</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">protocol</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">container</span><span class="p">().</span><span class="n">stop_listening</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="nf">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">hello_world_direct</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">server_handler</span> <span class="n">s_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">hello_world_direct</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// Configure listener. Details vary by platform.</span>
+ <span class="n">ssl_certificate</span> <span class="n">server_cert</span> <span class="o">=</span> <span class="n">platform_certificate</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">,</span> <span class="s">"tserverpw"</span><span class="p">);</span>
+ <span class="n">ssl_server_options</span> <span class="nf">ssl_srv</span><span class="p">(</span><span class="n">server_cert</span><span class="p">);</span>
+ <span class="n">connection_options</span> <span class="n">server_opts</span><span class="p">;</span>
+ <span class="n">server_opts</span><span class="p">.</span><span class="n">ssl_server_options</span><span class="p">(</span><span class="n">ssl_srv</span><span class="p">).</span><span class="n">handler</span><span class="p">(</span><span class="n">s_handler</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">server_connection_options</span><span class="p">(</span><span class="n">server_opts</span><span class="p">);</span>
+
+ <span class="c1">// Configure client with a Certificate Authority database populated with the server's self signed certificate.</span>
+ <span class="c1">// Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification</span>
+ <span class="c1">// from VERIFY_PEER_NAME to VERIFY_PEER.</span>
+ <span class="n">connection_options</span> <span class="n">client_opts</span><span class="p">;</span>
+ <span class="n">ssl_client_options</span> <span class="nf">ssl_cli</span><span class="p">(</span><span class="n">platform_CA</span><span class="p">(</span><span class="s">"tserver"</span><span class="p">),</span> <span class="n">proton</span><span class="o">::</span><span class="n">ssl</span><span class="o">::</span><span class="n">VERIFY_PEER</span><span class="p">);</span>
+ <span class="n">client_opts</span><span class="p">.</span><span class="n">ssl_client_options</span><span class="p">(</span><span class="n">ssl_cli</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">client_connection_options</span><span class="p">(</span><span class="n">client_opts</span><span class="p">);</span>
+
+ <span class="n">s_handler</span><span class="p">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">transport</span><span class="p">().</span><span class="n">ssl</span><span class="p">().</span><span class="n">remote_subject</span><span class="p">();</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Outgoing client connection connected via SSL. Server certificate identity "</span> <span class="o"><<</span>
+ <span class="n">find_CN</span><span class="p">(</span><span class="n">subject</span><span class="p">)</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">m</span><span class="p">;</span>
+ <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="s">"Hello World!"</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">s</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_tracker_accept</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">tracker</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// All done.</span>
+ <span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="c1">// Pick an "unusual" port since we are going to be talking to ourselves, not a broker.</span>
+ <span class="c1">// Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"amqps://127.0.0.1:8888/examples"</span><span class="p">;</span>
+ <span class="c1">// Location of certificates and private key information:</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argc</span> <span class="o">></span> <span class="mi">2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">cert_directory</span> <span class="o">=</span> <span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
+ <span class="kt">size_t</span> <span class="n">sz</span> <span class="o">=</span> <span class="n">cert_directory</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">sz</span> <span class="o">&&</span> <span class="n">cert_directory</span><span class="p">[</span><span class="n">sz</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="sc">'/'</span><span class="p">)</span>
+ <span class="n">cert_directory</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="s">"/"</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="n">cert_directory</span> <span class="o">=</span> <span class="s">"ssl_certs/"</span><span class="p">;</span>
+
+ <span class="n">hello_world_direct</span> <span class="n">hwd</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">hwd</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+
+
+<span class="kt">bool</span> <span class="nf">using_OpenSSL</span><span class="p">()</span> <span class="p">{</span>
+ <span class="c1">// Current defaults.</span>
+<span class="cp">#if defined(WIN32)</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+<span class="cp">#else</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+<span class="cp">#endif</span>
+<span class="p">}</span>
+
+<span class="n">ssl_certificate</span> <span class="nf">platform_certificate</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">passwd</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// The first argument will be the name of the file containing the public certificate, the</span>
+ <span class="c1">// second argument will be the name of the file containing the private key.</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">,</span>
+ <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-private-key.pem"</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel</span>
+ <span class="c1">// The first argument will be the database or store that contains one or more complete certificates</span>
+ <span class="c1">// (public and private data). The second will be an optional name of the certificate in the store</span>
+ <span class="c1">// (not used in this example with one certificate per store).</span>
+ <span class="k">return</span> <span class="n">ssl_certificate</span><span class="p">(</span><span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-full.p12"</span><span class="p">,</span> <span class="s">""</span><span class="p">,</span> <span class="n">passwd</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">platform_CA</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">base_name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">using_OpenSSL</span><span class="p">())</span> <span class="p">{</span>
+ <span class="c1">// In this simple example with self-signed certificates, the peer's certificate is the CA database.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.pem"</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">else</span> <span class="p">{</span>
+ <span class="c1">// Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.</span>
+ <span class="k">return</span> <span class="n">cert_directory</span> <span class="o">+</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s">"-certificate.p12"</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+<span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">find_CN</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">subject</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// The subject string is returned with different whitespace and component ordering between platforms.</span>
+ <span class="c1">// Here we just return the common name by searching for "CN=...." in the subject, knowing that</span>
+ <span class="c1">// the test certificates do not contain any escaped characters.</span>
+ <span class="kt">size_t</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="s">"CN="</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span> <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"No common name in certificate subject"</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">cn</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">pos</span><span class="p">);</span>
+ <span class="n">pos</span> <span class="o">=</span> <span class="n">cn</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="sc">','</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">pos</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span> <span class="o">?</span> <span class="nl">cn</span> <span class="p">:</span> <span class="n">cn</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">pos</span><span class="p">);</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="ssl.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp
new file mode 100644
index 0000000..42b6593
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/ssl_client_cert.cpp
@@ -0,0 +1,193 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/connection_options.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sasl.hpp>
+#include <proton/ssl.hpp>
+#include <proton/tracker.hpp>
+#include <proton/transport.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+using proton::connection_options;
+using proton::ssl_client_options;
+using proton::ssl_server_options;
+using proton::ssl_certificate;
+using proton::sasl;
+
+// Helper functions defined below.
+bool using_OpenSSL();
+std::string platform_CA(const std::string &base_name);
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd);
+static std::string cert_directory;
+static std::string find_CN(const std::string &);
+
+
+struct server_handler : public proton::messaging_handler {
+ proton::listener listener;
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "Inbound server connection connected via SSL. Protocol: " <<
+ c.transport().ssl().protocol() << std::endl;
+ if (c.transport().sasl().outcome() == sasl::OK) {
+ std::string subject = c.transport().ssl().remote_subject();
+ std::cout << "Inbound client certificate identity " << find_CN(subject) << std::endl;
+ }
+ else {
+ std::cout << "Inbound client authentication failed" <<std::endl;
+ c.close();
+ }
+ listener.stop();
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+
+class hello_world_direct : public proton::messaging_handler {
+ private:
+ std::string url;
+ server_handler s_handler;
+
+ public:
+ hello_world_direct(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ // Configure listener. Details vary by platform.
+ ssl_certificate server_cert = platform_certificate("tserver", "tserverpw");
+ std::string client_CA = platform_CA("tclient");
+ // Specify an SSL domain with CA's for client certificate verification.
+ ssl_server_options srv_ssl(server_cert, client_CA);
+ connection_options server_opts;
+ server_opts.ssl_server_options(srv_ssl).handler(s_handler);
+ server_opts.sasl_allowed_mechs("EXTERNAL");
+ c.server_connection_options(server_opts);
+
+ // Configure client.
+ ssl_certificate client_cert = platform_certificate("tclient", "tclientpw");
+ std::string server_CA = platform_CA("tserver");
+ // Since the test certifcate's credentials are unlikely to match this host's name, downgrade the verification
+ // from VERIFY_PEER_NAME to VERIFY_PEER.
+ ssl_client_options ssl_cli(client_cert, server_CA, proton::ssl::VERIFY_PEER);
+ connection_options client_opts;
+ client_opts.ssl_client_options(ssl_cli).sasl_allowed_mechs("EXTERNAL");
+ c.client_connection_options(client_opts);
+
+ s_handler.listener = c.listen(url);
+ c.open_sender(url);
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::string subject = c.transport().ssl().remote_subject();
+ std::cout << "Outgoing client connection connected via SSL. Server certificate identity " <<
+ find_CN(subject) << std::endl;
+ }
+
+ void on_sendable(proton::sender &s) OVERRIDE {
+ proton::message m;
+ m.body("Hello World!");
+ s.send(m);
+ s.close();
+ }
+
+ void on_tracker_accept(proton::tracker &t) OVERRIDE {
+ // All done.
+ t.connection().close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ // Pick an "unusual" port since we are going to be talking to ourselves, not a broker.
+ // Note the use of "amqps" as the URL scheme to denote a TLS/SSL connection.
+ std::string url = argc > 1 ? argv[1] : "amqps://127.0.0.1:8888/examples";
+ // Location of certificates and private key information:
+ if (argc > 2) {
+ cert_directory = argv[2];
+ size_t sz = cert_directory.size();
+ if (sz && cert_directory[sz -1] != '/')
+ cert_directory.append("/");
+ }
+ else cert_directory = "ssl_certs/";
+
+ hello_world_direct hwd(url);
+ proton::default_container(hwd).run();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ return 1;
+}
+
+
+bool using_OpenSSL() {
+ // Current defaults.
+#if defined(WIN32)
+ return false;
+#else
+ return true;
+#endif
+}
+
+ssl_certificate platform_certificate(const std::string &base_name, const std::string &passwd) {
+ if (using_OpenSSL()) {
+ // The first argument will be the name of the file containing the public certificate, the
+ // second argument will be the name of the file containing the private key.
+ return ssl_certificate(cert_directory + base_name + "-certificate.pem",
+ cert_directory + base_name + "-private-key.pem", passwd);
+ }
+ else {
+ // Windows SChannel
+ // The first argument will be the database or store that contains one or more complete certificates
+ // (public and private data). The second will be an optional name of the certificate in the store
+ // (not used in this example with one certificate per store).
+ return ssl_certificate(cert_directory + base_name + "-full.p12", "", passwd);
+ }
+}
+
+std::string platform_CA(const std::string &base_name) {
+ if (using_OpenSSL()) {
+ // In this simple example with self-signed certificates, the peer's certificate is the CA database.
+ return cert_directory + base_name + "-certificate.pem";
+ }
+ else {
+ // Windows SChannel. Use a pkcs#12 file with just the peer's public certificate information.
+ return cert_directory + base_name + "-certificate.p12";
+ }
+}
+
+std::string find_CN(const std::string &subject) {
+ // The subject string is returned with different whitespace and component ordering between platforms.
+ // Here we just return the common name by searching for "CN=...." in the subject, knowing that
+ // the test certificates do not contain any escaped characters.
+ size_t pos = subject.find("CN=");
+ if (pos == std::string::npos) throw std::runtime_error("No common name in certificate subject");
+ std::string cn = subject.substr(pos);
+ pos = cn.find(',');
+ return pos == std::string::npos ? cn : cn.substr(0, pos);
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[04/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py
new file mode 100755
index 0000000..54af87b
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+try:
+ import Queue
+except:
+ import queue as Queue
+
+import sqlite3
+import threading
+
+class Db(object):
+ def __init__(self, db, injector):
+ self.db = db
+ self.injector = injector
+ self.tasks = Queue.Queue()
+ self.position = None
+ self.pending_events = []
+ self.running = True
+ self.thread = threading.Thread(target=self._process)
+ self.thread.daemon=True
+ self.thread.start()
+
+ def close(self):
+ self.tasks.put(lambda conn: self._close())
+
+ def reset(self):
+ self.tasks.put(lambda conn: self._reset())
+
+ def load(self, records, event=None):
+ self.tasks.put(lambda conn: self._load(conn, records, event))
+
+ def get_id(self, event):
+ self.tasks.put(lambda conn: self._get_id(conn, event))
+
+ def insert(self, id, data, event=None):
+ self.tasks.put(lambda conn: self._insert(conn, id, data, event))
+
+ def delete(self, id, event=None):
+ self.tasks.put(lambda conn: self._delete(conn, id, event))
+
+ def _reset(self, ignored=None):
+ self.position = None
+
+ def _close(self, ignored=None):
+ self.running = False
+
+ def _get_id(self, conn, event):
+ cursor = conn.execute("SELECT * FROM records ORDER BY id DESC")
+ row = cursor.fetchone()
+ if event:
+ if row:
+ event.id = row['id']
+ else:
+ event.id = 0
+ self.injector.trigger(event)
+
+ def _load(self, conn, records, event):
+ if self.position:
+ cursor = conn.execute("SELECT * FROM records WHERE id > ? ORDER BY id", (self.position,))
+ else:
+ cursor = conn.execute("SELECT * FROM records ORDER BY id")
+ while not records.full():
+ row = cursor.fetchone()
+ if row:
+ self.position = row['id']
+ records.put(dict(row))
+ else:
+ break
+ if event:
+ self.injector.trigger(event)
+
+ def _insert(self, conn, id, data, event):
+ if id:
+ conn.execute("INSERT INTO records(id, description) VALUES (?, ?)", (id, data))
+ else:
+ conn.execute("INSERT INTO records(description) VALUES (?)", (data,))
+ if event:
+ self.pending_events.append(event)
+
+ def _delete(self, conn, id, event):
+ conn.execute("DELETE FROM records WHERE id=?", (id,))
+ if event:
+ self.pending_events.append(event)
+
+ def _process(self):
+ conn = sqlite3.connect(self.db)
+ conn.row_factory = sqlite3.Row
+ with conn:
+ while self.running:
+ f = self.tasks.get(True)
+ try:
+ while True:
+ f(conn)
+ f = self.tasks.get(False)
+ except Queue.Empty: pass
+ conn.commit()
+ for event in self.pending_events:
+ self.injector.trigger(event)
+ self.pending_events = []
+ self.injector.close()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html.in
new file mode 100644
index 0000000..8dcc2ee
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_common.py.html.in
@@ -0,0 +1,103 @@
+
+<h1>db_common.py</h1>
+<div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">Queue</span>
+<span class="k">except</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">queue</span> <span class="kn">as</span> <span class="nn">Queue</span>
+
+<span class="kn">import</span> <span class="nn">sqlite3</span>
+<span class="kn">import</span> <span class="nn">threading</span>
+
+<span class="k">class</span> <span class="nc">Db</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">db</span><span class="p">,</span> <span class="n">injector</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">db</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span> <span class="o">=</span> <span class="n">injector</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span> <span class="o">=</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Queue</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">running</span> <span class="o">=</span> <span class="bp">True</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">thread</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">daemon</span><span class="o">=</span><span class="bp">True</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_close</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_reset</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_load</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_id</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_insert</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="k">lambda</span> <span class="n">conn</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delete</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">_reset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignored</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="bp">None</span>
+
+ <span class="k">def</span> <span class="nf">_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignored</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">running</span> <span class="o">=</span> <span class="bp">False</span>
+
+ <span class="k">def</span> <span class="nf">_get_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records ORDER BY id DESC"</span><span class="p">)</span>
+ <span class="n">row</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">row</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">id</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">position</span><span class="p">:</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records WHERE id > ? ORDER BY id"</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">position</span><span class="p">,))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records ORDER BY id"</span><span class="p">)</span>
+ <span class="k">while</span> <span class="ow">not</span> <span class="n">records</span><span class="o">.</span><span class="n">full</span><span class="p">():</span>
+ <span class="n">row</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+ <span class="k">if</span> <span class="n">row</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">position</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span>
+ <span class="n">records</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="nb">dict</span><span class="p">(</span><span class="n">row</span><span class="p">))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">break</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_insert</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="nb">id</span><span class="p">:</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"INSERT INTO records(id, description) VALUES (?, ?)"</span><span class="p">,</span> <span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">data</span><span class="p">))</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"INSERT INTO records(description) VALUES (?)"</span><span class="p">,</span> <span class="p">(</span><span class="n">data</span><span class="p">,))</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"DELETE FROM records WHERE id=?"</span><span class="p">,</span> <span class="p">(</span><span class="nb">id</span><span class="p">,))</span>
+ <span class="k">if</span> <span class="n">event</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">)</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">row_factory</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Row</span>
+ <span class="k">with</span> <span class="n">conn</span><span class="p">:</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">running</span><span class="p">:</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>
+ <span class="k">try</span><span class="p">:</span>
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="n">f</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
+ <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
+ <span class="k">except</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Empty</span><span class="p">:</span> <span class="k">pass</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="n">event</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">pending_events</span> <span class="o">=</span> <span class="p">[]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">injector</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="db_common.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py
new file mode 100755
index 0000000..04770ce
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import sqlite3
+import sys
+
+if len(sys.argv) < 3:
+ print("Usage: %s [init|insert|list] db" % sys.argv[0])
+else:
+ conn = sqlite3.connect(sys.argv[2])
+ with conn:
+ if sys.argv[1] == "init":
+ conn.execute("DROP TABLE IF EXISTS records")
+ conn.execute("CREATE TABLE records(id INTEGER PRIMARY KEY AUTOINCREMENT, description TEXT)")
+ conn.commit()
+ elif sys.argv[1] == "list":
+ cursor = conn.cursor()
+ cursor.execute("SELECT * FROM records")
+ rows = cursor.fetchall()
+ for r in rows:
+ print(r)
+ elif sys.argv[1] == "insert":
+ while True:
+ l = sys.stdin.readline()
+ if not l: break
+ conn.execute("INSERT INTO records(description) VALUES (?)", (l.rstrip(),))
+ conn.commit()
+ else:
+ print("Unrecognised command: %s" % sys.argv[1])
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html.in
new file mode 100644
index 0000000..a10bea8
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_ctrl.py.html.in
@@ -0,0 +1,32 @@
+
+<h1>db_ctrl.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">sqlite3</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o"><</span> <span class="mi">3</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Usage: </span><span class="si">%s</span><span class="s2"> [init|insert|list] db"</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+<span class="k">else</span><span class="p">:</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
+ <span class="k">with</span> <span class="n">conn</span><span class="p">:</span>
+ <span class="k">if</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"init"</span><span class="p">:</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"DROP TABLE IF EXISTS records"</span><span class="p">)</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"CREATE TABLE records(id INTEGER PRIMARY KEY AUTOINCREMENT, description TEXT)"</span><span class="p">)</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"list"</span><span class="p">:</span>
+ <span class="n">cursor</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
+ <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"SELECT * FROM records"</span><span class="p">)</span>
+ <span class="n">rows</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
+ <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">rows</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
+ <span class="k">elif</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"insert"</span><span class="p">:</span>
+ <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
+ <span class="n">l</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="n">l</span><span class="p">:</span> <span class="k">break</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"INSERT INTO records(description) VALUES (?)"</span><span class="p">,</span> <span class="p">(</span><span class="n">l</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(),))</span>
+ <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Unrecognised command: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
+</pre></div>
+
+<p><a href="db_ctrl.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py
new file mode 100755
index 0000000..8c79049
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton.handlers import MessagingHandler
+from proton.reactor import ApplicationEvent, Container, EventInjector
+from db_common import Db
+
+class Recv(MessagingHandler):
+ def __init__(self, url, count):
+ super(Recv, self).__init__(auto_accept=False)
+ self.url = url
+ self.delay = 0
+ self.last_id = None
+ self.expected = count
+ self.received = 0
+ self.accepted = 0
+ self.db = Db("dst_db", EventInjector())
+
+ def on_start(self, event):
+ event.container.selectable(self.db.injector)
+ e = ApplicationEvent("id_loaded")
+ e.container = event.container
+ self.db.get_id(e)
+
+ def on_id_loaded(self, event):
+ self.last_id = event.id
+ event.container.create_receiver(self.url)
+
+ def on_record_inserted(self, event):
+ self.accept(event.delivery)
+ self.accepted += 1
+ if self.accepted == self.expected:
+ event.connection.close()
+ self.db.close()
+
+ def on_message(self, event):
+ id = int(event.message.id)
+ if (not self.last_id) or id > self.last_id:
+ if self.received < self.expected:
+ self.received += 1
+ self.last_id = id
+ self.db.insert(id, event.message.body, ApplicationEvent("record_inserted", delivery=event.delivery))
+ print("inserted message %s" % id)
+ else:
+ self.release(event.delivery)
+ else:
+ self.accept(event.delivery)
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=0,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Recv(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html.in
new file mode 100644
index 0000000..68da6be
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_recv.py.html.in
@@ -0,0 +1,62 @@
+
+<h1>db_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">ApplicationEvent</span><span class="p">,</span> <span class="n">Container</span><span class="p">,</span> <span class="n">EventInjector</span>
+<span class="kn">from</span> <span class="nn">db_common</span> <span class="kn">import</span> <span class="n">Db</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">auto_accept</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">delay</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span> <span class="o">=</span> <span class="bp">None</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">Db</span><span class="p">(</span><span class="s2">"dst_db"</span><span class="p">,</span> <span class="n">EventInjector</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">selectable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">injector</span><span class="p">)</span>
+ <span class="n">e</span> <span class="o">=</span> <span class="n">ApplicationEvent</span><span class="p">(</span><span class="s2">"id_loaded"</span><span class="p">)</span>
+ <span class="n">e</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_id_loaded</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">id</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_record_inserted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="nb">id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+ <span class="k">if</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">id</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span><span class="p">:</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">last_id</span> <span class="o">=</span> <span class="nb">id</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="nb">id</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">,</span> <span class="n">ApplicationEvent</span><span class="p">(</span><span class="s2">"record_inserted"</span><span class="p">,</span> <span class="n">delivery</span><span class="o">=</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">))</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"inserted message </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">id</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">release</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">accept</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="p">)</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="db_recv.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py
new file mode 100755
index 0000000..c07dcc0
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+import time
+try:
+ import Queue
+except:
+ import queue as Queue
+
+
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import ApplicationEvent, Container, EventInjector
+from db_common import Db
+
+class Send(MessagingHandler):
+ def __init__(self, url, count):
+ super(Send, self).__init__()
+ self.url = url
+ self.delay = 0
+ self.sent = 0
+ self.confirmed = 0
+ self.load_count = 0
+ self.records = Queue.Queue(maxsize=50)
+ self.target = count
+ self.db = Db("src_db", EventInjector())
+
+ def keep_sending(self):
+ return self.target == 0 or self.sent < self.target
+
+ def on_start(self, event):
+ self.container = event.container
+ self.container.selectable(self.db.injector)
+ self.sender = self.container.create_sender(self.url)
+
+ def on_records_loaded(self, event):
+ if self.records.empty():
+ if event.subject == self.load_count:
+ print("Exhausted available data, waiting to recheck...")
+ # check for new data after 5 seconds
+ self.container.schedule(5, self)
+ else:
+ self.send()
+
+ def request_records(self):
+ if not self.records.full():
+ print("loading records...")
+ self.load_count += 1
+ self.db.load(self.records, event=ApplicationEvent("records_loaded", link=self.sender, subject=self.load_count))
+
+ def on_sendable(self, event):
+ self.send()
+
+ def send(self):
+ while self.sender.credit and not self.records.empty():
+ if not self.keep_sending(): return
+ record = self.records.get(False)
+ id = record['id']
+ self.sender.send(Message(id=id, durable=True, body=record['description']), tag=str(id))
+ self.sent += 1
+ print("sent message %s" % id)
+ self.request_records()
+
+ def on_settled(self, event):
+ id = int(event.delivery.tag)
+ self.db.delete(id)
+ print("settled message %s" % id)
+ self.confirmed += 1
+ if self.confirmed == self.target:
+ event.connection.close()
+ self.db.close()
+
+ def on_disconnected(self, event):
+ self.db.reset()
+ self.sent = self.confirmed
+
+ def on_timer_task(self, event):
+ print("Rechecking for data...")
+ self.request_records()
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=0,
+ help="number of messages to send; 0 sends indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Send(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html.in
new file mode 100644
index 0000000..5cd4962
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/db_send.py.html.in
@@ -0,0 +1,95 @@
+
+<h1>db_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="k">try</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">Queue</span>
+<span class="k">except</span><span class="p">:</span>
+ <span class="kn">import</span> <span class="nn">queue</span> <span class="kn">as</span> <span class="nn">Queue</span>
+
+
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">ApplicationEvent</span><span class="p">,</span> <span class="n">Container</span><span class="p">,</span> <span class="n">EventInjector</span>
+<span class="kn">from</span> <span class="nn">db_common</span> <span class="kn">import</span> <span class="n">Db</span>
+
+<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">delay</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">load_count</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">records</span> <span class="o">=</span> <span class="n">Queue</span><span class="o">.</span><span class="n">Queue</span><span class="p">(</span><span class="n">maxsize</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span> <span class="o">=</span> <span class="n">Db</span><span class="p">(</span><span class="s2">"src_db"</span><span class="p">,</span> <span class="n">EventInjector</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">keep_sending</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">selectable</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">injector</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_records_loaded</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">subject</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">load_count</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Exhausted available data, waiting to recheck..."</span><span class="p">)</span>
+ <span class="c1"># check for new data after 5 seconds</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+ <span class="k">else</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">request_records</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">full</span><span class="p">():</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"loading records..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">load_count</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">,</span> <span class="n">event</span><span class="o">=</span><span class="n">ApplicationEvent</span><span class="p">(</span><span class="s2">"records_loaded"</span><span class="p">,</span> <span class="n">link</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">load_count</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">keep_sending</span><span class="p">():</span> <span class="k">return</span>
+ <span class="n">record</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
+ <span class="nb">id</span> <span class="o">=</span> <span class="n">record</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="nb">id</span><span class="p">,</span> <span class="n">durable</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">body</span><span class="o">=</span><span class="n">record</span><span class="p">[</span><span class="s1">'description'</span><span class="p">]),</span> <span class="n">tag</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="nb">id</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"sent message </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">id</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">request_records</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_settled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="nb">id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">delivery</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"settled message </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">id</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span>
+
+ <span class="k">def</span> <span class="nf">on_timer_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Rechecking for data..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">request_records</span><span class="p">()</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send; 0 sends indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="db_send.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py
new file mode 100755
index 0000000..1c6bf36
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import optparse
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Recv(MessagingHandler):
+ def __init__(self, url, count):
+ super(Recv, self).__init__()
+ self.url = url
+ self.expected = count
+ self.received = 0
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+
+ def on_message(self, event):
+ if event.message.id and event.message.id < self.received:
+ # ignore duplicate message
+ return
+ if self.expected == 0 or self.received < self.expected:
+ print(event.message.body)
+ self.received += 1
+ if self.received == self.expected:
+ event.receiver.close()
+ event.connection.close()
+ self.acceptor.close()
+
+parser = optparse.OptionParser(usage="usage: %prog [options]")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address from which messages are received (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to receive; 0 receives indefinitely (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Recv(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html.in
new file mode 100644
index 0000000..c8be727
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html.in
@@ -0,0 +1,42 @@
+
+<h1>direct_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span><span class="p">:</span>
+ <span class="c1"># ignore duplicate message</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="direct_recv.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py
new file mode 100755
index 0000000..35bd2f5
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Send(MessagingHandler):
+ def __init__(self, url, messages):
+ super(Send, self).__init__()
+ self.url = url
+ self.sent = 0
+ self.confirmed = 0
+ self.total = messages
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+
+ def on_sendable(self, event):
+ while event.sender.credit and self.sent < self.total:
+ msg = Message(id=(self.sent+1), body={'sequence':(self.sent+1)})
+ event.sender.send(msg)
+ self.sent += 1
+
+ def on_accepted(self, event):
+ self.confirmed += 1
+ if self.confirmed == self.total:
+ print("all messages confirmed")
+ event.connection.close()
+ self.acceptor.close()
+
+ def on_disconnected(self, event):
+ self.sent = self.confirmed
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to send (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Send(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html.in
new file mode 100644
index 0000000..19c506e
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html.in
@@ -0,0 +1,49 @@
+
+<h1>direct_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">while</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s1">'sequence'</span><span class="p">:(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">)})</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"all messages confirmed"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="direct_send.py">Download this file</a></p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[25/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html
new file mode 100644
index 0000000..9a51743
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/broker.hpp.html
@@ -0,0 +1,368 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>broker.hpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>broker.hpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>broker.hpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#ifndef BROKER_HPP</span>
+<span class="cp">#define BROKER_HPP</span>
+
+
+
+<span class="c1">/// @file</span>
+<span class="c1">///</span>
+<span class="c1">/// Common code used by different broker examples.</span>
+<span class="c1">///</span>
+<span class="c1">/// The examples add functionality as needed, this helps to make it</span>
+<span class="c1">/// easier to see the important differences between the examples.</span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/message.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sasl.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/target_options.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><deque></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><list></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+
+<span class="c1">/// A simple implementation of a queue.</span>
+<span class="k">class</span> <span class="nc">queue</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queue</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">,</span> <span class="kt">bool</span> <span class="n">dynamic</span> <span class="o">=</span> <span class="nb">false</span><span class="p">)</span> <span class="o">:</span> <span class="n">name_</span><span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="n">dynamic_</span><span class="p">(</span><span class="n">dynamic</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span> <span class="k">return</span> <span class="n">name_</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">subscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Return true if queue can be deleted.</span>
+ <span class="kt">bool</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">consumers_</span><span class="p">.</span><span class="n">remove</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="k">return</span> <span class="p">(</span><span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&&</span> <span class="p">(</span><span class="n">dynamic_</span> <span class="o">||</span> <span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span> <span class="o">==</span> <span class="mi">0</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">publish</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">dispatch</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">dispatch</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">deliver_to</span><span class="p">(</span><span class="n">s</span><span class="p">))</span> <span class="p">{}</span>
+ <span class="p">}</span>
+
+ <span class="kt">bool</span> <span class="n">deliver_to</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">*</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="c1">// Deliver to single sender if supplied, else all consumers</span>
+ <span class="kt">int</span> <span class="n">count</span> <span class="o">=</span> <span class="n">s</span> <span class="o">?</span> <span class="mi">1</span> <span class="o">:</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">count</span><span class="p">)</span> <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+
+ <span class="kt">bool</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="n">sender_list</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">consumers_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">s</span> <span class="o">&&</span> <span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">s</span> <span class="o">=</span> <span class="o">&*</span><span class="n">it</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">while</span> <span class="p">(</span><span class="n">messages_</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">s</span><span class="o">-></span><span class="n">credit</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">&</span> <span class="n">m</span> <span class="o">=</span> <span class="n">messages_</span><span class="p">.</span><span class="n">front</span><span class="p">();</span>
+
+ <span class="n">s</span><span class="o">-></span><span class="n">send</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="n">messages_</span><span class="p">.</span><span class="n">pop_front</span><span class="p">();</span>
+ <span class="n">result</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">--</span><span class="n">count</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">it</span><span class="o">++</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="n">result</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">deque</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">message</span><span class="o">></span> <span class="n">message_queue</span><span class="p">;</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">list</span><span class="o"><</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_list</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">name_</span><span class="p">;</span>
+ <span class="kt">bool</span> <span class="n">dynamic_</span><span class="p">;</span>
+ <span class="n">message_queue</span> <span class="n">messages_</span><span class="p">;</span>
+ <span class="n">sender_list</span> <span class="n">consumers_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="c1">/// A collection of queues and queue factory, used by a broker.</span>
+<span class="k">class</span> <span class="nc">queues</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">queues</span><span class="p">()</span> <span class="o">:</span> <span class="n">next_id_</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+ <span class="k">virtual</span> <span class="o">~</span><span class="n">queues</span><span class="p">()</span> <span class="p">{}</span>
+
+ <span class="c1">// Get or create a queue.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">get</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">address</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"empty queue name"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">queue</span><span class="o">*&</span> <span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">address</span><span class="p">];</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">q</span><span class="p">)</span> <span class="n">q</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Create a dynamic queue with a unique name.</span>
+ <span class="k">virtual</span> <span class="n">queue</span> <span class="o">&</span><span class="n">dynamic</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">os</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">"q"</span> <span class="o"><<</span> <span class="n">next_id_</span><span class="o">++</span><span class="p">;</span>
+ <span class="n">queue</span> <span class="o">*</span><span class="n">q</span> <span class="o">=</span> <span class="n">queues_</span><span class="p">[</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">()]</span> <span class="o">=</span> <span class="k">new</span> <span class="n">queue</span><span class="p">(</span><span class="n">os</span><span class="p">.</span><span class="n">str</span><span class="p">(),</span> <span class="nb">true</span><span class="p">);</span>
+
+ <span class="k">return</span> <span class="o">*</span><span class="n">q</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="c1">// Delete the named queue</span>
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="n">erase</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">name</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">delete</span> <span class="n">queues_</span><span class="p">[</span><span class="n">name</span><span class="p">];</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">name</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">queue</span> <span class="o">*></span> <span class="n">queue_map</span><span class="p">;</span>
+ <span class="n">queue_map</span> <span class="n">queues_</span><span class="p">;</span>
+ <span class="kt">uint64_t</span> <span class="n">next_id_</span><span class="p">;</span> <span class="c1">// Use to generate unique queue IDs.</span>
+<span class="p">};</span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/config.hpp></span><span class="cp"></span>
+
+
+<span class="k">class</span> <span class="nc">broker_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">broker_handler</span><span class="p">(</span><span class="n">queues</span><span class="o">&</span> <span class="n">qs</span><span class="p">)</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">(</span><span class="n">qs</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Connection from user: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">sasl</span><span class="p">().</span><span class="n">user</span><span class="p">()</span> <span class="o"><<</span> <span class="s">" (mechanism: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">sasl</span><span class="p">().</span><span class="n">mech</span><span class="p">()</span> <span class="o"><<</span> <span class="s">")"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source</span> <span class="n">src</span><span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">source</span><span class="p">());</span>
+ <span class="n">queue</span> <span class="o">&</span><span class="n">q</span> <span class="o">=</span> <span class="n">src</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">?</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">dynamic</span><span class="p">()</span> <span class="o">:</span> <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">src</span><span class="p">.</span><span class="n">address</span><span class="p">());</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">())));</span>
+ <span class="n">q</span><span class="p">.</span><span class="n">subscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker outgoing link from "</span> <span class="o"><<</span> <span class="n">q</span><span class="p">.</span><span class="n">name</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="n">receiver</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">receiver</span><span class="p">.</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">address</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">receiver</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">target</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">target_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">address</span><span class="p">)));</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker incoming link to "</span> <span class="o"><<</span> <span class="n">address</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">unsubscribe</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">lnk</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">lnk</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">unsubscribe</span><span class="p">(</span><span class="n">lnk</span><span class="p">))</span> <span class="p">{</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="n">sender</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">c</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_close</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">t</span><span class="p">.</span><span class="n">connection</span><span class="p">());</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_transport_error</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">transport</span> <span class="o">&</span><span class="n">t</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"broker client disconnect: "</span> <span class="o"><<</span> <span class="n">t</span><span class="p">.</span><span class="n">error</span><span class="p">().</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_error</span><span class="p">(</span><span class="k">const</span> <span class="n">proton</span><span class="o">::</span><span class="n">error_condition</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="s">"broker error: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">remove_stale_consumers</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">connection</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender_range</span> <span class="n">sr</span> <span class="o">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">senders</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">sr</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">sr</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span><span class="o">-></span><span class="n">active</span><span class="p">())</span>
+ <span class="n">unsubscribe</span><span class="p">(</span><span class="o">*</span><span class="n">i</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sendable</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">s</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">dispatch</span><span class="p">(</span><span class="o">&</span><span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span> <span class="o">=</span> <span class="n">d</span><span class="p">.</span><span class="n">receiver</span><span class="p">().</span><span class="n">target</span><span class="p">().</span><span class="n">address</span><span class="p">();</span>
+ <span class="n">queues_</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">address</span><span class="p">).</span><span class="n">publish</span><span class="p">(</span><span class="n">m</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="n">queues</span><span class="o">&</span> <span class="n">queues_</span><span class="p">;</span>
+<span class="p">};</span>
+
+<span class="cp">#endif </span><span class="c1">// BROKER_HPP</span>
+</pre></div>
+
+<p><a href="broker.hpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp
new file mode 100755
index 0000000..dd22ccd
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp
@@ -0,0 +1,107 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/connection.hpp>
+#include <proton/tracker.hpp>
+#include <proton/source_options.hpp>
+
+#include <iostream>
+#include <vector>
+
+#include "fake_cpp11.hpp"
+
+using proton::receiver_options;
+using proton::source_options;
+
+class client : public proton::messaging_handler {
+ private:
+ std::string url;
+ std::vector<std::string> requests;
+ proton::sender sender;
+ proton::receiver receiver;
+
+ public:
+ client(const std::string &u, const std::vector<std::string>& r) : url(u), requests(r) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ sender = c.open_sender(url);
+ // Create a receiver requesting a dynamically created queue
+ // for the message source.
+ receiver_options opts = receiver_options().source(source_options().dynamic(true));
+ receiver = sender.connection().open_receiver("", opts);
+ }
+
+ void send_request() {
+ proton::message req;
+ req.body(requests.front());
+ req.reply_to(receiver.source().address());
+ sender.send(req);
+ }
+
+ void on_receiver_open(proton::receiver &) OVERRIDE {
+ send_request();
+ }
+
+ void on_message(proton::delivery &d, proton::message &response) OVERRIDE {
+ if (requests.empty()) return; // Spurious extra message!
+
+ std::cout << requests.front() << " => " << response.body() << std::endl;
+ requests.erase(requests.begin());
+
+ if (!requests.empty()) {
+ send_request();
+ } else {
+ d.connection().close();
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string url("127.0.0.1:5672/examples");
+ example::options opts(argc, argv);
+
+ opts.add_value(url, 'a', "address", "connect and send to URL", "URL");
+
+ try {
+ opts.parse();
+
+ std::vector<std::string> requests;
+ requests.push_back("Twas brillig, and the slithy toves");
+ requests.push_back("Did gire and gymble in the wabe.");
+ requests.push_back("All mimsy were the borogroves,");
+ requests.push_back("And the mome raths outgrabe.");
+
+ client c(url, requests);
+ proton::default_container(c).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html
new file mode 100644
index 0000000..8913fcb
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/client.cpp.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>client.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>client.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>client.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><vector></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">;</span>
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">client</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">requests</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">sender</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="n">receiver</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">client</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">u</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">>&</span> <span class="n">r</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">requests</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">sender</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="c1">// Create a receiver requesting a dynamically created queue</span>
+ <span class="c1">// for the message source.</span>
+ <span class="n">receiver_options</span> <span class="n">opts</span> <span class="o">=</span> <span class="n">receiver_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">source_options</span><span class="p">().</span><span class="n">dynamic</span><span class="p">(</span><span class="nb">true</span><span class="p">));</span>
+ <span class="n">receiver</span> <span class="o">=</span> <span class="n">sender</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">open_receiver</span><span class="p">(</span><span class="s">""</span><span class="p">,</span> <span class="n">opts</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">send_request</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">req</span><span class="p">;</span>
+ <span class="n">req</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">requests</span><span class="p">.</span><span class="n">front</span><span class="p">());</span>
+ <span class="n">req</span><span class="p">.</span><span class="n">reply_to</span><span class="p">(</span><span class="n">receiver</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">address</span><span class="p">());</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">req</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_receiver_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">receiver</span> <span class="o">&</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">send_request</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="n">d</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">response</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">requests</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="k">return</span><span class="p">;</span> <span class="c1">// Spurious extra message!</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">requests</span><span class="p">.</span><span class="n">front</span><span class="p">()</span> <span class="o"><<</span> <span class="s">" => "</span> <span class="o"><<</span> <span class="n">response</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">erase</span><span class="p">(</span><span class="n">requests</span><span class="p">.</span><span class="n">begin</span><span class="p">());</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">requests</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">send_request</span><span class="p">();</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="n">d</span><span class="p">.</span><span class="n">connection</span><span class="p">().</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">(</span><span class="s">"127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"connect and send to URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">requests</span><span class="p">;</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"Twas brillig, and the slithy toves"</span><span class="p">);</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"Did gire and gymble in the wabe."</span><span class="p">);</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"All mimsy were the borogroves,"</span><span class="p">);</span>
+ <span class="n">requests</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="s">"And the mome raths outgrabe."</span><span class="p">);</span>
+
+ <span class="n">client</span> <span class="n">c</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">requests</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">c</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="client.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp
new file mode 100755
index 0000000..f9935a8
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp
@@ -0,0 +1,76 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/connection_options.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/transport.hpp>
+
+#include <iostream>
+
+using proton::connection_options;
+
+#include "fake_cpp11.hpp"
+
+class handler_2 : public proton::messaging_handler {
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "connection events going to handler_2" << std::endl;
+ std::cout << "connection max_frame_size: " << c.max_frame_size() <<
+ ", idle timeout: " << c.idle_timeout() << std::endl;
+ c.close();
+ }
+};
+
+class main_handler : public proton::messaging_handler {
+ private:
+ std::string url;
+ handler_2 conn_handler;
+
+ public:
+ main_handler(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ // Connection options for this connection. Merged with and overriding the container's
+ // client_connection_options() settings.
+ c.connect(url, connection_options().handler(conn_handler).max_frame_size(2468));
+ }
+
+ void on_connection_open(proton::connection &c) OVERRIDE {
+ std::cout << "unexpected connection event on main handler" << std::endl;
+ c.close();
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+ main_handler handler(url);
+ proton::default_container container(handler);
+ // Global connection options for future connections on container.
+ container.client_connection_options(connection_options().max_frame_size(12345).idle_timeout(proton::duration(15000)));
+ container.run();
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html
new file mode 100644
index 0000000..41adf25
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/connection_options.cpp.html
@@ -0,0 +1,204 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>connection_options.cpp - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/cpp/examples/index.html">Proton C++ Examples</a></li><li>connection_options.cpp</li></ul>
+
+ <div id="-middle-content">
+
+<h1>connection_options.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/connection_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/transport.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">connection_options</span><span class="p">;</span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">handler_2</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"connection events going to handler_2"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"connection max_frame_size: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">max_frame_size</span><span class="p">()</span> <span class="o"><<</span>
+ <span class="s">", idle timeout: "</span> <span class="o"><<</span> <span class="n">c</span><span class="p">.</span><span class="n">idle_timeout</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="k">class</span> <span class="nc">main_handler</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">handler_2</span> <span class="n">conn_handler</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">main_handler</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="c1">// Connection options for this connection. Merged with and overriding the container's</span>
+ <span class="c1">// client_connection_options() settings.</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">connection_options</span><span class="p">().</span><span class="n">handler</span><span class="p">(</span><span class="n">conn_handler</span><span class="p">).</span><span class="n">max_frame_size</span><span class="p">(</span><span class="mi">2468</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_connection_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"unexpected connection event on main handler"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+ <span class="n">main_handler</span> <span class="n">handler</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span> <span class="n">container</span><span class="p">(</span><span class="n">handler</span><span class="p">);</span>
+ <span class="c1">// Global connection options for future connections on container.</span>
+ <span class="n">container</span><span class="p">.</span><span class="n">client_connection_options</span><span class="p">(</span><span class="n">connection_options</span><span class="p">().</span><span class="n">max_frame_size</span><span class="p">(</span><span class="mi">12345</span><span class="p">).</span><span class="n">idle_timeout</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">duration</span><span class="p">(</span><span class="mi">15000</span><span class="p">)));</span>
+ <span class="n">container</span><span class="p">.</span><span class="n">run</span><span class="p">();</span>
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="connection_options.cpp">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp
new file mode 100755
index 0000000..edbc8b6
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/cpp/examples/direct_recv.cpp
@@ -0,0 +1,91 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/link.hpp>
+#include <proton/value.hpp>
+
+#include <iostream>
+#include <map>
+
+#include "fake_cpp11.hpp"
+
+class direct_recv : public proton::messaging_handler {
+ private:
+ std::string url;
+ proton::listener listener;
+ uint64_t expected;
+ uint64_t received;
+
+ public:
+ direct_recv(const std::string &s, int c) : url(s), expected(c), received(0) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ listener = c.listen(url);
+ std::cout << "direct_recv listening on " << url << std::endl;
+ }
+
+ void on_message(proton::delivery &d, proton::message &msg) OVERRIDE {
+ if (proton::coerce<uint64_t>(msg.id()) < received) {
+ return; // Ignore duplicate
+ }
+
+ if (expected == 0 || received < expected) {
+ std::cout << msg.body() << std::endl;
+ received++;
+ }
+
+ if (received == expected) {
+ d.receiver().close();
+ d.connection().close();
+ listener.stop();
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("127.0.0.1:5672/examples");
+ int message_count = 100;
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen and receive on URL", "URL");
+ opts.add_value(message_count, 'm', "messages", "receive COUNT messages", "COUNT");
+
+ try {
+ opts.parse();
+
+ direct_recv recv(address, message_count);
+ proton::default_container(recv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[07/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html.in
new file mode 100644
index 0000000..bf35557
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/options.hpp.html.in
@@ -0,0 +1,161 @@
+
+<h1>options.hpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#ifndef OPTIONS_HPP</span>
+<span class="cp">#define OPTIONS_HPP</span>
+
+
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><ostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><vector></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><stdexcept></span><span class="cp"></span>
+
+<span class="k">namespace</span> <span class="n">example</span> <span class="p">{</span>
+
+<span class="k">struct</span> <span class="nl">bad_option</span> <span class="p">:</span> <span class="k">public</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span> <span class="p">{</span>
+ <span class="n">bad_option</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">s</span><span class="p">)</span> <span class="o">:</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="p">{}</span>
+<span class="p">};</span>
+
+
+<span class="k">class</span> <span class="nc">options</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+
+ <span class="n">options</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">)</span> <span class="o">:</span> <span class="n">argc_</span><span class="p">(</span><span class="n">argc</span><span class="p">),</span> <span class="n">argv_</span><span class="p">(</span><span class="n">argv</span><span class="p">),</span> <span class="n">prog_</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">help_</span><span class="p">()</span> <span class="p">{</span>
+ <span class="kt">size_t</span> <span class="n">slash</span> <span class="o">=</span> <span class="n">prog_</span><span class="p">.</span><span class="n">find_last_of</span><span class="p">(</span><span class="s">"/</span><span class="se">\\</span><span class="s">"</span><span class="p">);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">slash</span> <span class="o">!=</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span>
+ <span class="n">prog_</span> <span class="o">=</span> <span class="n">prog_</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">slash</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span> <span class="c1">// Extract prog name from path</span>
+ <span class="n">add_flag</span><span class="p">(</span><span class="n">help_</span><span class="p">,</span> <span class="sc">'h'</span><span class="p">,</span> <span class="s">"help"</span><span class="p">,</span> <span class="s">"Print the help message"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="o">~</span><span class="n">options</span><span class="p">()</span> <span class="p">{</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">opts</span><span class="o">::</span><span class="n">iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i</span> <span class="o">!=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
+ <span class="k">delete</span> <span class="o">*</span><span class="n">i</span><span class="p">;</span>
+ <span class="p">}</span>
+
+
+ <span class="k">template</span><span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span>
+ <span class="kt">void</span> <span class="n">add_value</span><span class="p">(</span><span class="n">T</span><span class="o">&</span> <span class="n">value</span><span class="p">,</span> <span class="kt">char</span> <span class="n">short_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">long_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">description</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">var</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">opts_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="k">new</span> <span class="n">option_value</span><span class="o"><</span><span class="n">T</span><span class="o">></span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">short_name</span><span class="p">,</span> <span class="n">long_name</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">var</span><span class="p">));</span>
+ <span class="p">}</span>
+
+
+ <span class="kt">void</span> <span class="n">add_flag</span><span class="p">(</span><span class="kt">bool</span><span class="o">&</span> <span class="n">flag</span><span class="p">,</span> <span class="kt">char</span> <span class="n">short_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">long_name</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">description</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">opts_</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="k">new</span> <span class="n">option_flag</span><span class="p">(</span><span class="n">flag</span><span class="p">,</span> <span class="n">short_name</span><span class="p">,</span> <span class="n">long_name</span><span class="p">,</span> <span class="n">description</span><span class="p">));</span>
+ <span class="p">}</span>
+
+
+ <span class="kt">int</span> <span class="n">parse</span><span class="p">()</span> <span class="p">{</span>
+ <span class="kt">int</span> <span class="n">arg</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(;</span> <span class="n">arg</span> <span class="o"><</span> <span class="n">argc_</span> <span class="o">&&</span> <span class="n">argv_</span><span class="p">[</span><span class="n">arg</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="sc">'-'</span><span class="p">;</span> <span class="o">++</span><span class="n">arg</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="o">::</span><span class="n">iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
+ <span class="k">while</span> <span class="p">(</span><span class="n">i</span> <span class="o">!=</span> <span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">()</span> <span class="o">&&</span> <span class="o">!</span><span class="p">(</span><span class="o">*</span><span class="n">i</span><span class="p">)</span><span class="o">-></span><span class="n">parse</span><span class="p">(</span><span class="n">argc_</span><span class="p">,</span> <span class="n">argv_</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
+ <span class="o">++</span><span class="n">i</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o">==</span> <span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">())</span>
+ <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">"unknown option "</span><span class="p">)</span> <span class="o">+</span> <span class="n">argv_</span><span class="p">[</span><span class="n">arg</span><span class="p">]);</span>
+ <span class="p">}</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">help_</span><span class="p">)</span> <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="s">""</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">arg</span><span class="p">;</span>
+ <span class="p">}</span>
+
+
+ <span class="k">friend</span> <span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="n">os</span><span class="p">,</span> <span class="k">const</span> <span class="n">options</span><span class="o">&</span> <span class="n">op</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"usage: "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">prog_</span> <span class="o"><<</span> <span class="s">" [options]"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">"options:"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">for</span> <span class="p">(</span><span class="n">opts</span><span class="o">::</span><span class="n">const_iterator</span> <span class="n">i</span> <span class="o">=</span> <span class="n">op</span><span class="p">.</span><span class="n">opts_</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span> <span class="n">i</span> <span class="o"><</span> <span class="n">op</span><span class="p">.</span><span class="n">opts_</span><span class="p">.</span><span class="n">end</span><span class="p">();</span> <span class="o">++</span><span class="n">i</span><span class="p">)</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="o">**</span><span class="n">i</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="k">return</span> <span class="n">os</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">class</span> <span class="nc">option</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">option</span><span class="p">(</span><span class="kt">char</span> <span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">l</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">d</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">v</span><span class="p">)</span> <span class="o">:</span>
+ <span class="n">short_</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">(</span><span class="s">"-"</span><span class="p">)</span> <span class="o">+</span> <span class="n">s</span><span class="p">),</span> <span class="n">long_</span><span class="p">(</span><span class="s">"--"</span> <span class="o">+</span> <span class="n">l</span><span class="p">),</span> <span class="n">desc_</span><span class="p">(</span><span class="n">d</span><span class="p">),</span> <span class="n">var_</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="p">{}</span>
+ <span class="k">virtual</span> <span class="o">~</span><span class="n">option</span><span class="p">()</span> <span class="p">{}</span>
+
+ <span class="k">virtual</span> <span class="kt">bool</span> <span class="n">parse</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">,</span> <span class="kt">int</span> <span class="o">&</span><span class="n">i</span><span class="p">)</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="nf">print_default</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span><span class="p">)</span> <span class="k">const</span> <span class="p">{}</span>
+
+ <span class="k">friend</span> <span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="k">operator</span><span class="o"><<</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="n">os</span><span class="p">,</span> <span class="k">const</span> <span class="n">option</span><span class="o">&</span> <span class="n">op</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">" "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">short_</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="n">os</span> <span class="o"><<</span> <span class="s">" "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="s">", "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">long_</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">.</span><span class="n">empty</span><span class="p">())</span> <span class="n">os</span> <span class="o"><<</span> <span class="s">"="</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">var_</span><span class="p">;</span>
+ <span class="n">os</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="s">" "</span> <span class="o"><<</span> <span class="n">op</span><span class="p">.</span><span class="n">desc_</span><span class="p">;</span>
+ <span class="n">op</span><span class="p">.</span><span class="n">print_default</span><span class="p">(</span><span class="n">os</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">os</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">protected</span><span class="o">:</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">short_</span><span class="p">,</span> <span class="n">long_</span><span class="p">,</span> <span class="n">desc_</span><span class="p">,</span> <span class="n">var_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">template</span> <span class="o"><</span><span class="k">class</span> <span class="nc">T</span><span class="o">></span>
+ <span class="k">class</span> <span class="nc">option_value</span> <span class="o">:</span> <span class="k">public</span> <span class="n">option</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">option_value</span><span class="p">(</span><span class="n">T</span><span class="o">&</span> <span class="n">value</span><span class="p">,</span> <span class="kt">char</span> <span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">l</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">d</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">v</span><span class="p">)</span> <span class="o">:</span>
+ <span class="n">option</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">v</span><span class="p">),</span> <span class="n">value_</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">bool</span> <span class="n">parse</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">,</span> <span class="kt">int</span> <span class="o">&</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">arg</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">arg</span> <span class="o">==</span> <span class="n">short_</span> <span class="o">||</span> <span class="n">arg</span> <span class="o">==</span> <span class="n">long_</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">i</span> <span class="o"><</span> <span class="n">argc</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">set_value</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">argv</span><span class="p">[</span><span class="o">++</span><span class="n">i</span><span class="p">]);</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="s">"missing value for "</span> <span class="o">+</span> <span class="n">arg</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">arg</span><span class="p">.</span><span class="n">compare</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">long_</span><span class="p">.</span><span class="n">size</span><span class="p">(),</span> <span class="n">long_</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">&&</span> <span class="n">arg</span><span class="p">[</span><span class="n">long_</span><span class="p">.</span><span class="n">size</span><span class="p">()]</span> <span class="o">==</span> <span class="sc">'='</span> <span class="p">)</span> <span class="p">{</span>
+ <span class="n">set_value</span><span class="p">(</span><span class="n">long_</span><span class="p">,</span> <span class="n">arg</span><span class="p">.</span><span class="n">substr</span><span class="p">(</span><span class="n">long_</span><span class="p">.</span><span class="n">size</span><span class="p">()</span><span class="o">+</span><span class="mi">1</span><span class="p">));</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">virtual</span> <span class="kt">void</span> <span class="n">print_default</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">ostream</span><span class="o">&</span> <span class="n">os</span><span class="p">)</span> <span class="k">const</span> <span class="p">{</span> <span class="n">os</span> <span class="o"><<</span> <span class="s">" (default "</span> <span class="o"><<</span> <span class="n">value_</span> <span class="o"><<</span> <span class="s">")"</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">set_value</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">opt</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">istringstream</span> <span class="n">is</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="n">is</span> <span class="o">>></span> <span class="n">value_</span><span class="p">;</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">is</span><span class="p">.</span><span class="n">fail</span><span class="p">()</span> <span class="o">||</span> <span class="n">is</span><span class="p">.</span><span class="n">bad</span><span class="p">())</span>
+ <span class="k">throw</span> <span class="n">bad_option</span><span class="p">(</span><span class="s">"bad value for "</span> <span class="o">+</span> <span class="n">opt</span> <span class="o">+</span> <span class="s">": "</span> <span class="o">+</span> <span class="n">s</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">T</span><span class="o">&</span> <span class="n">value_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">class</span> <span class="nc">option_flag</span><span class="o">:</span> <span class="k">public</span> <span class="n">option</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">option_flag</span><span class="p">(</span><span class="kt">bool</span><span class="o">&</span> <span class="n">flag</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="n">s</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">l</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">d</span><span class="p">)</span> <span class="o">:</span>
+ <span class="n">option</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="n">l</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="s">""</span><span class="p">),</span> <span class="n">flag_</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span>
+ <span class="p">{</span> <span class="n">flag_</span> <span class="o">=</span> <span class="nb">false</span><span class="p">;</span> <span class="p">}</span>
+
+ <span class="kt">bool</span> <span class="n">parse</span><span class="p">(</span><span class="kt">int</span> <span class="p">,</span> <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv</span><span class="p">,</span> <span class="kt">int</span> <span class="o">&</span><span class="n">i</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">short_</span> <span class="o">||</span> <span class="n">argv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">==</span> <span class="n">long_</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">flag_</span> <span class="o">=</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="k">return</span> <span class="nb">true</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="k">return</span> <span class="nb">false</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="k">private</span><span class="o">:</span>
+ <span class="kt">bool</span> <span class="o">&</span><span class="n">flag_</span><span class="p">;</span>
+ <span class="p">};</span>
+
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">option</span><span class="o">*></span> <span class="n">opts</span><span class="p">;</span>
+
+ <span class="kt">int</span> <span class="n">argc_</span><span class="p">;</span>
+ <span class="kt">char</span> <span class="k">const</span> <span class="o">*</span> <span class="k">const</span> <span class="o">*</span> <span class="n">argv_</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">prog_</span><span class="p">;</span>
+ <span class="n">opts</span> <span class="n">opts_</span><span class="p">;</span>
+ <span class="kt">bool</span> <span class="n">help_</span><span class="p">;</span>
+<span class="p">};</span>
+<span class="p">}</span>
+
+<span class="cp">#endif </span><span class="c1">// OPTIONS_HPP</span>
+</pre></div>
+
+<p><a href="options.hpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp
new file mode 100644
index 0000000..649716b
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp
@@ -0,0 +1,67 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/delivery.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+using proton::source_options;
+
+class browser : public proton::messaging_handler {
+ private:
+ proton::url url;
+
+ public:
+ browser(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ proton::connection conn = c.connect(url);
+ source_options browsing = source_options().distribution_mode(proton::source::COPY);
+ conn.open_receiver(url.path(), proton::receiver_options().source(browsing));
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+
+ browser b(url);
+ proton::default_container(b).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html.in
new file mode 100644
index 0000000..8494ed4
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/queue_browser.cpp.html.in
@@ -0,0 +1,51 @@
+
+<h1>queue_browser.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/delivery.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">using</span> <span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">browser</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">browser</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">source_options</span> <span class="n">browsing</span> <span class="o">=</span> <span class="n">source_options</span><span class="p">().</span><span class="n">distribution_mode</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source</span><span class="o">::</span><span class="n">COPY</span><span class="p">);</span>
+ <span class="n">conn</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">(),</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">browsing</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+
+ <span class="n">browser</span> <span class="n">b</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">b</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="queue_browser.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp
new file mode 100644
index 0000000..c7a63d9
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/receiver_options.hpp>
+#include <proton/source_options.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+
+#include "fake_cpp11.hpp"
+
+namespace {
+
+ // Example custom function to configure an AMQP filter,
+ // specifically an APACHE.ORG:SELECTOR
+ // (http://www.amqp.org/specification/1.0/filters)
+
+ void set_filter(proton::source_options &opts, const std::string& selector_str) {
+ proton::source::filter_map map;
+ proton::symbol filter_key("selector");
+ proton::value filter_value;
+ // The value is a specific AMQP "described type": binary string with symbolic descriptor
+ proton::codec::encoder enc(filter_value);
+ enc << proton::codec::start::described()
+ << proton::symbol("apache.org:selector-filter:string")
+ << proton::binary(selector_str)
+ << proton::codec::finish();
+ // In our case, the map has this one element
+ map[filter_key] = filter_value;
+ opts.filters(map);
+ }
+}
+
+
+class selected_recv : public proton::messaging_handler {
+ private:
+ proton::url url;
+
+ public:
+ selected_recv(const std::string& u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ proton::source_options opts;
+ set_filter(opts, "colour = 'green'");
+ proton::connection conn = c.connect(url);
+ conn.open_receiver(url.path(), proton::receiver_options().source(opts));
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << m.body() << std::endl;
+ }
+};
+
+int main(int argc, char **argv) {
+ try {
+ std::string url = argc > 1 ? argv[1] : "127.0.0.1:5672/examples";
+
+ selected_recv recv(url);
+ proton::default_container(recv).run();
+
+ return 0;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html.in
new file mode 100644
index 0000000..e4585d0
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/selected_recv.cpp.html.in
@@ -0,0 +1,72 @@
+
+<h1>selected_recv.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/receiver_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">namespace</span> <span class="p">{</span>
+
+ <span class="c1">// Example custom function to configure an AMQP filter,</span>
+ <span class="c1">// specifically an APACHE.ORG:SELECTOR</span>
+ <span class="c1">// (http://www.amqp.org/specification/1.0/filters)</span>
+
+ <span class="kt">void</span> <span class="n">set_filter</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span> <span class="o">&</span><span class="n">opts</span><span class="p">,</span> <span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">selector_str</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source</span><span class="o">::</span><span class="n">filter_map</span> <span class="n">map</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span> <span class="n">filter_key</span><span class="p">(</span><span class="s">"selector"</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">value</span> <span class="n">filter_value</span><span class="p">;</span>
+ <span class="c1">// The value is a specific AMQP "described type": binary string with symbolic descriptor</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">encoder</span> <span class="n">enc</span><span class="p">(</span><span class="n">filter_value</span><span class="p">);</span>
+ <span class="n">enc</span> <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">start</span><span class="o">::</span><span class="n">described</span><span class="p">()</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">symbol</span><span class="p">(</span><span class="s">"apache.org:selector-filter:string"</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">binary</span><span class="p">(</span><span class="n">selector_str</span><span class="p">)</span>
+ <span class="o"><<</span> <span class="n">proton</span><span class="o">::</span><span class="n">codec</span><span class="o">::</span><span class="n">finish</span><span class="p">();</span>
+ <span class="c1">// In our case, the map has this one element</span>
+ <span class="n">map</span><span class="p">[</span><span class="n">filter_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">filter_value</span><span class="p">;</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">filters</span><span class="p">(</span><span class="n">map</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">}</span>
+
+
+<span class="k">class</span> <span class="nc">selected_recv</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">selected_recv</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">source_options</span> <span class="n">opts</span><span class="p">;</span>
+ <span class="n">set_filter</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="s">"colour = 'green'"</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">conn</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">(),</span> <span class="n">proton</span><span class="o">::</span><span class="n">receiver_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">opts</span><span class="p">));</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span> <span class="o">=</span> <span class="n">argc</span> <span class="o">></span> <span class="mi">1</span> <span class="o">?</span> <span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">:</span> <span class="s">"127.0.0.1:5672/examples"</span><span class="p">;</span>
+
+ <span class="n">selected_recv</span> <span class="n">recv</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">recv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="selected_recv.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp
new file mode 100644
index 0000000..ec24f9f
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/connection.hpp>
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/tracker.hpp>
+#include <proton/url.hpp>
+
+#include <iostream>
+#include <map>
+#include <string>
+#include <cctype>
+
+#include "fake_cpp11.hpp"
+
+class server : public proton::messaging_handler {
+ private:
+ typedef std::map<std::string, proton::sender> sender_map;
+ proton::url url;
+ proton::connection connection;
+ sender_map senders;
+
+ public:
+ server(const std::string &u) : url(u) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ connection = c.connect(url);
+ connection.open_receiver(url.path());
+
+ std::cout << "server connected to " << url << std::endl;
+ }
+
+ std::string to_upper(const std::string &s) {
+ std::string uc(s);
+ size_t l = uc.size();
+ for (size_t i=0; i<l; i++)
+ uc[i] = static_cast<char>(std::toupper(uc[i]));
+ return uc;
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << "Received " << m.body() << std::endl;
+
+ std::string reply_to = m.reply_to();
+ proton::message reply;
+
+ reply.to(reply_to);
+ reply.body(to_upper(proton::get<std::string>(m.body())));
+ reply.correlation_id(m.correlation_id());
+
+ if (!senders[reply_to]) {
+ senders[reply_to] = connection.open_sender(reply_to);
+ }
+
+ senders[reply_to].send(reply);
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("amqp://0.0.0.0:5672/examples");
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen on URL", "URL");
+
+ try {
+ opts.parse();
+
+ server srv(address);
+ proton::default_container(srv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html.in
new file mode 100644
index 0000000..06f2825
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server.cpp.html.in
@@ -0,0 +1,84 @@
+
+<h1>server.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/connection.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/url.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><cctype></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">server</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_map</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">url</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">connection</span> <span class="n">connection</span><span class="p">;</span>
+ <span class="n">sender_map</span> <span class="n">senders</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">server</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">connection</span> <span class="o">=</span> <span class="n">c</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">connection</span><span class="p">.</span><span class="n">open_receiver</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">path</span><span class="p">());</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"server connected to "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">to_upper</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">uc</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="kt">size_t</span> <span class="n">l</span> <span class="o">=</span> <span class="n">uc</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o"><</span><span class="n">l</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
+ <span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">static_cast</span><span class="o"><</span><span class="kt">char</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">toupper</span><span class="p">(</span><span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]));</span>
+ <span class="k">return</span> <span class="n">uc</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Received "</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">reply_to</span> <span class="o">=</span> <span class="n">m</span><span class="p">.</span><span class="n">reply_to</span><span class="p">();</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">reply</span><span class="p">;</span>
+
+ <span class="n">reply</span><span class="p">.</span><span class="n">to</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">to_upper</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">())));</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">());</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">senders</span><span class="p">[</span><span class="n">reply_to</span><span class="p">])</span> <span class="p">{</span>
+ <span class="n">senders</span><span class="p">[</span><span class="n">reply_to</span><span class="p">]</span> <span class="o">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">open_sender</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">senders</span><span class="p">[</span><span class="n">reply_to</span><span class="p">].</span><span class="n">send</span><span class="p">(</span><span class="n">reply</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"amqp://0.0.0.0:5672/examples"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">server</span> <span class="n">srv</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">srv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="server.cpp">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp
new file mode 100644
index 0000000..220934f
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp
@@ -0,0 +1,119 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+#include "options.hpp"
+
+#include <proton/default_container.hpp>
+#include <proton/messaging_handler.hpp>
+#include <proton/sender.hpp>
+#include <proton/source_options.hpp>
+#include <proton/tracker.hpp>
+
+#include <iostream>
+#include <map>
+#include <string>
+#include <sstream>
+#include <cctype>
+
+#include "fake_cpp11.hpp"
+
+class server : public proton::messaging_handler {
+ private:
+ typedef std::map<std::string, proton::sender> sender_map;
+ std::string url;
+ sender_map senders;
+ int address_counter;
+
+ public:
+ server(const std::string &u) : url(u), address_counter(0) {}
+
+ void on_container_start(proton::container &c) OVERRIDE {
+ c.listen(url);
+ std::cout << "server listening on " << url << std::endl;
+ }
+
+ std::string to_upper(const std::string &s) {
+ std::string uc(s);
+ size_t l = uc.size();
+
+ for (size_t i=0; i<l; i++)
+ uc[i] = static_cast<char>(std::toupper(uc[i]));
+
+ return uc;
+ }
+
+ std::string generate_address() {
+ std::ostringstream addr;
+ addr << "server" << address_counter++;
+
+ return addr.str();
+ }
+
+ void on_sender_open(proton::sender &sender) OVERRIDE {
+ if (sender.source().dynamic()) {
+ std::string addr = generate_address();
+ sender.open(proton::sender_options().source(proton::source_options().address(addr)));
+ senders[addr] = sender;
+ }
+ }
+
+ void on_message(proton::delivery &, proton::message &m) OVERRIDE {
+ std::cout << "Received " << m.body() << std::endl;
+
+ std::string reply_to = m.reply_to();
+ sender_map::iterator it = senders.find(reply_to);
+
+ if (it == senders.end()) {
+ std::cout << "No link for reply_to: " << reply_to << std::endl;
+ } else {
+ proton::sender sender = it->second;
+ proton::message reply;
+
+ reply.to(reply_to);
+ reply.body(to_upper(proton::get<std::string>(m.body())));
+ reply.correlation_id(m.correlation_id());
+
+ sender.send(reply);
+ }
+ }
+};
+
+int main(int argc, char **argv) {
+ std::string address("amqp://127.0.0.1:5672/examples");
+ example::options opts(argc, argv);
+
+ opts.add_value(address, 'a', "address", "listen on URL", "URL");
+
+ try {
+ opts.parse();
+
+ server srv(address);
+ proton::default_container(srv).run();
+
+ return 0;
+ } catch (const example::bad_option& e) {
+ std::cout << opts << std::endl << e.what() << std::endl;
+ } catch (const std::exception& e) {
+ std::cerr << e.what() << std::endl;
+ }
+
+ return 1;
+}
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html.in b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html.in
new file mode 100644
index 0000000..3a6203f
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/cpp/examples/server_direct.cpp.html.in
@@ -0,0 +1,103 @@
+
+<h1>server_direct.cpp</h1>
+<div class="highlight"><pre><span></span><span class="cp">#include</span> <span class="cpf">"options.hpp"</span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><proton/default_container.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/messaging_handler.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/sender.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/source_options.hpp></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><proton/tracker.hpp></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf"><iostream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><map></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><string></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><sstream></span><span class="cp"></span>
+<span class="cp">#include</span> <span class="cpf"><cctype></span><span class="cp"></span>
+
+<span class="cp">#include</span> <span class="cpf">"fake_cpp11.hpp"</span><span class="cp"></span>
+
+<span class="k">class</span> <span class="nc">server</span> <span class="o">:</span> <span class="k">public</span> <span class="n">proton</span><span class="o">::</span><span class="n">messaging_handler</span> <span class="p">{</span>
+ <span class="k">private</span><span class="o">:</span>
+ <span class="k">typedef</span> <span class="n">std</span><span class="o">::</span><span class="n">map</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">sender</span><span class="o">></span> <span class="n">sender_map</span><span class="p">;</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">url</span><span class="p">;</span>
+ <span class="n">sender_map</span> <span class="n">senders</span><span class="p">;</span>
+ <span class="kt">int</span> <span class="n">address_counter</span><span class="p">;</span>
+
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">server</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">u</span><span class="p">)</span> <span class="o">:</span> <span class="n">url</span><span class="p">(</span><span class="n">u</span><span class="p">),</span> <span class="n">address_counter</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">on_container_start</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">container</span> <span class="o">&</span><span class="n">c</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">c</span><span class="p">.</span><span class="n">listen</span><span class="p">(</span><span class="n">url</span><span class="p">);</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"server listening on "</span> <span class="o"><<</span> <span class="n">url</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">to_upper</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="o">&</span><span class="n">s</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">uc</span><span class="p">(</span><span class="n">s</span><span class="p">);</span>
+ <span class="kt">size_t</span> <span class="n">l</span> <span class="o">=</span> <span class="n">uc</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
+
+ <span class="k">for</span> <span class="p">(</span><span class="kt">size_t</span> <span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span> <span class="n">i</span><span class="o"><</span><span class="n">l</span><span class="p">;</span> <span class="n">i</span><span class="o">++</span><span class="p">)</span>
+ <span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">static_cast</span><span class="o"><</span><span class="kt">char</span><span class="o">></span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">toupper</span><span class="p">(</span><span class="n">uc</span><span class="p">[</span><span class="n">i</span><span class="p">]));</span>
+
+ <span class="k">return</span> <span class="n">uc</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">generate_address</span><span class="p">()</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">ostringstream</span> <span class="n">addr</span><span class="p">;</span>
+ <span class="n">addr</span> <span class="o"><<</span> <span class="s">"server"</span> <span class="o"><<</span> <span class="n">address_counter</span><span class="o">++</span><span class="p">;</span>
+
+ <span class="k">return</span> <span class="n">addr</span><span class="p">.</span><span class="n">str</span><span class="p">();</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_sender_open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="o">&</span><span class="n">sender</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="n">sender</span><span class="p">.</span><span class="n">source</span><span class="p">().</span><span class="n">dynamic</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">generate_address</span><span class="p">();</span>
+ <span class="n">sender</span><span class="p">.</span><span class="n">open</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">sender_options</span><span class="p">().</span><span class="n">source</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">source_options</span><span class="p">().</span><span class="n">address</span><span class="p">(</span><span class="n">addr</span><span class="p">)));</span>
+ <span class="n">senders</span><span class="p">[</span><span class="n">addr</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender</span><span class="p">;</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">on_message</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">delivery</span> <span class="o">&</span><span class="p">,</span> <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="o">&</span><span class="n">m</span><span class="p">)</span> <span class="n">OVERRIDE</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Received "</span> <span class="o"><<</span> <span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">reply_to</span> <span class="o">=</span> <span class="n">m</span><span class="p">.</span><span class="n">reply_to</span><span class="p">();</span>
+ <span class="n">sender_map</span><span class="o">::</span><span class="n">iterator</span> <span class="n">it</span> <span class="o">=</span> <span class="n">senders</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+
+ <span class="k">if</span> <span class="p">(</span><span class="n">it</span> <span class="o">==</span> <span class="n">senders</span><span class="p">.</span><span class="n">end</span><span class="p">())</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"No link for reply_to: "</span> <span class="o"><<</span> <span class="n">reply_to</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">sender</span> <span class="n">sender</span> <span class="o">=</span> <span class="n">it</span><span class="o">-></span><span class="n">second</span><span class="p">;</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">message</span> <span class="n">reply</span><span class="p">;</span>
+
+ <span class="n">reply</span><span class="p">.</span><span class="n">to</span><span class="p">(</span><span class="n">reply_to</span><span class="p">);</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">body</span><span class="p">(</span><span class="n">to_upper</span><span class="p">(</span><span class="n">proton</span><span class="o">::</span><span class="n">get</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">body</span><span class="p">())));</span>
+ <span class="n">reply</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">(</span><span class="n">m</span><span class="p">.</span><span class="n">correlation_id</span><span class="p">());</span>
+
+ <span class="n">sender</span><span class="p">.</span><span class="n">send</span><span class="p">(</span><span class="n">reply</span><span class="p">);</span>
+ <span class="p">}</span>
+ <span class="p">}</span>
+<span class="p">};</span>
+
+<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">address</span><span class="p">(</span><span class="s">"amqp://127.0.0.1:5672/examples"</span><span class="p">);</span>
+ <span class="n">example</span><span class="o">::</span><span class="n">options</span> <span class="n">opts</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">);</span>
+
+ <span class="n">opts</span><span class="p">.</span><span class="n">add_value</span><span class="p">(</span><span class="n">address</span><span class="p">,</span> <span class="sc">'a'</span><span class="p">,</span> <span class="s">"address"</span><span class="p">,</span> <span class="s">"listen on URL"</span><span class="p">,</span> <span class="s">"URL"</span><span class="p">);</span>
+
+ <span class="k">try</span> <span class="p">{</span>
+ <span class="n">opts</span><span class="p">.</span><span class="n">parse</span><span class="p">();</span>
+
+ <span class="n">server</span> <span class="n">srv</span><span class="p">(</span><span class="n">address</span><span class="p">);</span>
+ <span class="n">proton</span><span class="o">::</span><span class="n">default_container</span><span class="p">(</span><span class="n">srv</span><span class="p">).</span><span class="n">run</span><span class="p">();</span>
+
+ <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">example</span><span class="o">::</span><span class="n">bad_option</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">opts</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">exception</span><span class="o">&</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">std</span><span class="o">::</span><span class="n">cerr</span> <span class="o"><<</span> <span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="k">return</span> <span class="mi">1</span><span class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
+<p><a href="server_direct.cpp">Download this file</a></p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[16/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html
new file mode 100644
index 0000000..507e954
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_recv.py.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>direct_recv.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>direct_recv.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>direct_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span><span class="p">:</span>
+ <span class="c1"># ignore duplicate message</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="direct_recv.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py
new file mode 100755
index 0000000..35bd2f5
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Send(MessagingHandler):
+ def __init__(self, url, messages):
+ super(Send, self).__init__()
+ self.url = url
+ self.sent = 0
+ self.confirmed = 0
+ self.total = messages
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+
+ def on_sendable(self, event):
+ while event.sender.credit and self.sent < self.total:
+ msg = Message(id=(self.sent+1), body={'sequence':(self.sent+1)})
+ event.sender.send(msg)
+ self.sent += 1
+
+ def on_accepted(self, event):
+ self.confirmed += 1
+ if self.confirmed == self.total:
+ print("all messages confirmed")
+ event.connection.close()
+ self.acceptor.close()
+
+ def on_disconnected(self, event):
+ self.sent = self.confirmed
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to send (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Send(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html
new file mode 100644
index 0000000..26f0c08
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/direct_send.py.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>direct_send.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>direct_send.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>direct_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">while</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s1">'sequence'</span><span class="p">:(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">)})</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"all messages confirmed"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="direct_send.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py
new file mode 100755
index 0000000..7a91aa4
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, server, address):
+ super(HelloWorld, self).__init__()
+ self.server = server
+ self.address = address
+
+ def on_start(self, event):
+ conn = event.container.connect(self.server)
+ event.container.create_receiver(conn, self.address)
+ event.container.create_sender(conn, self.address)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+ event.connection.close()
+
+Container(HelloWorld("localhost:5672", "examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html
new file mode 100644
index 0000000..a137171
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>helloworld.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py
new file mode 100755
index 0000000..5a5ce6d
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.utils import BlockingConnection
+from proton.handlers import IncomingMessageHandler
+
+conn = BlockingConnection("localhost:5672")
+receiver = conn.create_receiver("examples")
+sender = conn.create_sender("examples")
+sender.send(Message(body="Hello World!"));
+msg = receiver.receive(timeout=30)
+print(msg.body)
+receiver.accept()
+conn.close()
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html
new file mode 100644
index 0000000..459531e
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld_blocking.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>helloworld_blocking.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld_blocking.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.utils</span> <span class="kn">import</span> <span class="n">BlockingConnection</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IncomingMessageHandler</span>
+
+<span class="n">conn</span> <span class="o">=</span> <span class="n">BlockingConnection</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+<span class="n">receiver</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="s2">"examples"</span><span class="p">)</span>
+<span class="n">sender</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="s2">"examples"</span><span class="p">)</span>
+<span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">));</span>
+<span class="n">msg</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">receive</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="n">msg</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+<span class="n">receiver</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span>
+<span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_blocking.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py
new file mode 100755
index 0000000..0292abe
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, url):
+ super(HelloWorld, self).__init__()
+ self.url = url
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+ event.container.create_sender(self.url)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+
+ def on_accepted(self, event):
+ event.connection.close()
+
+ def on_connection_closed(self, event):
+ self.acceptor.close()
+
+Container(HelloWorld("localhost:8888/examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html
new file mode 100644
index 0000000..a0fd84b
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld_direct.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>helloworld_direct.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld_direct.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_closed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:8888/examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_direct.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py
new file mode 100755
index 0000000..a3b017a
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton_tornado import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, url):
+ super(HelloWorld, self).__init__()
+ self.url = url
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+ event.container.create_sender(self.url)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+
+ def on_accepted(self, event):
+ event.connection.close()
+
+ def on_connection_closed(self, event):
+ self.acceptor.close()
+
+Container(HelloWorld("localhost:8888/examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html
new file mode 100644
index 0000000..64fd893
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html
@@ -0,0 +1,177 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>helloworld_direct_tornado.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>helloworld_direct_tornado.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>helloworld_direct_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_closed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:8888/examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_direct_tornado.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py
new file mode 100755
index 0000000..0781bbb
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton_tornado import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, server, address):
+ super(HelloWorld, self).__init__()
+ self.server = server
+ self.address = address
+
+ def on_start(self, event):
+ conn = event.container.connect(self.server)
+ event.container.create_receiver(conn, self.address)
+ event.container.create_sender(conn, self.address)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+ event.connection.close()
+
+Container(HelloWorld("localhost:5672", "examples")).run()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[03/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py
new file mode 100755
index 0000000..7a91aa4
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, server, address):
+ super(HelloWorld, self).__init__()
+ self.server = server
+ self.address = address
+
+ def on_start(self, event):
+ conn = event.container.connect(self.server)
+ event.container.create_receiver(conn, self.address)
+ event.container.create_sender(conn, self.address)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+ event.connection.close()
+
+Container(HelloWorld("localhost:5672", "examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html.in
new file mode 100644
index 0000000..5c697e7
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld.py.html.in
@@ -0,0 +1,30 @@
+
+<h1>helloworld.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py
new file mode 100755
index 0000000..5a5ce6d
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py
@@ -0,0 +1,34 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.utils import BlockingConnection
+from proton.handlers import IncomingMessageHandler
+
+conn = BlockingConnection("localhost:5672")
+receiver = conn.create_receiver("examples")
+sender = conn.create_sender("examples")
+sender.send(Message(body="Hello World!"));
+msg = receiver.receive(timeout=30)
+print(msg.body)
+receiver.accept()
+conn.close()
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html.in
new file mode 100644
index 0000000..3fae32d
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_blocking.py.html.in
@@ -0,0 +1,18 @@
+
+<h1>helloworld_blocking.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.utils</span> <span class="kn">import</span> <span class="n">BlockingConnection</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IncomingMessageHandler</span>
+
+<span class="n">conn</span> <span class="o">=</span> <span class="n">BlockingConnection</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+<span class="n">receiver</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="s2">"examples"</span><span class="p">)</span>
+<span class="n">sender</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="s2">"examples"</span><span class="p">)</span>
+<span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">));</span>
+<span class="n">msg</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">receive</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+<span class="k">print</span><span class="p">(</span><span class="n">msg</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+<span class="n">receiver</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span>
+<span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_blocking.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py
new file mode 100755
index 0000000..0292abe
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, url):
+ super(HelloWorld, self).__init__()
+ self.url = url
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+ event.container.create_sender(self.url)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+
+ def on_accepted(self, event):
+ event.connection.close()
+
+ def on_connection_closed(self, event):
+ self.acceptor.close()
+
+Container(HelloWorld("localhost:8888/examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html.in
new file mode 100644
index 0000000..b4afcb9
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct.py.html.in
@@ -0,0 +1,33 @@
+
+<h1>helloworld_direct.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_closed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:8888/examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_direct.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py
new file mode 100755
index 0000000..a3b017a
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton_tornado import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, url):
+ super(HelloWorld, self).__init__()
+ self.url = url
+
+ def on_start(self, event):
+ self.acceptor = event.container.listen(self.url)
+ event.container.create_sender(self.url)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+
+ def on_accepted(self, event):
+ event.connection.close()
+
+ def on_connection_closed(self, event):
+ self.acceptor.close()
+
+Container(HelloWorld("localhost:8888/examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html.in
new file mode 100644
index 0000000..2bbed2c
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_direct_tornado.py.html.in
@@ -0,0 +1,33 @@
+
+<h1>helloworld_direct_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">listen</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_closed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">acceptor</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:8888/examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_direct_tornado.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py
new file mode 100755
index 0000000..0781bbb
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton_tornado import Container
+
+class HelloWorld(MessagingHandler):
+ def __init__(self, server, address):
+ super(HelloWorld, self).__init__()
+ self.server = server
+ self.address = address
+
+ def on_start(self, event):
+ conn = event.container.connect(self.server)
+ event.container.create_receiver(conn, self.address)
+ event.container.create_sender(conn, self.address)
+
+ def on_sendable(self, event):
+ event.sender.send(Message(body="Hello World!"))
+ event.sender.close()
+
+ def on_message(self, event):
+ print(event.message.body)
+ event.connection.close()
+
+Container(HelloWorld("localhost:5672", "examples")).run()
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html.in
new file mode 100644
index 0000000..16b2858
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/helloworld_tornado.py.html.in
@@ -0,0 +1,30 @@
+
+<h1>helloworld_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">HelloWorld</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">server</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">server</span> <span class="o">=</span> <span class="n">server</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="s2">"Hello World!"</span><span class="p">))</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">Container</span><span class="p">(</span><span class="n">HelloWorld</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="helloworld_tornado.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/index.md
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/index.md b/input/releases/qpid-proton-0.13.0/proton/python/examples/index.md
new file mode 100644
index 0000000..9335605
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/index.md
@@ -0,0 +1,41 @@
+
+# Proton Python Examples
+
+## Example files
+
+ - [abstract_server.py](abstract_server.py.html)
+ - [broker.py](broker.py.html)
+ - [client.py](client.py.html)
+ - [client_http.py](client_http.py.html)
+ - [db_common.py](db_common.py.html)
+ - [db_ctrl.py](db_ctrl.py.html)
+ - [db_recv.py](db_recv.py.html)
+ - [db_send.py](db_send.py.html)
+ - [direct_recv.py](direct_recv.py.html)
+ - [direct_send.py](direct_send.py.html)
+ - [helloworld.py](helloworld.py.html)
+ - [helloworld_blocking.py](helloworld_blocking.py.html)
+ - [helloworld_direct.py](helloworld_direct.py.html)
+ - [helloworld_direct_tornado.py](helloworld_direct_tornado.py.html)
+ - [helloworld_tornado.py](helloworld_tornado.py.html)
+ - [proton_server.py](proton_server.py.html)
+ - [proton_tornado.py](proton_tornado.py.html)
+ - [queue_browser.py](queue_browser.py.html)
+ - [recurring_timer.py](recurring_timer.py.html)
+ - [recurring_timer_tornado.py](recurring_timer_tornado.py.html)
+ - [selected_recv.py](selected_recv.py.html)
+ - [server.py](server.py.html)
+ - [server_direct.py](server_direct.py.html)
+ - [server_tx.py](server_tx.py.html)
+ - [simple_recv.py](simple_recv.py.html)
+ - [simple_send.py](simple_send.py.html)
+ - [sync_client.py](sync_client.py.html)
+ - [test_examples.py](test_examples.py.html)
+ - [tx_recv.py](tx_recv.py.html)
+ - [tx_recv_interactive.py](tx_recv_interactive.py.html)
+ - [tx_send.py](tx_send.py.html)
+
+## More information
+
+ - [README](https://github.com/apache/qpid-proton/tree/0.13.0/examples/python/README)
+ - [Source location](https://github.com/apache/qpid-proton/tree/0.13.0/examples/python)
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py
new file mode 100755
index 0000000..9351f55
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py
@@ -0,0 +1,51 @@
+from __future__ import print_function
+#
+# 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.
+#
+
+from proton import Message
+from proton.reactor import Container
+from proton.handlers import MessagingHandler
+
+class Server(MessagingHandler):
+ def __init__(self, host, address):
+ super(Server, self).__init__()
+ self.container = Container(self)
+ self.conn = self.container.connect(host)
+ self.receiver = self.container.create_receiver(self.conn, address)
+ self.sender = self.container.create_sender(self.conn, None)
+
+ def on_message(self, event):
+ self.on_request(event.message.body, event.message.reply_to)
+
+ def on_connection_close(self, endpoint, error):
+ if error: print("Closed due to %s" % error)
+ self.conn.close()
+
+ def run(self):
+ self.container.run()
+
+ def send(self, response, reply_to):
+ msg = Message(body=response)
+ if self.sender:
+ msg.address = reply_to
+ self.sender.send(msg)
+
+ def on_request(self, request, reply_to):
+ pass
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html.in
new file mode 100644
index 0000000..5ac43a9
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_server.py.html.in
@@ -0,0 +1,55 @@
+
+<h1>proton_server.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="c1">#</span>
+<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one</span>
+<span class="c1"># or more contributor license agreements. See the NOTICE file</span>
+<span class="c1"># distributed with this work for additional information</span>
+<span class="c1"># regarding copyright ownership. The ASF licenses this file</span>
+<span class="c1"># to you under the Apache License, Version 2.0 (the</span>
+<span class="c1"># "License"); you may not use this file except in compliance</span>
+<span class="c1"># with the License. You may obtain a copy of the License at</span>
+<span class="c1">#</span>
+<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="c1">#</span>
+<span class="c1"># Unless required by applicable law or agreed to in writing,</span>
+<span class="c1"># software distributed under the License is distributed on an</span>
+<span class="c1"># "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
+<span class="c1"># KIND, either express or implied. See the License for the</span>
+<span class="c1"># specific language governing permissions and limitations</span>
+<span class="c1"># under the License.</span>
+<span class="c1">#</span>
+
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+
+<span class="k">class</span> <span class="nc">Server</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">,</span> <span class="n">address</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Server</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">host</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">receiver</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="n">address</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">on_request</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">,</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">reply_to</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_connection_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">error</span><span class="p">:</span> <span class="k">print</span><span class="p">(</span><span class="s2">"Closed due to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">error</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">send</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">response</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">):</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="n">response</span><span class="p">)</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="p">:</span>
+ <span class="n">msg</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">reply_to</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_request</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">reply_to</span><span class="p">):</span>
+ <span class="k">pass</span>
+</pre></div>
+
+<p><a href="proton_server.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py
new file mode 100755
index 0000000..f946b43
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+import tornado.ioloop
+from proton.reactor import Container as BaseContainer
+from proton.handlers import IOHandler
+
+class TornadoLoopHandler:
+
+ def __init__(self, loop=None, handler_base=None):
+ self.loop = loop or tornado.ioloop.IOLoop.instance()
+ self.io = handler_base or IOHandler()
+ self.count = 0
+
+ def on_reactor_init(self, event):
+ self.reactor = event.reactor
+
+ def on_reactor_quiesced(self, event):
+ event.reactor.yield_()
+
+ def on_unhandled(self, name, event):
+ event.dispatch(self.io)
+
+ def _events(self, sel):
+ events = self.loop.ERROR
+ if sel.reading:
+ events |= self.loop.READ
+ if sel.writing:
+ events |= self.loop.WRITE
+ return events
+
+ def _schedule(self, sel):
+ if sel.deadline:
+ self.loop.add_timeout(sel.deadline, lambda: self.expired(sel))
+
+ def _expired(self, sel):
+ sel.expired()
+
+ def _process(self):
+ self.reactor.process()
+ if not self.reactor.quiesced:
+ self.loop.add_callback(self._process)
+
+ def _callback(self, sel, events):
+ if self.loop.READ & events:
+ sel.readable()
+ if self.loop.WRITE & events:
+ sel.writable()
+ self._process()
+
+ def on_selectable_init(self, event):
+ sel = event.context
+ if sel.fileno() >= 0:
+ self.loop.add_handler(sel.fileno(), lambda fd, events: self._callback(sel, events), self._events(sel))
+ self._schedule(sel)
+ self.count += 1
+
+ def on_selectable_updated(self, event):
+ sel = event.context
+ if sel.fileno() > 0:
+ self.loop.update_handler(sel.fileno(), self._events(sel))
+ self._schedule(sel)
+
+ def on_selectable_final(self, event):
+ sel = event.context
+ if sel.fileno() > 0:
+ self.loop.remove_handler(sel.fileno())
+ sel.release()
+ self.count -= 1
+ if self.count == 0:
+ self.loop.add_callback(self._stop)
+
+ def _stop(self):
+ self.reactor.stop()
+ self.loop.stop()
+
+class Container(object):
+ def __init__(self, *handlers, **kwargs):
+ self.tornado_loop = kwargs.get('loop', tornado.ioloop.IOLoop.instance())
+ kwargs['global_handler'] = TornadoLoopHandler(self.tornado_loop, kwargs.get('handler_base', None))
+ self.container = BaseContainer(*handlers, **kwargs)
+
+ def initialise(self):
+ self.container.start()
+ self.container.process()
+
+ def run(self):
+ self.initialise()
+ self.tornado_loop.start()
+
+ def touch(self):
+ self._process()
+
+ def _process(self):
+ self.container.process()
+ if not self.container.quiesced:
+ self.tornado_loop.add_callback(self._process)
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html.in
new file mode 100644
index 0000000..8796b1b
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/proton_tornado.py.html.in
@@ -0,0 +1,99 @@
+
+<h1>proton_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">tornado.ioloop</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span> <span class="k">as</span> <span class="n">BaseContainer</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IOHandler</span>
+
+<span class="k">class</span> <span class="nc">TornadoLoopHandler</span><span class="p">:</span>
+
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">loop</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">handler_base</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="o">=</span> <span class="n">loop</span> <span class="ow">or</span> <span class="n">tornado</span><span class="o">.</span><span class="n">ioloop</span><span class="o">.</span><span class="n">IOLoop</span><span class="o">.</span><span class="n">instance</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">io</span> <span class="o">=</span> <span class="n">handler_base</span> <span class="ow">or</span> <span class="n">IOHandler</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_reactor_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">reactor</span>
+
+ <span class="k">def</span> <span class="nf">on_reactor_quiesced</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">yield_</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_unhandled</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">io</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_events</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">):</span>
+ <span class="n">events</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">ERROR</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">reading</span><span class="p">:</span>
+ <span class="n">events</span> <span class="o">|=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">READ</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">writing</span><span class="p">:</span>
+ <span class="n">events</span> <span class="o">|=</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">WRITE</span>
+ <span class="k">return</span> <span class="n">events</span>
+
+ <span class="k">def</span> <span class="nf">_schedule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">deadline</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_timeout</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">deadline</span><span class="p">,</span> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expired</span><span class="p">(</span><span class="n">sel</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">_expired</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">):</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">expired</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">process</span><span class="p">()</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">quiesced</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sel</span><span class="p">,</span> <span class="n">events</span><span class="p">):</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">READ</span> <span class="o">&</span> <span class="n">events</span><span class="p">:</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">readable</span><span class="p">()</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">WRITE</span> <span class="o">&</span> <span class="n">events</span><span class="p">:</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">writable</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_selectable_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">context</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_handler</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="k">lambda</span> <span class="n">fd</span><span class="p">,</span> <span class="n">events</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_callback</span><span class="p">(</span><span class="n">sel</span><span class="p">,</span> <span class="n">events</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_events</span><span class="p">(</span><span class="n">sel</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_schedule</span><span class="p">(</span><span class="n">sel</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_selectable_updated</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">context</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">update_handler</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_events</span><span class="p">(</span><span class="n">sel</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_schedule</span><span class="p">(</span><span class="n">sel</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_selectable_final</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">sel</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">context</span>
+ <span class="k">if</span> <span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">remove_handler</span><span class="p">(</span><span class="n">sel</span><span class="o">.</span><span class="n">fileno</span><span class="p">())</span>
+ <span class="n">sel</span><span class="o">.</span><span class="n">release</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">-=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_stop</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">reactor</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+
+<span class="k">class</span> <span class="nc">Container</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">handlers</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'loop'</span><span class="p">,</span> <span class="n">tornado</span><span class="o">.</span><span class="n">ioloop</span><span class="o">.</span><span class="n">IOLoop</span><span class="o">.</span><span class="n">instance</span><span class="p">())</span>
+ <span class="n">kwargs</span><span class="p">[</span><span class="s1">'global_handler'</span><span class="p">]</span> <span class="o">=</span> <span class="n">TornadoLoopHandler</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'handler_base'</span><span class="p">,</span> <span class="bp">None</span><span class="p">))</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">BaseContainer</span><span class="p">(</span><span class="o">*</span><span class="n">handlers</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">initialise</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">process</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">initialise</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">_process</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">process</span><span class="p">()</span>
+ <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">quiesced</span><span class="p">:</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">tornado_loop</span><span class="o">.</span><span class="n">add_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_process</span><span class="p">)</span>
+</pre></div>
+
+<p><a href="proton_tornado.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py
new file mode 100755
index 0000000..34d2377
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton.reactor import Container, Copy
+from proton.handlers import MessagingHandler
+
+class Recv(MessagingHandler):
+ def __init__(self):
+ super(Recv, self).__init__()
+
+ def on_start(self, event):
+ conn = event.container.connect("localhost:5672")
+ event.container.create_receiver(conn, "examples", options=Copy())
+
+ def on_message(self, event):
+ print(event.message)
+ if event.receiver.queued == 0 and event.receiver.drained:
+ event.connection.close()
+
+try:
+ Container(Recv()).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html.in
new file mode 100644
index 0000000..55e0cf0
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/queue_browser.py.html.in
@@ -0,0 +1,25 @@
+
+<h1>queue_browser.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">Copy</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">Copy</span><span class="p">())</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">queued</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">drained</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">())</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="queue_browser.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py
new file mode 100755
index 0000000..b59dbe1
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton.reactor import Container, Handler
+
+class Recurring(Handler):
+ def __init__(self, period):
+ self.period = period
+
+ def on_reactor_init(self, event):
+ self.container = event.reactor
+ self.container.schedule(self.period, self)
+
+ def on_timer_task(self, event):
+ print("Tick...")
+ self.container.schedule(self.period, self)
+
+try:
+ container = Container(Recurring(1.0))
+ container.run()
+except KeyboardInterrupt:
+ container.stop()
+ print()
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html.in
new file mode 100644
index 0000000..49affaf
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer.py.html.in
@@ -0,0 +1,26 @@
+
+<h1>recurring_timer.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">Handler</span>
+
+<span class="k">class</span> <span class="nc">Recurring</span><span class="p">(</span><span class="n">Handler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">period</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">period</span> <span class="o">=</span> <span class="n">period</span>
+
+ <span class="k">def</span> <span class="nf">on_reactor_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">reactor</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_timer_task</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Tick..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">Recurring</span><span class="p">(</span><span class="mf">1.0</span><span class="p">))</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+ <span class="k">print</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="recurring_timer.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py
new file mode 100755
index 0000000..07ebd26
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+import time
+from proton.reactor import Handler
+from proton_tornado import TornadoLoop
+
+class Recurring(Handler):
+ def __init__(self, period):
+ self.period = period
+
+ def on_start(self, event):
+ self.container = event.container
+ self.container.schedule(time.time() + self.period, subject=self)
+
+ def on_timer(self, event):
+ print("Tick...")
+ self.container.schedule(time.time() + self.period, subject=self)
+
+try:
+ container = TornadoLoop(Recurring(1.0))
+ container.run()
+except KeyboardInterrupt:
+ container.stop()
+ print()
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html.in
new file mode 100644
index 0000000..9666736
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/recurring_timer_tornado.py.html.in
@@ -0,0 +1,28 @@
+
+<h1>recurring_timer_tornado.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">time</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Handler</span>
+<span class="kn">from</span> <span class="nn">proton_tornado</span> <span class="kn">import</span> <span class="n">TornadoLoop</span>
+
+<span class="k">class</span> <span class="nc">Recurring</span><span class="p">(</span><span class="n">Handler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">period</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">period</span> <span class="o">=</span> <span class="n">period</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_timer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"Tick..."</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">schedule</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">period</span><span class="p">,</span> <span class="n">subject</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">container</span> <span class="o">=</span> <span class="n">TornadoLoop</span><span class="p">(</span><span class="n">Recurring</span><span class="p">(</span><span class="mf">1.0</span><span class="p">))</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span>
+ <span class="n">container</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
+ <span class="k">print</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="recurring_timer_tornado.py">Download this file</a></p>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py b/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py
new file mode 100755
index 0000000..dc062d5
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function
+from proton.reactor import Container, Selector
+from proton.handlers import MessagingHandler
+
+class Recv(MessagingHandler):
+ def __init__(self):
+ super(Recv, self).__init__()
+
+ def on_start(self, event):
+ conn = event.container.connect("localhost:5672")
+ event.container.create_receiver(conn, "examples", options=Selector("colour = 'green'"))
+
+ def on_message(self, event):
+ print(event.message.body)
+
+try:
+ Container(Recv()).run()
+except KeyboardInterrupt: pass
+
+
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html.in
----------------------------------------------------------------------
diff --git a/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html.in b/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html.in
new file mode 100644
index 0000000..70572f4
--- /dev/null
+++ b/input/releases/qpid-proton-0.13.0/proton/python/examples/selected_recv.py.html.in
@@ -0,0 +1,23 @@
+
+<h1>selected_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span><span class="p">,</span> <span class="n">Selector</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">conn</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">"localhost:5672"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="n">conn</span><span class="p">,</span> <span class="s2">"examples"</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">Selector</span><span class="p">(</span><span class="s2">"colour = 'green'"</span><span class="p">))</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">())</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="selected_recv.py">Download this file</a></p>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[13/26] qpid-site git commit: QPID-7350: Examples that should have
gone with the previous commit
Posted by jr...@apache.org.
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html
new file mode 100644
index 0000000..fd2fc03
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_recv.py.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>simple_recv.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>simple_recv.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>simple_recv.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Recv</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">count</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Recv</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">=</span> <span class="n">count</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">=</span> <span class="mi">0</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_receiver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">if</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="ow">and</span> <span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">id</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span><span class="p">:</span>
+ <span class="c1"># ignore duplicate message</span>
+ <span class="k">return</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">message</span><span class="o">.</span><span class="n">body</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">received</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">expected</span><span class="p">:</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">receiver</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address from which messages are received (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to receive; 0 receives indefinitely (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Recv</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="simple_recv.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py
new file mode 100755
index 0000000..7717a16
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+from __future__ import print_function, unicode_literals
+import optparse
+from proton import Message
+from proton.handlers import MessagingHandler
+from proton.reactor import Container
+
+class Send(MessagingHandler):
+ def __init__(self, url, messages):
+ super(Send, self).__init__()
+ self.url = url
+ self.sent = 0
+ self.confirmed = 0
+ self.total = messages
+
+ def on_start(self, event):
+ event.container.create_sender(self.url)
+
+ def on_sendable(self, event):
+ while event.sender.credit and self.sent < self.total:
+ msg = Message(id=(self.sent+1), body={'sequence':(self.sent+1)})
+ event.sender.send(msg)
+ self.sent += 1
+
+ def on_accepted(self, event):
+ self.confirmed += 1
+ if self.confirmed == self.total:
+ print("all messages confirmed")
+ event.connection.close()
+
+ def on_disconnected(self, event):
+ self.sent = self.confirmed
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send messages to the supplied address.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-m", "--messages", type="int", default=100,
+ help="number of messages to send (default %default)")
+opts, args = parser.parse_args()
+
+try:
+ Container(Send(opts.address, opts.messages)).run()
+except KeyboardInterrupt: pass
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html
new file mode 100644
index 0000000..9d5bd1c
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/simple_send.py.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>simple_send.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>simple_send.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>simple_send.py</h1>
+<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span><span class="p">,</span> <span class="n">unicode_literals</span>
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">MessagingHandler</span>
+<span class="kn">from</span> <span class="nn">proton.reactor</span> <span class="kn">import</span> <span class="n">Container</span>
+
+<span class="k">class</span> <span class="nc">Send</span><span class="p">(</span><span class="n">MessagingHandler</span><span class="p">):</span>
+ <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">messages</span><span class="p">):</span>
+ <span class="nb">super</span><span class="p">(</span><span class="n">Send</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">url</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">=</span> <span class="mi">0</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">total</span> <span class="o">=</span> <span class="n">messages</span>
+
+ <span class="k">def</span> <span class="nf">on_start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">container</span><span class="o">.</span><span class="n">create_sender</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">)</span>
+
+ <span class="k">def</span> <span class="nf">on_sendable</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="k">while</span> <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">credit</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">),</span> <span class="n">body</span><span class="o">=</span><span class="p">{</span><span class="s1">'sequence'</span><span class="p">:(</span><span class="bp">self</span><span class="o">.</span><span class="n">sent</span><span class="o">+</span><span class="mi">1</span><span class="p">)})</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">sender</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">+=</span> <span class="mi">1</span>
+
+ <span class="k">def</span> <span class="nf">on_accepted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">+=</span> <span class="mi">1</span>
+ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">total</span><span class="p">:</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"all messages confirmed"</span><span class="p">)</span>
+ <span class="n">event</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+ <span class="k">def</span> <span class="nf">on_disconnected</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
+ <span class="bp">self</span><span class="o">.</span><span class="n">sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">confirmed</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send messages to the supplied address."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-m"</span><span class="p">,</span> <span class="s2">"--messages"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"number of messages to send (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">Container</span><span class="p">(</span><span class="n">Send</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">messages</span><span class="p">))</span><span class="o">.</span><span class="n">run</span><span class="p">()</span>
+<span class="k">except</span> <span class="ne">KeyboardInterrupt</span><span class="p">:</span> <span class="k">pass</span>
+</pre></div>
+
+<p><a href="simple_send.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py
new file mode 100755
index 0000000..95a5650
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# 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.
+#
+
+"""
+Demonstrates the client side of the synchronous request-response pattern
+(also known as RPC or Remote Procecure Call) using proton.
+
+"""
+from __future__ import print_function
+
+import optparse
+from proton import Message, Url, ConnectionException, Timeout
+from proton.utils import SyncRequestResponse, BlockingConnection
+from proton.handlers import IncomingMessageHandler
+import sys
+
+parser = optparse.OptionParser(usage="usage: %prog [options]",
+ description="Send requests to the supplied address and print responses.")
+parser.add_option("-a", "--address", default="localhost:5672/examples",
+ help="address to which messages are sent (default %default)")
+parser.add_option("-t", "--timeout", type="float", default=5,
+ help="Give up after this time out (default %default)")
+opts, args = parser.parse_args()
+
+url = Url(opts.address)
+client = SyncRequestResponse(BlockingConnection(url, timeout=opts.timeout), url.path)
+
+try:
+ REQUESTS= ["Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe."]
+ for request in REQUESTS:
+ response = client.call(Message(body=request))
+ print("%s => %s" % (request, response.body))
+finally:
+ client.connection.close()
+
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html b/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html
new file mode 100644
index 0000000..d8ff71c
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/sync_client.py.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<!--
+ -
+ - 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.
+ -
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title>sync_client.py - Apache Qpid™</title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
+ <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
+ <script type="text/javascript">var _deferredFunctions = [];</script>
+ <script type="text/javascript" src="/deferred.js" defer="defer"></script>
+ <!--[if lte IE 8]>
+ <link rel="stylesheet" href="/ie.css" type="text/css"/>
+ <script type="text/javascript" src="/html5shiv.js"></script>
+ <![endif]-->
+
+ <!-- Redirects for `go get` and godoc.org -->
+ <meta name="go-import"
+ content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
+ <meta name="go-source"
+ content="qpid.apache.org
+https://github.com/apache/qpid-proton/blob/go1/README.md
+https://github.com/apache/qpid-proton/tree/go1{/dir}
+https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
+ </head>
+ <body>
+ <div id="-content">
+ <div id="-top" class="panel">
+ <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
+
+ <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
+
+ <ul id="-global-navigation">
+ <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li>
+ <li><a href="/documentation.html">Documentation</a></li>
+ <li><a href="/download.html">Download</a></li>
+ <li><a href="/discussion.html">Discussion</a></li>
+ </ul>
+ </div>
+
+ <div id="-menu" class="panel" style="display: none;">
+ <div class="flex">
+ <section>
+ <h3>Project</h3>
+
+ <ul>
+ <li><a href="/overview.html">Overview</a></li>
+ <li><a href="/components/index.html">Components</a></li>
+ <li><a href="/releases/index.html">Releases</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Messaging APIs</h3>
+
+ <ul>
+ <li><a href="/proton/index.html">Qpid Proton</a></li>
+ <li><a href="/components/jms/index.html">Qpid JMS</a></li>
+ <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Servers and tools</h3>
+
+ <ul>
+ <li><a href="/components/java-broker/index.html">Java broker</a></li>
+ <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
+ <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
+ </ul>
+ </section>
+
+ <section>
+ <h3>Resources</h3>
+
+ <ul>
+ <li><a href="/dashboard.html">Dashboard</a></li>
+ <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
+ <li><a href="/resources.html">More resources</a></li>
+ </ul>
+ </section>
+ </div>
+ </div>
+
+ <div id="-search" class="panel" style="display: none;">
+ <form action="http://www.google.com/search" method="get">
+ <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
+ <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
+ <button type="submit">Search</button>
+ <a href="/search.html">More ways to search</a>
+ </form>
+ </div>
+
+ <div id="-middle" class="panel">
+ <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-proton-0.13.0/index.html">Qpid Proton 0.13.0</a></li><li><a href="/releases/qpid-proton-0.13.0/proton/python/examples/index.html">Proton Python Examples</a></li><li>sync_client.py</li></ul>
+
+ <div id="-middle-content">
+
+<h1>sync_client.py</h1>
+<div class="highlight"><pre><span></span><span class="sd">"""</span>
+<span class="sd">Demonstrates the client side of the synchronous request-response pattern</span>
+<span class="sd">(also known as RPC or Remote Procecure Call) using proton.</span>
+
+<span class="sd">"""</span>
+<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
+
+<span class="kn">import</span> <span class="nn">optparse</span>
+<span class="kn">from</span> <span class="nn">proton</span> <span class="kn">import</span> <span class="n">Message</span><span class="p">,</span> <span class="n">Url</span><span class="p">,</span> <span class="n">ConnectionException</span><span class="p">,</span> <span class="n">Timeout</span>
+<span class="kn">from</span> <span class="nn">proton.utils</span> <span class="kn">import</span> <span class="n">SyncRequestResponse</span><span class="p">,</span> <span class="n">BlockingConnection</span>
+<span class="kn">from</span> <span class="nn">proton.handlers</span> <span class="kn">import</span> <span class="n">IncomingMessageHandler</span>
+<span class="kn">import</span> <span class="nn">sys</span>
+
+<span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s2">"usage: %prog [options]"</span><span class="p">,</span>
+ <span class="n">description</span><span class="o">=</span><span class="s2">"Send requests to the supplied address and print responses."</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-a"</span><span class="p">,</span> <span class="s2">"--address"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"localhost:5672/examples"</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"address to which messages are sent (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"--timeout"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s2">"float"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span>
+ <span class="n">help</span><span class="o">=</span><span class="s2">"Give up after this time out (default </span><span class="si">%d</span><span class="s2">efault)"</span><span class="p">)</span>
+<span class="n">opts</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+
+<span class="n">url</span> <span class="o">=</span> <span class="n">Url</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
+<span class="n">client</span> <span class="o">=</span> <span class="n">SyncRequestResponse</span><span class="p">(</span><span class="n">BlockingConnection</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">timeout</span><span class="p">),</span> <span class="n">url</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
+
+<span class="k">try</span><span class="p">:</span>
+ <span class="n">REQUESTS</span><span class="o">=</span> <span class="p">[</span><span class="s2">"Twas brillig, and the slithy toves"</span><span class="p">,</span>
+ <span class="s2">"Did gire and gymble in the wabe."</span><span class="p">,</span>
+ <span class="s2">"All mimsy were the borogroves,"</span><span class="p">,</span>
+ <span class="s2">"And the mome raths outgrabe."</span><span class="p">]</span>
+ <span class="k">for</span> <span class="n">request</span> <span class="ow">in</span> <span class="n">REQUESTS</span><span class="p">:</span>
+ <span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">Message</span><span class="p">(</span><span class="n">body</span><span class="o">=</span><span class="n">request</span><span class="p">))</span>
+ <span class="k">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> => </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">body</span><span class="p">))</span>
+<span class="k">finally</span><span class="p">:</span>
+ <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</pre></div>
+
+<p><a href="sync_client.py">Download this file</a></p>
+
+
+ <hr/>
+
+ <ul id="-apache-navigation">
+ <li><a href="http://www.apache.org/">Apache</a></li>
+ <li><a href="http://www.apache.org/licenses/">License</a></li>
+ <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
+ <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
+ <li><a href="/security.html">Security</a></li>
+ <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
+ </ul>
+
+ <p id="-legal">
+ Apache Qpid, Messaging built on AMQP; Copyright © 2015
+ The Apache Software Foundation; Licensed under
+ the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+ License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
+ Proton, Apache, the Apache feather logo, and the Apache Qpid
+ project logo are trademarks of The Apache Software
+ Foundation; All other marks mentioned may be trademarks or
+ registered trademarks of their respective owners
+ </p>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/75ca8b14/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py
----------------------------------------------------------------------
diff --git a/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py b/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py
new file mode 100755
index 0000000..3d97b97
--- /dev/null
+++ b/content/releases/qpid-proton-0.13.0/proton/python/examples/test_examples.py
@@ -0,0 +1,151 @@
+#
+# 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.
+#
+
+import sys
+import subprocess
+import time
+import unittest
+
+if sys.version_info[0] == 2:
+ _unicode_prefix = 'u'
+else:
+ _unicode_prefix = ''
+
+
+class ExamplesTest(unittest.TestCase):
+ def test_helloworld(self, example="helloworld.py"):
+ p = subprocess.Popen([example], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ p.wait()
+ output = [l.strip() for l in p.stdout]
+ self.assertEqual(output, ['Hello World!'])
+
+ def test_helloworld_direct(self):
+ self.test_helloworld('helloworld_direct.py')
+
+ def test_helloworld_blocking(self):
+ self.test_helloworld('helloworld_blocking.py')
+
+ def test_helloworld_tornado(self):
+ self.test_helloworld('helloworld_tornado.py')
+
+ def test_helloworld_direct_tornado(self):
+ self.test_helloworld('helloworld_direct_tornado.py')
+
+ def test_simple_send_recv(self, recv='simple_recv.py', send='simple_send.py'):
+ r = subprocess.Popen([recv], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s = subprocess.Popen([send], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s.wait()
+ r.wait()
+ actual = [l.strip() for l in r.stdout]
+ expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)]
+ self.assertEqual(actual, expected)
+
+ def test_client_server(self, client=['client.py'], server=['server.py'], sleep=0):
+ s = subprocess.Popen(server, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ if sleep:
+ time.sleep(sleep)
+ c = subprocess.Popen(client, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ c.wait()
+ s.terminate()
+ actual = [l.strip() for l in c.stdout]
+ inputs = ["Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe."]
+ expected = ["%s => %s" % (l, l.upper()) for l in inputs]
+ self.assertEqual(actual, expected)
+
+ def test_sync_client_server(self):
+ self.test_client_server(client=['sync_client.py'])
+
+ def test_client_server_tx(self):
+ self.test_client_server(server=['server_tx.py'])
+
+ def test_sync_client_server_tx(self):
+ self.test_client_server(client=['sync_client.py'], server=['server_tx.py'])
+
+ def test_client_server_direct(self):
+ self.test_client_server(client=['client.py', '-a', 'localhost:8888/examples'], server=['server_direct.py'], sleep=0.5)
+
+ def test_sync_client_server_direct(self):
+ self.test_client_server(client=['sync_client.py', '-a', 'localhost:8888/examples'], server=['server_direct.py'], sleep=0.5)
+
+ def test_db_send_recv(self):
+ self.maxDiff = None
+ # setup databases
+ subprocess.check_call(['db_ctrl.py', 'init', './src_db'])
+ subprocess.check_call(['db_ctrl.py', 'init', './dst_db'])
+ fill = subprocess.Popen(['db_ctrl.py', 'insert', './src_db'],
+ stdin=subprocess.PIPE, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ for i in range(100):
+ fill.stdin.write("Message-%i\n" % (i+1))
+ fill.stdin.close()
+ fill.wait()
+ # run send and recv
+ r = subprocess.Popen(['db_recv.py', '-m', '100'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s = subprocess.Popen(['db_send.py', '-m', '100'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s.wait()
+ r.wait()
+ # verify output of receive
+ actual = [l.strip() for l in r.stdout]
+ expected = ["inserted message %i" % (i+1) for i in range(100)]
+ self.assertEqual(actual, expected)
+ # verify state of databases
+ v = subprocess.Popen(['db_ctrl.py', 'list', './dst_db'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ v.wait()
+ expected = ["(%i, %s'Message-%i')" % ((i+1), _unicode_prefix, (i+1)) for i in range(100)]
+ actual = [l.strip() for l in v.stdout]
+ self.assertEqual(actual, expected)
+
+ def test_tx_send_tx_recv(self):
+ self.test_simple_send_recv(recv='tx_recv.py', send='tx_send.py')
+
+ def test_simple_send_direct_recv(self):
+ self.maxDiff = None
+ r = subprocess.Popen(['direct_recv.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ time.sleep(0.5)
+ s = subprocess.Popen(['simple_send.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ s.wait()
+ r.wait()
+ actual = [l.strip() for l in r.stdout]
+ expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)]
+ self.assertEqual(actual, expected)
+
+ def test_direct_send_simple_recv(self):
+ s = subprocess.Popen(['direct_send.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ time.sleep(0.5)
+ r = subprocess.Popen(['simple_recv.py', '-a', 'localhost:8888'], stderr=subprocess.STDOUT, stdout=subprocess.PIPE,
+ universal_newlines=True)
+ r.wait()
+ s.wait()
+ actual = [l.strip() for l in r.stdout]
+ expected = ["{%s'sequence': %i}" % (_unicode_prefix, (i+1)) for i in range(100)]
+ self.assertEqual(actual, expected)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org