Author: buildbot
Date: Sat Mar 22 23:32:50 2014
New Revision: 903012
Log:
Staging update by buildbot for thrift
Modified:
websites/staging/thrift/trunk/content/ (props changed)
websites/staging/thrift/trunk/content/tutorial/cpp.html
Propchange: websites/staging/thrift/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Sat Mar 22 23:32:50 2014
@@ -1 +1 @@
-1580365
+1580368
Modified: websites/staging/thrift/trunk/content/tutorial/cpp.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/cpp.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/cpp.html Sat Mar 22 23:32:50
2014
@@ -152,7 +152,141 @@
</pre></div>
<h3 id="server">Server</h3>
-<p>[XXXsnippet:path=tutorial/cpp/CppServer.cpp:lang=cpp:lines=20,152]</p>
+<div class="codehilite"><pre><span class="cp">#include
<thrift/concurrency/ThreadManager.h></span>
+<span class="cp">#include
<thrift/concurrency/PosixThreadFactory.h></span>
+<span class="cp">#include <thrift/protocol/TBinaryProtocol.h></span>
+<span class="cp">#include <thrift/server/TSimpleServer.h></span>
+<span class="cp">#include <thrift/server/TThreadPoolServer.h></span>
+<span class="cp">#include <thrift/server/TThreadedServer.h></span>
+<span class="cp">#include <thrift/transport/TServerSocket.h></span>
+<span class="cp">#include <thrift/transport/TTransportUtils.h></span>
+
+<span class="cp">#include <iostream></span>
+<span class="cp">#include <stdexcept></span>
+<span class="cp">#include <sstream></span>
+
+<span class="cp">#include "../gen-cpp/Calculator.h"</span>
+
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">std</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">apache</span><span class="o">::</span><span
class="n">thrift</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">apache</span><span class="o">::</span><span
class="n">thrift</span><span class="o">::</span><span
class="n">protocol</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">apache</span><span class="o">::</span><span
class="n">thrift</span><span class="o">::</span><span
class="n">transport</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">apache</span><span class="o">::</span><span
class="n">thrift</span><span class="o">::</span><span
class="n">server</span><span class="p">;</span>
+
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">tutorial</span><span class="p">;</span>
+<span class="k">using</span> <span class="k">namespace</span> <span
class="n">shared</span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">CalculatorHandler</span> <span
class="o">:</span> <span class="k">public</span> <span
class="n">CalculatorIf</span> <span class="p">{</span>
+ <span class="k">public</span><span class="o">:</span>
+ <span class="n">CalculatorHandler</span><span class="p">()</span> <span
class="p">{}</span>
+
+ <span class="kt">void</span> <span class="n">ping</span><span
class="p">()</span> <span class="p">{</span>
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"ping()</span><span class="se">\n</span><span
class="s">"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+ <span class="n">int32_t</span> <span class="n">add</span><span
class="p">(</span><span class="k">const</span> <span class="n">int32_t</span>
<span class="n">n1</span><span class="p">,</span> <span class="k">const</span>
<span class="n">int32_t</span> <span class="n">n2</span><span
class="p">)</span> <span class="p">{</span>
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"add(%d,%d)</span><span class="se">\n</span><span
class="s">"</span><span class="p">,</span> <span class="n">n1</span><span
class="p">,</span> <span class="n">n2</span><span class="p">);</span>
+ <span class="k">return</span> <span class="n">n1</span> <span
class="o">+</span> <span class="n">n2</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">int32_t</span> <span class="n">calculate</span><span
class="p">(</span><span class="k">const</span> <span class="n">int32_t</span>
<span class="n">logid</span><span class="p">,</span> <span
class="k">const</span> <span class="n">Work</span> <span
class="o">&</span><span class="n">work</span><span class="p">)</span> <span
class="p">{</span>
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"calculate(%d,{%d,%d,%d})</span><span class="se">\n</span><span
class="s">"</span><span class="p">,</span> <span
class="n">logid</span><span class="p">,</span> <span class="n">work</span><span
class="p">.</span><span class="n">op</span><span class="p">,</span> <span
class="n">work</span><span class="p">.</span><span class="n">num1</span><span
class="p">,</span> <span class="n">work</span><span class="p">.</span><span
class="n">num2</span><span class="p">);</span>
+ <span class="n">int32_t</span> <span class="n">val</span><span
class="p">;</span>
+
+ <span class="k">switch</span> <span class="p">(</span><span
class="n">work</span><span class="p">.</span><span class="n">op</span><span
class="p">)</span> <span class="p">{</span>
+ <span class="k">case</span> <span class="n">Operation</span><span
class="o">::</span><span class="nl">ADD:</span>
+ <span class="n">val</span> <span class="o">=</span> <span
class="n">work</span><span class="p">.</span><span class="n">num1</span> <span
class="o">+</span> <span class="n">work</span><span class="p">.</span><span
class="n">num2</span><span class="p">;</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="n">Operation</span><span
class="o">::</span><span class="nl">SUBTRACT:</span>
+ <span class="n">val</span> <span class="o">=</span> <span
class="n">work</span><span class="p">.</span><span class="n">num1</span> <span
class="o">-</span> <span class="n">work</span><span class="p">.</span><span
class="n">num2</span><span class="p">;</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="n">Operation</span><span
class="o">::</span><span class="nl">MULTIPLY:</span>
+ <span class="n">val</span> <span class="o">=</span> <span
class="n">work</span><span class="p">.</span><span class="n">num1</span> <span
class="o">*</span> <span class="n">work</span><span class="p">.</span><span
class="n">num2</span><span class="p">;</span>
+ <span class="k">break</span><span class="p">;</span>
+ <span class="k">case</span> <span class="n">Operation</span><span
class="o">::</span><span class="nl">DIVIDE:</span>
+ <span class="k">if</span> <span class="p">(</span><span
class="n">work</span><span class="p">.</span><span class="n">num2</span> <span
class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span
class="p">{</span>
+ <span class="n">InvalidOperation</span> <span class="n">io</span><span
class="p">;</span>
+ <span class="n">io</span><span class="p">.</span><span
class="n">what</span> <span class="o">=</span> <span class="n">work</span><span
class="p">.</span><span class="n">op</span><span class="p">;</span>
+ <span class="n">io</span><span class="p">.</span><span
class="n">why</span> <span class="o">=</span> <span class="s">"Cannot
divide by 0"</span><span class="p">;</span>
+ <span class="k">throw</span> <span class="n">io</span><span
class="p">;</span>
+ <span class="p">}</span>
+ <span class="n">val</span> <span class="o">=</span> <span
class="n">work</span><span class="p">.</span><span class="n">num1</span> <span
class="o">/</span> <span class="n">work</span><span class="p">.</span><span
class="n">num2</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="n">InvalidOperation</span> <span class="n">io</span><span
class="p">;</span>
+ <span class="n">io</span><span class="p">.</span><span
class="n">what</span> <span class="o">=</span> <span class="n">work</span><span
class="p">.</span><span class="n">op</span><span class="p">;</span>
+ <span class="n">io</span><span class="p">.</span><span
class="n">why</span> <span class="o">=</span> <span class="s">"Invalid
Operation"</span><span class="p">;</span>
+ <span class="k">throw</span> <span class="n">io</span><span
class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="n">SharedStruct</span> <span class="n">ss</span><span
class="p">;</span>
+ <span class="n">ss</span><span class="p">.</span><span
class="n">key</span> <span class="o">=</span> <span class="n">logid</span><span
class="p">;</span>
+ <span class="kt">char</span> <span class="n">buffer</span><span
class="p">[</span><span class="mi">12</span><span class="p">];</span>
+ <span class="n">snprintf</span><span class="p">(</span><span
class="n">buffer</span><span class="p">,</span> <span
class="k">sizeof</span><span class="p">(</span><span
class="n">buffer</span><span class="p">),</span> <span
class="s">"%d"</span><span class="p">,</span> <span
class="n">val</span><span class="p">);</span>
+ <span class="n">ss</span><span class="p">.</span><span
class="n">value</span> <span class="o">=</span> <span
class="n">buffer</span><span class="p">;</span>
+
+ <span class="n">log</span><span class="p">[</span><span
class="n">logid</span><span class="p">]</span> <span class="o">=</span> <span
class="n">ss</span><span class="p">;</span>
+
+ <span class="k">return</span> <span class="n">val</span><span
class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">getStruct</span><span
class="p">(</span><span class="n">SharedStruct</span> <span
class="o">&</span><span class="n">ret</span><span class="p">,</span> <span
class="k">const</span> <span class="n">int32_t</span> <span
class="n">logid</span><span class="p">)</span> <span class="p">{</span>
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"getStruct(%d)</span><span class="se">\n</span><span
class="s">"</span><span class="p">,</span> <span
class="n">logid</span><span class="p">);</span>
+ <span class="n">ret</span> <span class="o">=</span> <span
class="n">log</span><span class="p">[</span><span class="n">logid</span><span
class="p">];</span>
+ <span class="p">}</span>
+
+ <span class="kt">void</span> <span class="n">zip</span><span
class="p">()</span> <span class="p">{</span>
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"zip()</span><span class="se">\n</span><span
class="s">"</span><span class="p">);</span>
+ <span class="p">}</span>
+
+<span class="k">protected</span><span class="o">:</span>
+ <span class="n">map</span><span class="o"><</span><span
class="n">int32_t</span><span class="p">,</span> <span
class="n">SharedStruct</span><span class="o">></span> <span
class="n">log</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="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">boost</span><span class="o">::</span><span
class="n">shared_ptr</span><span class="o"><</span><span
class="n">TProtocolFactory</span><span class="o">></span> <span
class="n">protocolFactory</span><span class="p">(</span><span
class="k">new</span> <span class="n">TBinaryProtocolFactory</span><span
class="p">());</span>
+ <span class="n">boost</span><span class="o">::</span><span
class="n">shared_ptr</span><span class="o"><</span><span
class="n">CalculatorHandler</span><span class="o">></span> <span
class="n">handler</span><span class="p">(</span><span class="k">new</span>
<span class="n">CalculatorHandler</span><span class="p">());</span>
+ <span class="n">boost</span><span class="o">::</span><span
class="n">shared_ptr</span><span class="o"><</span><span
class="n">TProcessor</span><span class="o">></span> <span
class="n">processor</span><span class="p">(</span><span class="k">new</span>
<span class="n">CalculatorProcessor</span><span class="p">(</span><span
class="n">handler</span><span class="p">));</span>
+ <span class="n">boost</span><span class="o">::</span><span
class="n">shared_ptr</span><span class="o"><</span><span
class="n">TServerTransport</span><span class="o">></span> <span
class="n">serverTransport</span><span class="p">(</span><span
class="k">new</span> <span class="n">TServerSocket</span><span
class="p">(</span><span class="mi">9090</span><span class="p">));</span>
+ <span class="n">boost</span><span class="o">::</span><span
class="n">shared_ptr</span><span class="o"><</span><span
class="n">TTransportFactory</span><span class="o">></span> <span
class="n">transportFactory</span><span class="p">(</span><span
class="k">new</span> <span class="n">TBufferedTransportFactory</span><span
class="p">());</span>
+
+ <span class="n">TSimpleServer</span> <span class="n">server</span><span
class="p">(</span><span class="n">processor</span><span class="p">,</span>
+ <span class="n">serverTransport</span><span
class="p">,</span>
+ <span class="n">transportFactory</span><span
class="p">,</span>
+ <span class="n">protocolFactory</span><span
class="p">);</span>
+
+
+ <span class="cm">/**</span>
+<span class="cm"> * Or you could do one of these</span>
+
+<span class="cm"> boost::shared_ptr<ThreadManager> threadManager
=</span>
+<span class="cm"> ThreadManager::newSimpleThreadManager(workerCount);</span>
+<span class="cm"> boost::shared_ptr<PosixThreadFactory> threadFactory
=</span>
+<span class="cm"> boost::shared_ptr<PosixThreadFactory>(new
PosixThreadFactory());</span>
+<span class="cm"> threadManager->threadFactory(threadFactory);</span>
+<span class="cm"> threadManager->start();</span>
+<span class="cm"> TThreadPoolServer server(processor,</span>
+<span class="cm"> serverTransport,</span>
+<span class="cm"> transportFactory,</span>
+<span class="cm"> protocolFactory,</span>
+<span class="cm"> threadManager);</span>
+
+<span class="cm"> TThreadedServer server(processor,</span>
+<span class="cm"> serverTransport,</span>
+<span class="cm"> transportFactory,</span>
+<span class="cm"> protocolFactory);</span>
+
+<span class="cm"> */</span>
+
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"Starting the server...</span><span class="se">\n</span><span
class="s">"</span><span class="p">);</span>
+ <span class="n">server</span><span class="p">.</span><span
class="n">serve</span><span class="p">();</span>
+ <span class="n">printf</span><span class="p">(</span><span
class="s">"done.</span><span class="se">\n</span><span
class="s">"</span><span class="p">);</span>
+ <span class="k">return</span> <span class="mi">0</span><span
class="p">;</span>
+<span class="p">}</span>
+</pre></div>
+
<h2 id="additional-information">Additional Information</h2>
<h3 id="example-threadpool-server">Example ThreadPool Server</h3>
<div class="codehilite"><pre> <span class="n">boost</span><span
class="o">::</span><span class="n">shared_ptr</span><span
class="o"><</span><span class="n">ThreadManager</span><span
class="o">></span> <span class="n">threadManager</span> <span
class="o">=</span>