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/09/18 22:13:34 UTC

svn commit: r922737 - in /websites/staging/thrift/trunk/content: ./ tutorial/delphi.html

Author: buildbot
Date: Thu Sep 18 20:13:34 2014
New Revision: 922737

Log:
Staging update by buildbot for thrift

Modified:
    websites/staging/thrift/trunk/content/   (props changed)
    websites/staging/thrift/trunk/content/tutorial/delphi.html

Propchange: websites/staging/thrift/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Thu Sep 18 20:13:34 2014
@@ -1 +1 @@
-1626064
+1626069

Modified: websites/staging/thrift/trunk/content/tutorial/delphi.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/delphi.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/delphi.html Thu Sep 18 20:13:34 2014
@@ -95,102 +95,102 @@
 <li>Thrift requires at least Delphi 2010. Earlier versions and FPC will not work due to the lack of Generics.</li>
 </ul>
 <h3 id="client">Client</h3>
-<div class="codehilite"><pre><span class="n">program</span> <span class="n">DelphiClient</span><span class="o">;</span>
+<div class="codehilite"><pre><span class="k">program</span> <span class="n">DelphiClient</span><span class="o">;</span>
 
-<span class="o">{</span><span class="n">$APPTYPE</span> <span class="n">CONSOLE</span><span class="o">}</span>
-<span class="o">{</span><span class="n">$D</span> <span class="err">&#39;</span><span class="n">Copyright</span> <span class="o">(</span><span class="n">c</span><span class="o">)</span> <span class="mi">2012</span> <span class="n">The</span> <span class="n">Apache</span> <span class="n">Software</span> <span class="n">Foundation</span><span class="err">&#39;</span><span class="o">}</span>
+<span class="cm">{$APPTYPE CONSOLE}</span>
+<span class="cm">{$D &#39;Copyright (c) 2012 The Apache Software Foundation&#39;}</span>
 
-<span class="n">uses</span>
+<span class="k">uses</span>
   <span class="n">SysUtils</span><span class="o">,</span>
-  <span class="n">Generics</span><span class="o">.</span><span class="na">Collections</span><span class="o">,</span>
-  <span class="n">Thrift</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Collections</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Collections</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Console</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Console</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Utils</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Utils</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Stream</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Stream</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Protocol</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Protocol</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Server</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Server</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Thrift</span><span class="o">.</span><span class="na">Transport</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="o">.</span><span class="na">Transport</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Shared</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">gen</span><span class="o">-</span><span class="n">delphi</span><span class="err">\</span><span class="n">Shared</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">,</span>
-  <span class="n">Tutorial</span> <span class="n">in</span> <span class="err">&#39;</span><span class="o">..</span><span class="err">\</span><span class="o">..</span><span class="err">\</span><span class="n">gen</span><span class="o">-</span><span class="n">delphi</span><span class="err">\</span><span class="n">Tutorial</span><span class="o">.</span><span class="na">pas</span><span class="err">&#39;</span><span class="o">;</span>
-
-
-<span class="n">type</span>
-  <span class="n">DelphiTutorialClient</span> <span class="o">=</span> <span class="kd">class</span>
-  <span class="nc">public</span>
-    <span class="kd">class</span> <span class="nc">procedure</span> <span class="n">Main</span><span class="o">;</span>
-  <span class="n">end</span><span class="o">;</span>
+  <span class="n">Generics</span><span class="o">.</span><span class="n">Collections</span><span class="o">,</span>
+  <span class="n">Thrift</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Collections</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Collections.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Console</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Console.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Utils</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Utils.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Stream</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Stream.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Protocol</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Protocol.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Server</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Server.pas&#39;</span><span class="o">,</span>
+  <span class="n">Thrift</span><span class="o">.</span><span class="n">Transport</span> <span class="k">in</span> <span class="s">&#39;..\..\..\lib\delphi\src\Thrift.Transport.pas&#39;</span><span class="o">,</span>
+  <span class="n">Shared</span> <span class="k">in</span> <span class="s">&#39;..\..\gen-delphi\Shared.pas&#39;</span><span class="o">,</span>
+  <span class="n">Tutorial</span> <span class="k">in</span> <span class="s">&#39;..\..\gen-delphi\Tutorial.pas&#39;</span><span class="o">;</span>
+
+
+<span class="k">type</span>
+  <span class="n">DelphiTutorialClient</span> <span class="o">=</span> <span class="k">class</span>
+  <span class="kp">public</span>
+    <span class="k">class</span> <span class="k">procedure</span> <span class="nf">Main</span><span class="o">;</span>
+  <span class="k">end</span><span class="o">;</span>
 
 
 <span class="c1">//--- DelphiTutorialClient ---------------------------------------</span>
 
 
-<span class="kd">class</span> <span class="nc">procedure</span> <span class="n">DelphiTutorialClient</span><span class="o">.</span><span class="na">Main</span><span class="o">;</span>
-<span class="n">var</span> <span class="n">transport</span> <span class="o">:</span> <span class="n">ITransport</span><span class="o">;</span>
+<span class="k">class</span> <span class="k">procedure</span> <span class="nc">DelphiTutorialClient</span><span class="o">.</span><span class="nf">Main</span><span class="o">;</span>
+<span class="k">var</span> <span class="n">transport</span> <span class="o">:</span> <span class="n">ITransport</span><span class="o">;</span>
     <span class="n">protocol</span>  <span class="o">:</span> <span class="n">IProtocol</span><span class="o">;</span>
-    <span class="n">client</span>    <span class="o">:</span> <span class="n">TCalculator</span><span class="o">.</span><span class="na">Iface</span><span class="o">;</span>
+    <span class="n">client</span>    <span class="o">:</span> <span class="n">TCalculator</span><span class="o">.</span><span class="n">Iface</span><span class="o">;</span>
     <span class="n">work</span>      <span class="o">:</span> <span class="n">IWork</span><span class="o">;</span>
-    <span class="n">sum</span><span class="o">,</span> <span class="n">quotient</span><span class="o">,</span> <span class="n">diff</span> <span class="o">:</span> <span class="n">Integer</span><span class="o">;</span>
+    <span class="nb">sum</span><span class="o">,</span> <span class="n">quotient</span><span class="o">,</span> <span class="n">diff</span> <span class="o">:</span> <span class="kt">Integer</span><span class="o">;</span>
     <span class="n">log</span>       <span class="o">:</span> <span class="n">ISharedStruct</span><span class="o">;</span>
-<span class="n">begin</span>
+<span class="k">begin</span>
   <span class="k">try</span>
-    <span class="n">transport</span> <span class="o">:=</span> <span class="n">TSocketImpl</span><span class="o">.</span><span class="na">Create</span><span class="o">(</span> <span class="err">&#39;</span><span class="n">localhost</span><span class="err">&#39;</span><span class="o">,</span> <span class="mi">9090</span><span class="o">);</span>
-    <span class="n">protocol</span>  <span class="o">:=</span> <span class="n">TBinaryProtocolImpl</span><span class="o">.</span><span class="na">Create</span><span class="o">(</span> <span class="n">transport</span><span class="o">);</span>
-    <span class="n">client</span>    <span class="o">:=</span> <span class="n">TCalculator</span><span class="o">.</span><span class="na">TClient</span><span class="o">.</span><span class="na">Create</span><span class="o">(</span> <span class="n">protocol</span><span class="o">);</span>
+    <span class="n">transport</span> <span class="o">:=</span> <span class="n">TSocketImpl</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span> <span class="s">&#39;localhost&#39;</span><span class="o">,</span> <span class="mi">9090</span><span class="p">)</span><span class="o">;</span>
+    <span class="n">protocol</span>  <span class="o">:=</span> <span class="n">TBinaryProtocolImpl</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">transport</span><span class="p">)</span><span class="o">;</span>
+    <span class="n">client</span>    <span class="o">:=</span> <span class="n">TCalculator</span><span class="o">.</span><span class="n">TClient</span><span class="o">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">protocol</span><span class="p">)</span><span class="o">;</span>
 
-    <span class="n">transport</span><span class="o">.</span><span class="na">Open</span><span class="o">;</span>
+    <span class="n">transport</span><span class="o">.</span><span class="n">Open</span><span class="o">;</span>
 
-    <span class="n">client</span><span class="o">.</span><span class="na">ping</span><span class="o">;</span>
-    <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span><span class="err">&#39;</span><span class="n">ping</span><span class="o">()</span><span class="err">&#39;</span><span class="o">);</span>
+    <span class="n">client</span><span class="o">.</span><span class="n">ping</span><span class="o">;</span>
+    <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">&#39;ping()&#39;</span><span class="p">)</span><span class="o">;</span>
 
-    <span class="n">sum</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="na">add</span><span class="o">(</span> <span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">);</span>
-    <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="n">Format</span><span class="o">(</span> <span class="err">&#39;</span><span class="mi">1</span><span class="o">+</span><span class="mi">1</span><span class="o">=%</span><span class="n">d</span><span class="err">&#39;</span><span class="o">,</span> <span class="o">[</span><span class="n">sum</span><span class="o">]));</span>
+    <span class="nb">sum</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="n">add</span><span class="p">(</span> <span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">;</span>
+    <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="nb">Format</span><span class="p">(</span> <span class="s">&#39;1+1=%d&#39;</span><span class="o">,</span> <span class="p">[</span><span class="nb">sum</span><span class="p">]))</span><span class="o">;</span>
 
-    <span class="n">work</span> <span class="o">:=</span> <span class="n">TWorkImpl</span><span class="o">.</span><span class="na">Create</span><span class="o">;</span>
+    <span class="n">work</span> <span class="o">:=</span> <span class="n">TWorkImpl</span><span class="o">.</span><span class="n">Create</span><span class="o">;</span>
 
-    <span class="n">work</span><span class="o">.</span><span class="na">Op</span>   <span class="o">:=</span> <span class="n">TOperation</span><span class="o">.</span><span class="na">DIVIDE</span><span class="o">;</span>
-    <span class="n">work</span><span class="o">.</span><span class="na">Num1</span> <span class="o">:=</span> <span class="mi">1</span><span class="o">;</span>
-    <span class="n">work</span><span class="o">.</span><span class="na">Num2</span> <span class="o">:=</span> <span class="mi">0</span><span class="o">;</span>
+    <span class="n">work</span><span class="o">.</span><span class="n">Op</span>   <span class="o">:=</span> <span class="n">TOperation</span><span class="o">.</span><span class="n">DIVIDE</span><span class="o">;</span>
+    <span class="n">work</span><span class="o">.</span><span class="n">Num1</span> <span class="o">:=</span> <span class="mi">1</span><span class="o">;</span>
+    <span class="n">work</span><span class="o">.</span><span class="n">Num2</span> <span class="o">:=</span> <span class="mi">0</span><span class="o">;</span>
     <span class="k">try</span>
-      <span class="n">quotient</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="na">calculate</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="n">work</span><span class="o">);</span>
-      <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="err">&#39;</span><span class="n">Whoa</span> <span class="n">we</span> <span class="n">can</span> <span class="n">divide</span> <span class="n">by</span> <span class="mi">0</span><span class="err">&#39;</span><span class="o">);</span>
-      <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="n">Format</span><span class="o">(</span><span class="err">&#39;</span><span class="mi">1</span><span class="o">/</span><span class="mi">0</span><span class="o">=%</span><span class="n">d</span><span class="err">&#39;</span><span class="o">,[</span><span class="n">quotient</span><span class="o">]));</span>
-    <span class="n">except</span>
-      <span class="n">on</span> <span class="nl">io:</span> <span class="n">TInvalidOperation</span>
-      <span class="k">do</span> <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="err">&#39;</span><span class="n">Invalid</span> <span class="nl">operation:</span> <span class="err">&#39;</span> <span class="o">+</span> <span class="n">io</span><span class="o">.</span><span class="na">Why</span><span class="o">);</span>
-    <span class="n">end</span><span class="o">;</span>
-
-    <span class="n">work</span><span class="o">.</span><span class="na">Op</span>   <span class="o">:=</span> <span class="n">TOperation</span><span class="o">.</span><span class="na">SUBTRACT</span><span class="o">;</span>
-    <span class="n">work</span><span class="o">.</span><span class="na">Num1</span> <span class="o">:=</span> <span class="mi">15</span><span class="o">;</span>
-    <span class="n">work</span><span class="o">.</span><span class="na">Num2</span> <span class="o">:=</span> <span class="mi">10</span><span class="o">;</span>
+      <span class="n">quotient</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="n">calculate</span><span class="p">(</span><span class="mi">1</span><span class="o">,</span> <span class="n">work</span><span class="p">)</span><span class="o">;</span>
+      <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="s">&#39;Whoa we can divide by 0&#39;</span><span class="p">)</span><span class="o">;</span>
+      <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="nb">Format</span><span class="p">(</span><span class="s">&#39;1/0=%d&#39;</span><span class="o">,</span><span class="p">[</span><span class="n">quotient</span><span class="p">]))</span><span class="o">;</span>
+    <span class="k">except</span>
+      <span class="k">on</span> <span class="n">io</span><span class="o">:</span> <span class="n">TInvalidOperation</span>
+      <span class="k">do</span> <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="s">&#39;Invalid operation: &#39;</span> <span class="o">+</span> <span class="n">io</span><span class="o">.</span><span class="n">Why</span><span class="p">)</span><span class="o">;</span>
+    <span class="k">end</span><span class="o">;</span>
+
+    <span class="n">work</span><span class="o">.</span><span class="n">Op</span>   <span class="o">:=</span> <span class="n">TOperation</span><span class="o">.</span><span class="n">SUBTRACT</span><span class="o">;</span>
+    <span class="n">work</span><span class="o">.</span><span class="n">Num1</span> <span class="o">:=</span> <span class="mi">15</span><span class="o">;</span>
+    <span class="n">work</span><span class="o">.</span><span class="n">Num2</span> <span class="o">:=</span> <span class="mi">10</span><span class="o">;</span>
     <span class="k">try</span>
-      <span class="n">diff</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="na">calculate</span><span class="o">(</span> <span class="mi">1</span><span class="o">,</span> <span class="n">work</span><span class="o">);</span>
-      <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="n">Format</span><span class="o">(</span><span class="err">&#39;</span><span class="mi">15</span><span class="o">-</span><span class="mi">10</span><span class="o">=%</span><span class="n">d</span><span class="err">&#39;</span><span class="o">,</span> <span class="o">[</span><span class="n">diff</span><span class="o">]));</span>
-    <span class="n">except</span>
-      <span class="n">on</span> <span class="nl">io:</span> <span class="n">TInvalidOperation</span>
-      <span class="k">do</span> <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="err">&#39;</span><span class="n">Invalid</span> <span class="nl">operation:</span> <span class="err">&#39;</span> <span class="o">+</span> <span class="n">io</span><span class="o">.</span><span class="na">Why</span><span class="o">);</span>
-    <span class="n">end</span><span class="o">;</span>
-
-    <span class="n">log</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="na">getStruct</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
-    <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="n">Format</span><span class="o">(</span> <span class="err">&#39;</span><span class="n">Check</span> <span class="nl">log:</span> <span class="o">%</span><span class="n">s</span><span class="err">&#39;</span><span class="o">,</span> <span class="o">[</span><span class="n">log</span><span class="o">.</span><span class="na">Value</span><span class="o">]));</span>
-
-    <span class="n">transport</span><span class="o">.</span><span class="na">Close</span><span class="o">();</span>
-
-  <span class="n">except</span>
-    <span class="n">on</span> <span class="n">e</span> <span class="o">:</span> <span class="n">Exception</span>
-    <span class="k">do</span> <span class="n">Console</span><span class="o">.</span><span class="na">WriteLine</span><span class="o">(</span> <span class="n">e</span><span class="o">.</span><span class="na">ClassName</span><span class="o">+</span><span class="err">&#39;</span><span class="o">:</span> <span class="err">&#39;</span><span class="o">+</span><span class="n">e</span><span class="o">.</span><span class="na">Message</span><span class="o">);</span>
-  <span class="n">end</span><span class="o">;</span>
-<span class="n">end</span><span class="o">;</span>
+      <span class="n">diff</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="n">calculate</span><span class="p">(</span> <span class="mi">1</span><span class="o">,</span> <span class="n">work</span><span class="p">)</span><span class="o">;</span>
+      <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="nb">Format</span><span class="p">(</span><span class="s">&#39;15-10=%d&#39;</span><span class="o">,</span> <span class="p">[</span><span class="n">diff</span><span class="p">]))</span><span class="o">;</span>
+    <span class="k">except</span>
+      <span class="k">on</span> <span class="n">io</span><span class="o">:</span> <span class="n">TInvalidOperation</span>
+      <span class="k">do</span> <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="s">&#39;Invalid operation: &#39;</span> <span class="o">+</span> <span class="n">io</span><span class="o">.</span><span class="n">Why</span><span class="p">)</span><span class="o">;</span>
+    <span class="k">end</span><span class="o">;</span>
+
+    <span class="n">log</span> <span class="o">:=</span> <span class="n">client</span><span class="o">.</span><span class="n">getStruct</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">;</span>
+    <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="nb">Format</span><span class="p">(</span> <span class="s">&#39;Check log: %s&#39;</span><span class="o">,</span> <span class="p">[</span><span class="n">log</span><span class="o">.</span><span class="n">Value</span><span class="p">]))</span><span class="o">;</span>
+
+    <span class="n">transport</span><span class="o">.</span><span class="n">Close</span><span class="p">()</span><span class="o">;</span>
+
+  <span class="k">except</span>
+    <span class="k">on</span> <span class="n">e</span> <span class="o">:</span> <span class="n">Exception</span>
+    <span class="k">do</span> <span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="n">e</span><span class="o">.</span><span class="n">ClassName</span><span class="o">+</span><span class="s">&#39;: &#39;</span><span class="o">+</span><span class="n">e</span><span class="o">.</span><span class="n">Message</span><span class="p">)</span><span class="o">;</span>
+  <span class="k">end</span><span class="o">;</span>
+<span class="k">end</span><span class="o">;</span>
 
 
-<span class="n">begin</span>
+<span class="k">begin</span>
   <span class="k">try</span>
-    <span class="n">DelphiTutorialClient</span><span class="o">.</span><span class="na">Main</span><span class="o">;</span>
-  <span class="n">except</span>
-    <span class="n">on</span> <span class="nl">E:</span> <span class="n">Exception</span> <span class="k">do</span>
-      <span class="n">Writeln</span><span class="o">(</span><span class="n">E</span><span class="o">.</span><span class="na">ClassName</span><span class="o">,</span> <span class="err">&#39;</span><span class="o">:</span> <span class="err">&#39;</span><span class="o">,</span> <span class="n">E</span><span class="o">.</span><span class="na">Message</span><span class="o">);</span>
-  <span class="n">end</span><span class="o">;</span>
-<span class="n">end</span><span class="o">.</span>
+    <span class="n">DelphiTutorialClient</span><span class="o">.</span><span class="n">Main</span><span class="o">;</span>
+  <span class="k">except</span>
+    <span class="k">on</span> <span class="n">E</span><span class="o">:</span> <span class="n">Exception</span> <span class="k">do</span>
+      <span class="nb">Writeln</span><span class="p">(</span><span class="n">E</span><span class="o">.</span><span class="n">ClassName</span><span class="o">,</span> <span class="s">&#39;: &#39;</span><span class="o">,</span> <span class="n">E</span><span class="o">.</span><span class="n">Message</span><span class="p">)</span><span class="o">;</span>
+  <span class="k">end</span><span class="o">;</span>
+<span class="k">end</span><span class="o">.</span>
 </pre></div>
 
 <p class='snippet_footer'>
@@ -199,168 +199,137 @@
 </p>
 
 <h3 id="server">Server</h3>
-<div class="codehilite"><pre><span class="n">program</span> <span class="n">DelphiServer</span><span class="p">;</span>
-
-<span class="p">{</span><span class="err">$</span><span class="n">APPTYPE</span> <span class="n">CONSOLE</span><span class="p">}</span>
-<span class="p">{</span><span class="err">$</span><span class="n">D</span> <span class="err">&#39;</span><span class="n">Copyright</span> <span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="mi">2012</span> <span class="n">The</span> <span class="n">Apache</span> <span class="n">Software</span> <span class="n">Foundation</span><span class="err">&#39;</span><span class="p">}</span>
-
-<span class="p">{</span><span class="err">$</span><span class="n">Q</span><span class="o">+</span><span class="p">}</span>     <span class="c1">// throws exceptions on numeric overflows</span>
-
-<span class="n">uses</span>
-  <span class="n">SysUtils</span><span class="p">,</span>
-  <span class="n">Generics</span><span class="p">.</span><span class="n">Collections</span><span class="p">,</span>
-  <span class="n">Thrift</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Collections</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Collections</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Console</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Console</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Utils</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Utils</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Stream</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Stream</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Protocol</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Protocol</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Server</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Server</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Thrift</span><span class="p">.</span><span class="n">Transport</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">lib</span><span class="err">\</span><span class="n">delphi</span><span class="err">\</span><span class="n">src</span><span class="err">\</span><span class="n">Thrift</span><span class="p">.</span><span class="n">Transport</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Shared</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">gen</span><span class="o">-</span><span class="n">delphi</span><span class="err">\</span><span class="n">Shared</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">,</span>
-  <span class="n">Tutorial</span> <span class="n">in</span> <span class="err">&#39;</span><span class="p">..</span><span class="err">\</span><span class="p">..</span><span class="err">\</span><span class="n">gen</span><span class="o">-</span><span class="n">delphi</span><span class="err">\</span><span class="n">Tutorial</span><span class="p">.</span><span class="n">pas</span><span class="err">&#39;</span><span class="p">;</span>
-
-
-<span class="n">type</span>
-  <span class="n">TCalculatorHandler</span> <span class="o">=</span> <span class="n">class</span><span class="p">(</span> <span class="n">TInterfacedObject</span><span class="p">,</span> <span class="n">TCalculator</span><span class="p">.</span><span class="n">Iface</span><span class="p">)</span>
-  <span class="k">protected</span>
-    <span class="n">FLog</span> <span class="o">:</span> <span class="n">TDictionary</span><span class="o">&lt;</span> <span class="n">Integer</span><span class="p">,</span> <span class="n">ISharedStruct</span><span class="o">&gt;</span><span class="p">;</span>
-
-    <span class="c1">// TSharedService.Iface</span>
-    <span class="n">function</span>  <span class="n">getStruct</span><span class="p">(</span><span class="nl">key:</span> <span class="n">Integer</span><span class="p">)</span><span class="o">:</span> <span class="n">ISharedStruct</span><span class="p">;</span>
-
-    <span class="c1">// TCalculator.Iface</span>
-    <span class="n">procedure</span> <span class="n">ping</span><span class="p">();</span>
-    <span class="n">function</span>  <span class="n">add</span><span class="p">(</span><span class="nl">num1:</span> <span class="n">Integer</span><span class="p">;</span> <span class="nl">num2:</span> <span class="n">Integer</span><span class="p">)</span><span class="o">:</span> <span class="n">Integer</span><span class="p">;</span>
-    <span class="n">function</span>  <span class="n">calculate</span><span class="p">(</span><span class="nl">logid:</span> <span class="n">Integer</span><span class="p">;</span> <span class="k">const</span> <span class="nl">w:</span> <span class="n">IWork</span><span class="p">)</span><span class="o">:</span> <span class="n">Integer</span><span class="p">;</span>
-    <span class="n">procedure</span> <span class="n">zip</span><span class="p">();</span>
-
-  <span class="k">public</span>
-    <span class="n">constructor</span> <span class="n">Create</span><span class="p">;</span>
-    <span class="n">destructor</span> <span class="n">Destroy</span><span class="p">;</span>  <span class="n">override</span><span class="p">;</span>
-
-  <span class="n">end</span><span class="p">;</span>
-
-  <span class="n">DelphiTutorialServer</span> <span class="o">=</span> <span class="k">class</span>
-  <span class="nc">public</span>
-    <span class="k">class</span> <span class="nc">procedure</span> <span class="n">Main</span><span class="p">;</span>
-  <span class="n">end</span><span class="p">;</span>
-
-
-<span class="c1">//--- TCalculatorHandler ---------------------------------------------------</span>
-
-
-<span class="n">constructor</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">Create</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="n">inherited</span> <span class="n">Create</span><span class="p">;</span>
-  <span class="n">FLog</span> <span class="o">:=</span> <span class="n">TDictionary</span><span class="o">&lt;</span> <span class="n">Integer</span><span class="p">,</span> <span class="n">ISharedStruct</span><span class="o">&gt;</span><span class="p">.</span><span class="n">Create</span><span class="p">();</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="n">destructor</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">Destroy</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="k">try</span>
-    <span class="n">FreeAndNil</span><span class="p">(</span> <span class="n">FLog</span><span class="p">);</span>
-  <span class="n">finally</span>
-    <span class="n">inherited</span> <span class="n">Destroy</span><span class="p">;</span>
-  <span class="n">end</span><span class="p">;</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="n">procedure</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">ping</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="err">&#39;</span><span class="n">ping</span><span class="p">()</span><span class="err">&#39;</span><span class="p">);</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="n">function</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">add</span><span class="p">(</span><span class="nl">num1:</span> <span class="n">Integer</span><span class="p">;</span> <span class="nl">num2:</span> <span class="n">Integer</span><span class="p">)</span><span class="o">:</span> <span class="n">Integer</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="n">Format</span><span class="p">(</span> <span class="err">&#39;</span><span class="n">add</span><span class="p">(</span> <span class="o">%</span><span class="n">d</span><span class="p">,</span> <span class="o">%</span><span class="n">d</span><span class="p">)</span><span class="err">&#39;</span><span class="p">,</span> <span class="p">[</span><span class="n">num1</span><span class="p">,</span> <span class="n">num2</span><span class="p">]));</span>
-  <span class="n">result</span> <span class="o">:=</span> <span class="n">num1</span> <span class="o">+</span> <span class="n">num2</span><span class="p">;</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="n">function</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">calculate</span><span class="p">(</span><span class="nl">logid:</span> <span class="n">Integer</span><span class="p">;</span> <span class="k">const</span> <span class="nl">w:</span> <span class="n">IWork</span><span class="p">)</span><span class="o">:</span> <span class="n">Integer</span><span class="p">;</span>
-<span class="n">var</span> <span class="n">entry</span> <span class="o">:</span> <span class="n">ISharedStruct</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="k">try</span>
-    <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="n">Format</span><span class="p">(</span><span class="err">&#39;</span><span class="n">calculate</span><span class="p">(</span> <span class="o">%</span><span class="n">d</span><span class="p">,</span> <span class="p">[</span><span class="o">%</span><span class="n">d</span><span class="p">,</span><span class="o">%</span><span class="n">d</span><span class="p">,</span><span class="o">%</span><span class="n">d</span><span class="p">])</span><span class="err">&#39;</span><span class="p">,</span> <span class="p">[</span><span class="n">logid</span><span class="p">,</span> <span class="n">Ord</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">Op</span><span class="p">),</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span><span class="p">,</span> <span class="n">w</span><span class="p">.</span
 ><span class="n">Num2</span><span class="p">]));</span>
-
-    <span class="k">case</span> <span class="n">w</span><span class="p">.</span><span class="n">Op</span> <span class="n">of</span>
-      <span class="n">TOperation</span><span class="p">.</span><span class="n">ADD</span>      <span class="o">:</span>  <span class="n">result</span> <span class="o">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">+</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">;</span>
-      <span class="n">TOperation</span><span class="p">.</span><span class="n">SUBTRACT</span> <span class="o">:</span>  <span class="n">result</span> <span class="o">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">-</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">;</span>
-      <span class="n">TOperation</span><span class="p">.</span><span class="n">MULTIPLY</span> <span class="o">:</span>  <span class="n">result</span> <span class="o">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">*</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">;</span>
-      <span class="n">TOperation</span><span class="p">.</span><span class="n">DIVIDE</span>   <span class="o">:</span>  <span class="n">result</span> <span class="o">:=</span> <span class="n">Round</span><span class="p">(</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">/</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">);</span>
-    <span class="k">else</span>
-      <span class="n">raise</span> <span class="n">TInvalidOperation</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">Ord</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">Op</span><span class="p">),</span> <span class="err">&#39;</span><span class="n">Unknown</span> <span class="n">operation</span><span class="err">&#39;</span><span class="p">);</span>
-    <span class="n">end</span><span class="p">;</span>
-
-  <span class="n">except</span>
-    <span class="n">on</span> <span class="nl">e:</span><span class="n">Thrift</span><span class="p">.</span><span class="n">TException</span> <span class="k">do</span> <span class="n">raise</span><span class="p">;</span>  <span class="c1">// let Thrift Exceptions pass through</span>
-    <span class="n">on</span> <span class="nl">e:</span><span class="n">Exception</span> <span class="k">do</span> <span class="n">raise</span> <span class="n">TInvalidOperation</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">Ord</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">Op</span><span class="p">),</span> <span class="n">e</span><span class="p">.</span><span class="n">Message</span><span class="p">);</span>  <span class="c1">// repackage all other</span>
-  <span class="n">end</span><span class="p">;</span>
-
-  <span class="n">entry</span> <span class="o">:=</span> <span class="n">TSharedStructImpl</span><span class="p">.</span><span class="n">Create</span><span class="p">;</span>
-  <span class="n">entry</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="n">entry</span><span class="p">.</span><span class="n">Value</span> <span class="o">:=</span> <span class="n">IntToStr</span><span class="p">(</span> <span class="n">result</span><span class="p">);</span>
-  <span class="n">FLog</span><span class="p">.</span><span class="n">AddOrSetValue</span><span class="p">(</span> <span class="n">logid</span><span class="p">,</span> <span class="n">entry</span><span class="p">);</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="n">function</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">getStruct</span><span class="p">(</span><span class="nl">key:</span> <span class="n">Integer</span><span class="p">)</span><span class="o">:</span> <span class="n">ISharedStruct</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="n">Format</span><span class="p">(</span> <span class="err">&#39;</span><span class="n">getStruct</span><span class="p">(</span><span class="o">%</span><span class="n">d</span><span class="p">)</span><span class="err">&#39;</span><span class="p">,</span> <span class="p">[</span><span class="n">key</span><span class="p">]));</span>
-  <span class="n">result</span> <span class="o">:=</span> <span class="n">FLog</span><span class="p">[</span><span class="n">key</span><span class="p">];</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="n">procedure</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">zip</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="err">&#39;</span><span class="n">zip</span><span class="p">()</span><span class="err">&#39;</span><span class="p">);</span>
-<span class="n">end</span><span class="p">;</span>
-
-
-<span class="c1">//--- DelphiTutorialServer ----------------------------------------------------------------------</span>
-
-
-<span class="k">class</span> <span class="nc">procedure</span> <span class="n">DelphiTutorialServer</span><span class="p">.</span><span class="n">Main</span><span class="p">;</span>
-<span class="n">var</span> <span class="n">handler</span>   <span class="o">:</span> <span class="n">TCalculator</span><span class="p">.</span><span class="n">Iface</span><span class="p">;</span>
-    <span class="n">processor</span> <span class="o">:</span> <span class="n">IProcessor</span><span class="p">;</span>
-    <span class="n">transport</span> <span class="o">:</span> <span class="n">IServerTransport</span><span class="p">;</span>
-    <span class="n">server</span>    <span class="o">:</span> <span class="n">IServer</span><span class="p">;</span>
-<span class="n">begin</span>
-  <span class="k">try</span>
-    <span class="n">handler</span>   <span class="o">:=</span> <span class="n">TCalculatorHandler</span><span class="p">.</span><span class="n">Create</span><span class="p">;</span>
-    <span class="n">processor</span> <span class="o">:=</span> <span class="n">TCalculator</span><span class="p">.</span><span class="n">TProcessorImpl</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">handler</span><span class="p">);</span>
-    <span class="n">transport</span> <span class="o">:=</span> <span class="n">TServerSocketImpl</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span> <span class="mi">9090</span><span class="p">);</span>
-    <span class="n">server</span>    <span class="o">:=</span> <span class="n">TSimpleServer</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">processor</span><span class="p">,</span> <span class="n">transport</span><span class="p">);</span>
-
-    <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="err">&#39;</span><span class="n">Starting</span> <span class="n">the</span> <span class="n">server</span><span class="p">...</span><span class="err">&#39;</span><span class="p">);</span>
-    <span class="n">server</span><span class="p">.</span><span class="n">Serve</span><span class="p">();</span>
+<p>program DelphiServer;</p>
+<p>{$APPTYPE CONSOLE}
+{$D 'Copyright (c) 2012 The Apache Software Foundation'}</p>
+<p>{$Q+}     // throws exceptions on numeric overflows</p>
+<p>uses
+  SysUtils,
+  Generics.Collections,
+  Thrift in '......\lib\delphi\src\Thrift.pas',
+  Thrift.Collections in '......\lib\delphi\src\Thrift.Collections.pas',
+  Thrift.Console in '......\lib\delphi\src\Thrift.Console.pas',
+  Thrift.Utils in '......\lib\delphi\src\Thrift.Utils.pas',
+  Thrift.Stream in '......\lib\delphi\src\Thrift.Stream.pas',
+  Thrift.Protocol in '......\lib\delphi\src\Thrift.Protocol.pas',
+  Thrift.Server in '......\lib\delphi\src\Thrift.Server.pas',
+  Thrift.Transport in '......\lib\delphi\src\Thrift.Transport.pas',
+  Shared in '....\gen-delphi\Shared.pas',
+  Tutorial in '....\gen-delphi\Tutorial.pas';</p>
+<p>type
+  TCalculatorHandler = class( TInterfacedObject, TCalculator.Iface)
+  protected
+    FLog : TDictionary&lt; Integer, ISharedStruct&gt;;</p>
+<div class="codehilite"><pre><span class="c1">// TSharedService.Iface</span>
+<span class="k">function</span>  <span class="n">getStruct</span><span class="p">(</span><span class="nl">key:</span> <span class="n">Integer</span><span class="p">)</span><span class="o">:</span> <span class="n">ISharedStruct</span><span class="p">;</span>
+
+<span class="c1">// TCalculator.Iface</span>
+<span class="n">procedure</span> <span class="n">ping</span><span class="p">();</span>
+<span class="k">function</span>  <span class="n">add</span><span class="p">(</span><span class="nl">num1:</span> <span class="n">Integer</span><span class="p">;</span> <span class="nl">num2:</span> <span class="n">Integer</span><span class="p">)</span><span class="o">:</span> <span class="n">Integer</span><span class="p">;</span>
+<span class="k">function</span>  <span class="n">calculate</span><span class="p">(</span><span class="nl">logid:</span> <span class="n">Integer</span><span class="p">;</span> <span class="k">const</span> <span class="nl">w:</span> <span class="n">IWork</span><span class="p">)</span><span class="o">:</span> <span class="n">Integer</span><span class="p">;</span>
+<span class="n">procedure</span> <span class="n">zip</span><span class="p">();</span>
+</pre></div>
 
-  <span class="n">except</span>
-    <span class="n">on</span> <span class="nl">e:</span> <span class="n">Exception</span> <span class="k">do</span> <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="n">e</span><span class="p">.</span><span class="n">Message</span><span class="p">);</span>
-  <span class="n">end</span><span class="p">;</span>
 
-  <span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="err">&#39;</span><span class="n">done</span><span class="p">.</span><span class="err">&#39;</span><span class="p">);</span>
-<span class="n">end</span><span class="p">;</span>
+<p>public
+    constructor Create;
+    destructor Destroy;  override;</p>
+<p>end;</p>
+<p>DelphiTutorialServer = class
+  public
+    class procedure Main;
+  end;</p>
+<p>//--- TCalculatorHandler ---------------------------------------------------</p>
+<p>constructor TCalculatorHandler.Create;
+begin
+  inherited Create;
+  FLog := TDictionary&lt; Integer, ISharedStruct&gt;.Create();
+end;</p>
+<p>destructor TCalculatorHandler.Destroy;
+begin
+  try
+    FreeAndNil( FLog);
+  finally
+    inherited Destroy;
+  end;
+end;</p>
+<p>procedure TCalculatorHandler.ping;
+begin
+  Console.WriteLine( 'ping()');
+end;</p>
+<p>function TCalculatorHandler.add(num1: Integer; num2: Integer): Integer;
+begin
+  Console.WriteLine( Format( 'add( %d, %d)', [num1, num2]));
+  result := num1 + num2;
+end;</p>
+<p>function TCalculatorHandler.calculate(logid: Integer; const w: IWork): Integer;
+var entry : ISharedStruct;
+begin
+  try
+    Console.WriteLine( Format('calculate( %d, [%d,%d,%d])', [logid, Ord(w.Op), w.Num1, w.Num2]));</p>
+<div class="codehilite"><pre><span class="k">case</span> <span class="n">w</span><span class="p">.</span><span class="n">Op</span> <span class="n">of</span>
+  <span class="n">TOperation</span><span class="p">.</span><span class="n">ADD</span>      <span class="p">:</span>  <span class="n">result</span> <span class="p">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">+</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">;</span>
+  <span class="n">TOperation</span><span class="p">.</span><span class="n">SUBTRACT</span> <span class="p">:</span>  <span class="n">result</span> <span class="p">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">-</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">;</span>
+  <span class="n">TOperation</span><span class="p">.</span><span class="n">MULTIPLY</span> <span class="p">:</span>  <span class="n">result</span> <span class="p">:=</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">*</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">;</span>
+  <span class="n">TOperation</span><span class="p">.</span><span class="n">DIVIDE</span>   <span class="p">:</span>  <span class="n">result</span> <span class="p">:=</span> <span class="n">Round</span><span class="p">(</span> <span class="n">w</span><span class="p">.</span><span class="n">Num1</span> <span class="o">/</span> <span class="n">w</span><span class="p">.</span><span class="n">Num2</span><span class="p">);</span>
+<span class="k">else</span>
+  <span class="n">raise</span> <span class="n">TInvalidOperation</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span> <span class="n">Ord</span><span class="p">(</span><span class="n">w</span><span class="p">.</span><span class="n">Op</span><span class="p">),</span> <span class="s">&#39;Unknown operation&#39;</span><span class="p">);</span>
+<span class="k">end</span><span class="p">;</span>
+</pre></div>
 
 
-<span class="n">begin</span>
-  <span class="k">try</span>
-    <span class="n">DelphiTutorialServer</span><span class="p">.</span><span class="n">Main</span><span class="p">;</span>
-  <span class="n">except</span>
-    <span class="n">on</span> <span class="nl">E:</span> <span class="n">Exception</span> <span class="k">do</span>
-      <span class="n">Writeln</span><span class="p">(</span><span class="n">E</span><span class="p">.</span><span class="n">ClassName</span><span class="p">,</span> <span class="err">&#39;</span><span class="o">:</span> <span class="err">&#39;</span><span class="p">,</span> <span class="n">E</span><span class="p">.</span><span class="n">Message</span><span class="p">);</span>
-  <span class="n">end</span><span class="p">;</span>
-<span class="n">end</span><span class="p">.</span>
+<p>except
+    on e:Thrift.TException do raise;  // let Thrift Exceptions pass through
+    on e:Exception do raise TInvalidOperation.Create( Ord(w.Op), e.Message);  // repackage all other
+  end;</p>
+<p>entry := TSharedStructImpl.Create;
+  entry.Key   := logid;
+  entry.Value := IntToStr( result);
+  FLog.AddOrSetValue( logid, entry);
+end;</p>
+<p>function TCalculatorHandler.getStruct(key: Integer): ISharedStruct;
+begin
+  Console.WriteLine( Format( 'getStruct(%d)', [key]));
+  result := FLog[key];
+end;</p>
+<p>procedure TCalculatorHandler.zip;
+begin
+  Console.WriteLine( 'zip()');
+end;</p>
+<p>//--- DelphiTutorialServer ----------------------------------------------------------------------</p>
+<p>class procedure DelphiTutorialServer.Main;
+var handler   : TCalculator.Iface;
+    processor : IProcessor;
+    transport : IServerTransport;
+    server    : IServer;
+begin
+  try
+    handler   := TCalculatorHandler.Create;
+    processor := TCalculator.TProcessorImpl.Create( handler);
+    transport := TServerSocketImpl.Create( 9090);
+    server    := TSimpleServer.Create( processor, transport);</p>
+<div class="codehilite"><pre><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span> <span class="s">&#39;Starting the server...&#39;</span><span class="p">);</span>
+<span class="n">server</span><span class="p">.</span><span class="n">Serve</span><span class="p">();</span>
 </pre></div>
 
+
+<p>except
+    on e: Exception do Console.WriteLine( e.Message);
+  end;</p>
+<p>Console.WriteLine('done.');
+end;</p>
+<p>begin
+  try
+    DelphiTutorialServer.Main;
+  except
+    on E: Exception do
+      Writeln(E.ClassName, ': ', E.Message);
+  end;
+end.
 <p class='snippet_footer'>
   This snippet was generated by Apache Thrift's <strong>source tree docs</strong>:
   <a href="http://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob;f=tutorial/delphi/DelphiServer/DelphiServer.dpr;hb=HEAD"</a>tutorial/delphi/DelphiServer/DelphiServer.dpr</a>
-</p>
-
+</p></p>
 <h2 id="additional-information">Additional Information</h2>
 	</div>
 	<div class="container">