You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by bu...@apache.org on 2014/03/20 15:51:20 UTC
svn commit: r902536 [7/9] - in /websites/staging/thrift/trunk/content: ./
tutorial/
Modified: websites/staging/thrift/trunk/content/tutorial/nodejs.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/nodejs.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/nodejs.html Thu Mar 20 14:51:19 2014
@@ -72,9 +72,109 @@
<h3 id="prerequisites">Prerequisites</h3>
<h3 id="client">Client</h3>
-<p>[snippet:path=tutorial/nodejs/NodeClient.js:lang=javascript:lines=20,74]</p>
+<p><div class="codehilite"><pre><span class="kd">var</span> <span class="nx">thrift</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'thrift'</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">ThriftTransports</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'thrift/transport'</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">ThriftProtocols</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'thrift/protocol'</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">Calculator</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./gen-nodejs/Calculator'</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">ttypes</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./gen-nodejs/tutorial_types'</span><span class="p">);</span></p>
+<p><span class="nx">transport</span> <span class="o">=</span> <span class="nx">ThriftTransports</span><span class="p">.</span><span class="nx">TBufferedTransport</span><span class="p">()</span>
+<span class="nx">protocol</span> <span class="o">=</span> <span class="nx">ThriftProtocols</span><span class="p">.</span><span class="nx">TBinaryProtocol</span><span class="p">()</span></p>
+<p><span class="kd">var</span> <span class="nx">connection</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createConnection</span><span class="p">(</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="mi">9090</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">transport</span> <span class="o">:</span> <span class="nx">transport</span><span class="p">,</span>
+ <span class="nx">protocol</span> <span class="o">:</span> <span class="nx">protocol</span>
+<span class="p">});</span></p>
+<p><span class="nx">connection</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'error'</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">assert</span><span class="p">(</span><span class="kc">false</span><span class="p">,</span> <span class="nx">err</span><span class="p">);</span>
+<span class="p">});</span></p>
+<p><span class="c1">// Create a Calculator client with the connection</span>
+<span class="kd">var</span> <span class="nx">client</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createClient</span><span class="p">(</span><span class="nx">Calculator</span><span class="p">,</span> <span class="nx">connection</span><span class="p">);</span></p>
+<p><span class="nx">client</span><span class="p">.</span><span class="nx">ping</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'ping()'</span><span class="p">);</span>
+<span class="p">});</span></p>
+<p><span class="nx">client</span><span class="p">.</span><span class="nx">add</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"1+1="</span> <span class="o">+</span> <span class="nx">response</span><span class="p">);</span>
+<span class="p">});</span></p>
+<p><span class="nx">work</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Work</span><span class="p">();</span>
+<span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">=</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">DIVIDE</span><span class="p">;</span>
+<span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
+<span class="nx">work</span><span class="p">.</span><span class="nx">num2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></p>
+<p><span class="nx">client</span><span class="p">.</span><span class="nx">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">message</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"InvalidOperation "</span> <span class="o">+</span> <span class="nx">err</span><span class="p">);</span>
+ <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Whoa? You know how to divide by zero?'</span><span class="p">);</span>
+ <span class="p">}</span>
+<span class="p">});</span></p>
+<p><span class="nx">work</span><span class="p">.</span><span class="nx">op</span> <span class="o">=</span> <span class="nx">ttypes</span><span class="p">.</span><span class="nx">Operation</span><span class="p">.</span><span class="nx">SUBTRACT</span><span class="p">;</span>
+<span class="nx">work</span><span class="p">.</span><span class="nx">num1</span> <span class="o">=</span> <span class="mi">15</span><span class="p">;</span>
+<span class="nx">work</span><span class="p">.</span><span class="nx">num2</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span></p>
+<p><span class="nx">client</span><span class="p">.</span><span class="nx">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">message</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'15-10='</span> <span class="o">+</span> <span class="nx">message</span><span class="p">);</span></p>
+<p><span class="nx">client</span><span class="p">.</span><span class="nx">getStruct</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">message</span><span class="p">){</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'Check log: '</span> <span class="o">+</span> <span class="nx">message</span>
+</pre></div></p>
<h3 id="server">Server</h3>
-<p>[snippet:path=tutorial/nodejs/NodeServer.js:lang=javascript:lines=20,89]</p>
+<p><div class="codehilite"><pre><span class="kd">var</span> <span class="nx">thrift</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">"thrift"</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">Calculator</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">"./gen-nodejs/Calculator"</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">ttypes</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">"./gen-nodejs/tutorial_types"</span><span class="p">);</span>
+<span class="kd">var</span> <span class="nx">SharedStruct</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s2">"./gen-nodejs/shared_types"</span><span class="p">).</span><span class="nx">SharedStruct</span><span class="p">;</span></p>
+<p><span class="kd">var</span> <span class="nx">data</span> <span class="o">=</span> <span class="p">{};</span></p>
+<p><span class="kd">var</span> <span class="nx">server</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createServer</span><span class="p">(</span><span class="nx">Calculator</span><span class="p">,</span> <span class="p">{</span>
+ <span class="nx">ping</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"ping()"</span><span class="p">);</span>
+ <span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
+ <span class="p">},</span></p>
+<p><span class="nx">add</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">n1</span><span class="p">,</span> <span class="nx">n2</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"add("</span><span class="p">,</span> <span class="nx">n1</span><span class="p">,</span> <span class="s2">","</span><span class="p">,</span> <span class="nx">n2</span><span class="p">,</span> <span class="s2">")"</span><span class="p">);</span>
+ <span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">n1</span> <span class="o">+</span> <span class="nx">n2</span><span class="p">);</span>
+ <span class="p">},</span></p>
+<p><span class="nx">calculate</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">logid</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"calculate("</span><span class="p">,</span> <span class="nx">logid</span><span class="p">,</span> <span class="s2">","</span><span class="p">,</span> <span class="nx">work</span><span class="p">,</span> <span class="s2">")"</span><span class="p">);</span></p>
+<div class="codehilite"><pre><span class="nt"><span</span> <span class="na">class=</span><span class="s">"kd"</span><span class="nt">></span>var<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"mi"</span><span class="nt">></span>0<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>if<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>op<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>==<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span
class="s">"nx"</span><span class="nt">></span>ttypes<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>Operation<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>ADD<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num1<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>+<span class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num2<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>else<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>if<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"nx"</span><span class="nt">></span>op<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>===<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>ttypes<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>Operation<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>SUBTRACT<span class="n
t"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num1<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>-<span class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num2<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>else<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>if<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"nx"</span><span class="nt">></span>op<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>===<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>ttypes<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>Operation<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>MULTIPLY<span class="n
t"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num1<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>*<span class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num2<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>else<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>if<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span
class="s">"nx"</span><span class="nt">></span>op<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>===<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>ttypes<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>Operation<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>DIVIDE<span class="nt"
></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>if<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num2<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>===<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span>
<span class="s">"mi"</span><span class="nt">></span>0<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"kd"</span><span class="nt">></span>var<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>new<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>ttypes<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <s
pan class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>InvalidOperation<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>();<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>what<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx&
quot;</span><span class="nt">></span>op<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>why<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"s1"</span><span class="nt">></span><span class="ni">&#39;</span>Cannot divide by 0<span class="ni">&#39;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></
span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>result<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>);<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>return<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num1<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>/<span class="nt"></span></span> <span class="nt"><span</span> <span
class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>num2<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>else<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"kd"</span><span class="nt">></span>var<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>new<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>ttypes<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <spa
n class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>InvalidOperation<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>();<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>what<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>work<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx&qu
ot;</span><span class="nt">></span>op<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>why<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"s1"</span><span class="nt">></span><span class="ni">&#39;</span>Invalid operation<span class="ni">&#39;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></spa
n></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>result<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>);<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>return<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span>
+
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"kd"</span><span class="nt">></span>var<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>entry<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>new<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>SharedStruct<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>();<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>entry<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>key<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>logid<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>entry<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>value<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"s2"</span><span class="nt">></span><span class="ni">&quot;&quot;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>+<span class="nt"></span><span</span> <span class="n
a">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>data<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>[<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>logid<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>]<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>entry<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p&
quot;</span><span class="nt">></span>;<span class="nt"></span></span>
+
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>result<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"kc"</span><span class="nt">></span>null<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>,<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>val<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>);<span class="nt"></span></span>
+</pre></div>
+
+
+<p><span class="p">},</span></p>
+<p><span class="nx">getStruct</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"getStruct("</span><span class="p">,</span> <span class="nx">key</span><span class="p">,</span> <span class="s2">")"</span><span class="p">);</span>
+ <span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="nx">data</span><span class="p">[</span><span class="nx">key</span><span class="p">]);</span>
+ <span class="p">},</span></p>
+<p><span class="nx">zip</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
+ <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"zip()"</span><span class="p">);</span>
+ <span class="nx">result</span><span class="p">(</span><span class="kc">null</span><span class="p">);</span>
+ <span class="p">}</span></p>
+<p><span class="p">});</span></p>
+<p><span class="nx">server</span>
+</pre></div></p>
<h2 id="additional-information">Additional Information</h2>
</div>
Modified: websites/staging/thrift/trunk/content/tutorial/ocaml.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/ocaml.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/ocaml.html Thu Mar 20 14:51:19 2014
@@ -72,9 +72,116 @@
<h3 id="prerequisites">Prerequisites</h3>
<h3 id="client">Client</h3>
-<p>[snippet:path=tutorial/ocaml/CalcClient.ml:lang=cpp:lines=20,74]</p>
+<p><div class="codehilite"><pre><span class="n">open</span> <span class="n">Arg</span>
+<span class="n">open</span> <span class="n">Thrift</span>
+<span class="n">open</span> <span class="n">Tutorial_types</span>
+<span class="n">open</span> <span class="n">Shared_types</span></p>
+<p><span class="n">exception</span> <span class="n">Die</span><span class="p">;;</span>
+<span class="n">let</span> <span class="n">sod</span> <span class="o">=</span> <span class="n">function</span>
+ <span class="n">Some</span> <span class="n">v</span> <span class="o">-></span> <span class="n">v</span>
+ <span class="o">|</span> <span class="n">None</span> <span class="o">-></span> <span class="n">raise</span> <span class="n">Die</span><span class="p">;;</span></p>
+<p><span class="n">type</span> <span class="n">connection</span> <span class="o">=</span> <span class="p">{</span>
+ <span class="n">trans</span> <span class="o">:</span> <span class="n">Transport</span><span class="p">.</span><span class="n">t</span> <span class="p">;</span>
+ <span class="n">proto</span> <span class="o">:</span> <span class="n">Thrift</span><span class="p">.</span><span class="n">Protocol</span><span class="p">.</span><span class="n">t</span><span class="p">;</span>
+ <span class="n">calc</span> <span class="o">:</span> <span class="n">Calculator</span><span class="p">.</span><span class="n">client</span> <span class="p">;</span>
+<span class="p">}</span></p>
+<p><span class="n">let</span> <span class="n">connect</span> <span class="o">~</span><span class="n">host</span> <span class="n">port</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">tx</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TSocket</span><span class="p">.</span><span class="n">t</span> <span class="n">host</span> <span class="n">port</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">proto</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TBinaryProtocol</span><span class="p">.</span><span class="n">t</span> <span class="n">tx</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">calc</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Calculator</span><span class="p">.</span><span class="n">client</span> <span class="n">proto</span> <span class="n">proto</span> <span class="n">in</span>
+ <span class="n">tx</span><span class="err">#</span><span class="n">opn</span><span class="p">;</span>
+ <span class="p">{</span> <span class="n">trans</span> <span class="o">=</span> <span class="n">tx</span> <span class="p">;</span> <span class="n">proto</span> <span class="o">=</span> <span class="n">proto</span><span class="p">;</span> <span class="n">calc</span> <span class="o">=</span> <span class="n">calc</span> <span class="p">}</span>
+<span class="p">;;</span></p>
+<p><span class="n">let</span> <span class="n">doclient</span> <span class="p">()</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">cli</span> <span class="o">=</span> <span class="n">connect</span> <span class="o">~</span><span class="nl">host:</span><span class="s">"127.0.0.1"</span> <span class="mi">9090</span> <span class="n">in</span>
+ <span class="k">try</span>
+ <span class="n">cli</span><span class="p">.</span><span class="n">calc</span><span class="err">#</span><span class="n">ping</span> <span class="p">;</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"ping()</span><span class="se">\n</span><span class="s">"</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span class="n">sum</span> <span class="o">=</span> <span class="n">cli</span><span class="p">.</span><span class="n">calc</span><span class="err">#</span><span class="n">add</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span class="p">)</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span class="p">)</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"1+1=%ld</span><span class="se">\n</span><span class="s">"</span> <span class="n">sum</span> <span class="p">;</span>
+ <span class="n">flush</span> <span class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span class="n">w</span> <span class="o">=</span> <span class="k">new</span> <span class="n">work</span> <span class="n">in</span>
+ <span class="n">w</span><span class="err">#</span><span class="n">set_op</span> <span class="n">Operation</span><span class="p">.</span><span class="n">DIVIDE</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span class="n">set_num1</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span class="n">set_num2</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">0</span><span class="p">)</span> <span class="p">;</span>
+ <span class="k">try</span>
+ <span class="n">let</span> <span class="n">quotient</span> <span class="o">=</span> <span class="n">cli</span><span class="p">.</span><span class="n">calc</span><span class="err">#</span><span class="n">calculate</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span class="p">)</span> <span class="n">w</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"Whoa? We can divide by zero!</span><span class="se">\n</span><span class="s">"</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span>
+ <span class="n">with</span> <span class="n">InvalidOperation</span> <span class="n">io</span> <span class="o">-></span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"InvalidOperation: %s</span><span class="se">\n</span><span class="s">"</span> <span class="n">io</span><span class="err">#</span><span class="n">grab_why</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span class="n">w</span> <span class="o">=</span> <span class="k">new</span> <span class="n">work</span> <span class="n">in</span>
+ <span class="n">w</span><span class="err">#</span><span class="n">set_op</span> <span class="n">Operation</span><span class="p">.</span><span class="n">SUBTRACT</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span class="n">set_num1</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">15</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">w</span><span class="err">#</span><span class="n">set_num2</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">10</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">let</span> <span class="n">diff</span> <span class="o">=</span> <span class="n">cli</span><span class="p">.</span><span class="n">calc</span><span class="err">#</span><span class="n">calculate</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span class="p">)</span> <span class="n">w</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"15-10=%ld</span><span class="se">\n</span><span class="s">"</span> <span class="n">diff</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="p">(</span><span class="n">let</span> <span class="n">ss</span> <span class="o">=</span> <span class="n">cli</span><span class="p">.</span><span class="n">calc</span><span class="err">#</span><span class="n">getStruct</span> <span class="p">(</span><span class="n">Int32</span><span class="p">.</span><span class="n">of_int</span> <span class="mi">1</span><span class="p">)</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"Check log: %s</span><span class="se">\n</span><span class="s">"</span> <span class="n">ss</span><span class="err">#</span><span class="n">grab_value</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">cli</span><span class="p">.</span><span class="n">trans</span><span class="err">#</span><span class="n">close</span>
+ <span class="n">with</span> <span class="n">Transport</span><span class="p">.</span><span class="n">E</span> <span class="p">(</span><span class="n">_</span><span class="p">,</span><span class="n">what</span><span class="p">)</span> <span class="o">-></span>
+ <span class="n">Printf</span>
+</pre></div></p>
<h3 id="server">Server</h3>
-<p>[snippet:path=tutorial/ocaml/CalcServer.ml:lang=cpp:lines=20,89]</p>
+<p><div class="codehilite"><pre><span class="n">open</span> <span class="n">Arg</span>
+<span class="n">open</span> <span class="n">Thrift</span>
+<span class="n">open</span> <span class="n">Tutorial_types</span>
+<span class="n">open</span> <span class="n">Shared_types</span></p>
+<p><span class="n">exception</span> <span class="n">Die</span><span class="p">;;</span>
+<span class="n">let</span> <span class="n">sod</span> <span class="o">=</span> <span class="n">function</span>
+ <span class="n">Some</span> <span class="n">v</span> <span class="o">-></span> <span class="n">v</span>
+ <span class="o">|</span> <span class="n">None</span> <span class="o">-></span> <span class="n">raise</span> <span class="n">Die</span><span class="p">;;</span></p>
+<p><span class="k">class</span> <span class="nc">calc_handler</span> <span class="o">=</span>
+<span class="n">object</span> <span class="p">(</span><span class="n">self</span><span class="p">)</span>
+ <span class="n">inherit</span> <span class="n">Calculator</span><span class="p">.</span><span class="n">iface</span>
+ <span class="n">val</span> <span class="n">log</span> <span class="o">=</span> <span class="n">Hashtbl</span><span class="p">.</span><span class="n">create</span> <span class="mi">23</span>
+ <span class="n">method</span> <span class="n">ping</span> <span class="o">=</span> <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"ping()</span><span class="se">\n</span><span class="s">"</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span>
+ <span class="n">method</span> <span class="n">add</span> <span class="n">a</span> <span class="n">b</span> <span class="o">=</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span><span class="s">"add(%ld,%ld)</span><span class="se">\n</span><span class="s">"</span> <span class="p">(</span><span class="n">sod</span> <span class="n">a</span><span class="p">)</span> <span class="p">(</span><span class="n">sod</span> <span class="n">b</span><span class="p">);</span> <span class="n">flush</span> <span class="n">stdout</span> <span class="p">;</span>
+ <span class="n">Int32</span><span class="p">.</span><span class="n">add</span> <span class="p">(</span><span class="n">sod</span> <span class="n">a</span><span class="p">)</span> <span class="p">(</span><span class="n">sod</span> <span class="n">b</span><span class="p">)</span>
+ <span class="n">method</span> <span class="n">calculate</span> <span class="n">logid</span> <span class="n">w</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">w</span> <span class="o">=</span> <span class="n">sod</span> <span class="n">w</span> <span class="n">in</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"calculate(%ld,{%ld,%ld,%ld})</span><span class="se">\n</span><span class="s">"</span> <span class="p">(</span><span class="n">sod</span> <span class="n">logid</span><span class="p">)</span> <span class="p">(</span><span class="n">Operation</span><span class="p">.</span><span class="n">to_i</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_op</span><span class="p">)</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num1</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num2</span><span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span> <span class="p">;</span>
+ <span class="n">let</span> <span class="n">rv</span> <span class="o">=</span>
+ <span class="n">match</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_op</span> <span class="n">with</span>
+ <span class="n">Operation</span><span class="p">.</span><span class="n">ADD</span> <span class="o">-></span>
+ <span class="n">Int32</span><span class="p">.</span><span class="n">add</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num1</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num2</span>
+ <span class="o">|</span> <span class="n">Operation</span><span class="p">.</span><span class="n">SUBTRACT</span> <span class="o">-></span>
+ <span class="n">Int32</span><span class="p">.</span><span class="n">sub</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num1</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num2</span>
+ <span class="o">|</span> <span class="n">Operation</span><span class="p">.</span><span class="n">MULTIPLY</span> <span class="o">-></span>
+ <span class="n">Int32</span><span class="p">.</span><span class="n">mul</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num1</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num2</span>
+ <span class="o">|</span> <span class="n">Operation</span><span class="p">.</span><span class="n">DIVIDE</span> <span class="o">-></span>
+ <span class="k">if</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num2</span> <span class="o">=</span> <span class="n">Int32</span><span class="p">.</span><span class="n">zero</span> <span class="n">then</span>
+ <span class="n">let</span> <span class="n">io</span> <span class="o">=</span> <span class="k">new</span> <span class="n">invalidOperation</span> <span class="n">in</span>
+ <span class="n">io</span><span class="err">#</span><span class="n">set_what</span> <span class="p">(</span><span class="n">Operation</span><span class="p">.</span><span class="n">to_i</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_op</span><span class="p">)</span> <span class="p">;</span>
+ <span class="n">io</span><span class="err">#</span><span class="n">set_why</span> <span class="s">"Cannot divide by 0"</span> <span class="p">;</span>
+ <span class="n">raise</span> <span class="p">(</span><span class="n">InvalidOperation</span> <span class="n">io</span><span class="p">)</span>
+ <span class="k">else</span>
+ <span class="n">Int32</span><span class="p">.</span><span class="n">div</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num1</span> <span class="n">w</span><span class="err">#</span><span class="n">grab_num2</span> <span class="n">in</span></p>
+<div class="codehilite"><pre><span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>let<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>ss<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>new<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>sharedStruct<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></
span>in<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>ss<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"err"</span><span class="nt">></span>#<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>set_key<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>sod<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>logid<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"
;p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+<span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>let<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>buffer<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>Int32<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>to_string<span class="nt"></span></span> <span class="nt"><span</span>
<span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>rv<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>in<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>ss<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"err"</span><span class="nt">></span>#<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>set_value<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>buffer<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>Hashtbl<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>.<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>add<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>log<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>sod<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span
><span class="s">"n"</span><span class="nt">></span>logid<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>ss<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+ <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>rv<span class="nt"></span></span>
+</pre></div>
+
+
+<p><span class="n">method</span> <span class="n">zip</span> <span class="o">=</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"zip()</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span></p>
+<p><span class="n">method</span> <span class="n">getStruct</span> <span class="n">logid</span> <span class="o">=</span>
+ <span class="n">Printf</span><span class="p">.</span><span class="n">printf</span> <span class="s">"getStruct(%ld)</span><span class="se">\n</span><span class="s">"</span> <span class="p">(</span><span class="n">sod</span> <span class="n">logid</span><span class="p">)</span> <span class="p">;</span> <span class="n">flush</span> <span class="n">stdout</span> <span class="p">;</span>
+ <span class="n">Hashtbl</span><span class="p">.</span><span class="n">find</span> <span class="n">log</span> <span class="p">(</span><span class="n">sod</span> <span class="n">logid</span><span class="p">)</span></p>
+<p><span class="n">end</span></p>
+<p><span class="n">let</span> <span class="n">doserver</span> <span class="p">()</span> <span class="o">=</span>
+ <span class="n">let</span> <span class="n">h</span> <span class="o">=</span> <span class="k">new</span> <span class="n">calc_handler</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">proc</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Calculator</span><span class="p">.</span><span class="n">processor</span> <span class="n">h</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">port</span> <span class="o">=</span> <span class="mi">9090</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">pf</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TBinaryProtocol</span><span class="p">.</span><span class="n">factory</span> <span class="n">in</span>
+ <span class="n">let</span> <span class="n">server</span> <span class="o">=</span> <span class="k">new</span> <span class="n">TThreadedServer</span><span class="p">.</span><span class="n">t</span>
+ <span class="n">proc</span>
+ <span class="p">(</span><span class="k">new</span> <span class="n">TServerSocket</span><span class="p">.</span><span class="n">t</span> <span class="n">port</span><span class="p">)</span>
+ <span class="p">(</span><span class="k">new</span> <span class="n">Transport</span>
+</pre></div></p>
<h2 id="additional-information">Additional Information</h2>
</div>