You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by bu...@apache.org on 2012/11/01 06:13:21 UTC

svn commit: r836837 [6/7] - in /websites/staging/mina/trunk/content: ./ mina/ mina/userguide/ mina/userguide/ch1-getting-started/ mina/userguide/ch12-logging-filter/ mina/userguide/ch14-state-machine/ mina/userguide/ch16-jmx-support/ mina/userguide/ch1...

Modified: websites/staging/mina/trunk/content/mina/userguide/ch9-codec-filter/ch9-codec-filter.html
==============================================================================
--- websites/staging/mina/trunk/content/mina/userguide/ch9-codec-filter/ch9-codec-filter.html (original)
+++ websites/staging/mina/trunk/content/mina/userguide/ch9-codec-filter/ch9-codec-filter.html Thu Nov  1 05:13:20 2012
@@ -173,20 +173,22 @@ In MINA terminology: without a ProtocolC
 <h2 id="example">Example</h2>
 <p>We will develop a (pretty useless) graphical chargen server to illustrate how to implement your own protocol codec (ProtocolEncoder, ProtocolDecoder, and ProtocolCodecFactory).
 The protocol is really simple. This is the layout of a request message:</p>
-<p><DIV class="table-wrap">
-<TABLE class="confluenceTable"><TBODY>
-<TR>
-<TH class="confluenceTh">4 bytes</TH>
-<TH class="confluenceTh">4 bytes</TH>
-<TH class="confluenceTh">4 bytes</TH>
-</TR>
-<TR>
-<TD class="confluenceTd">width</TD>
-<TD class="confluenceTd">height</TD>
-<TD class="confluenceTd">numchars</TD>
-</TR>
-</TBODY></TABLE>
-</DIV></p>
+<table>
+<thead>
+<tr>
+<th>4 bytes</th>
+<th>4 bytes</th>
+<th>4 bytes</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>width</td>
+<td>height</td>
+<td>numchars</td>
+</tr>
+</tbody>
+</table>
 <ul>
 <li>width: the width of the requested image (an integer in network byte-order)</li>
 <li>height: the height of the requested image (an integer in network byte-order)</li>
@@ -194,22 +196,24 @@ The protocol is really simple. This is t
 </ul>
 <p>The server responds with two images of the requested dimensions, with the requested number of characters painted on it.
 This is the layout of a response message:</p>
-<p><DIV class="table-wrap">
-<TABLE class="confluenceTable"><TBODY>
-<TR>
-<TH class="confluenceTh">4 bytes</TH>
-<TH class="confluenceTh">variable length body</TH>
-<TH class="confluenceTh">4 bytes</TH>
-<TH class="confluenceTh">variable length body</TH>
-</TR>
-<TR>
-<TD class="confluenceTd">length1</TD>
-<TD class="confluenceTd">image1</TD>
-<TD class="confluenceTd">length2</TD>
-<TD class="confluenceTd">image2</TD>
-</TR>
-</TBODY></TABLE>
-</DIV></p>
+<table>
+<thead>
+<tr>
+<th>4 bytes</th>
+<th>variable length body</th>
+<th>4 bytes</th>
+<th>variable length body</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>length1</td>
+<td>image1</td>
+<td>length2</td>
+<td>image2</td>
+</tr>
+</tbody>
+</table>
 <p>Overview of the classes we need for encoding and decoding requests and responses:</p>
 <ul>
 <li><strong>ImageRequest</strong>: a simple POJO representing a request to our ImageServer.</li>
@@ -221,50 +225,50 @@ This is the layout of a response message
 <li><strong>ImageCodecFactory</strong>: this class creates the necesarry encoders and decoders</li>
 </ul>
 <p>Here is the ImageRequest class :</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageRequest</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageRequest</span> <span class="o">{</span>
 
-    <span class="n">private</span> <span class="nb">int</span> <span class="n">width</span><span class="p">;</span>
-    <span class="n">private</span> <span class="nb">int</span> <span class="n">height</span><span class="p">;</span>
-    <span class="n">private</span> <span class="nb">int</span> <span class="n">numberOfCharacters</span><span class="p">;</span>
-
-    <span class="n">public</span> <span class="n">ImageRequest</span><span class="p">(</span><span class="nb">int</span> <span class="n">width</span><span class="p">,</span> <span class="nb">int</span> <span class="n">height</span><span class="p">,</span> <span class="nb">int</span> <span class="n">numberOfCharacters</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">width</span> <span class="o">=</span> <span class="n">width</span><span class="p">;</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">height</span> <span class="o">=</span> <span class="n">height</span><span class="p">;</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">numberOfCharacters</span> <span class="o">=</span> <span class="n">numberOfCharacters</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="nb">int</span> <span class="n">getWidth</span><span class="p">()</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">width</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="nb">int</span> <span class="n">getHeight</span><span class="p">()</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">height</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="nb">int</span> <span class="n">getNumberOfCharacters</span><span class="p">()</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">numberOfCharacters</span><span class="p">;</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">private</span> <span class="kt">int</span> <span class="n">width</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="kt">int</span> <span class="n">height</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="kt">int</span> <span class="n">numberOfCharacters</span><span class="o">;</span>
+
+    <span class="kd">public</span> <span class="nf">ImageRequest</span><span class="o">(</span><span class="kt">int</span> <span class="n">width</span><span class="o">,</span> <span class="kt">int</span> <span class="n">height</span><span class="o">,</span> <span class="kt">int</span> <span class="n">numberOfCharacters</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">width</span> <span class="o">=</span> <span class="n">width</span><span class="o">;</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">height</span> <span class="o">=</span> <span class="n">height</span><span class="o">;</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">numberOfCharacters</span> <span class="o">=</span> <span class="n">numberOfCharacters</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getWidth</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">width</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getHeight</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">height</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getNumberOfCharacters</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">numberOfCharacters</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Encoding is usually simpler than decoding, so let's start with the ImageRequestEncoder:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageRequestEncoder</span> <span class="n">implements</span> <span class="n">ProtocolEncoder</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageRequestEncoder</span> <span class="kd">implements</span> <span class="n">ProtocolEncoder</span> <span class="o">{</span>
 
-    <span class="n">public</span> <span class="n">void</span> <span class="n">encode</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">Object</span> <span class="n">message</span><span class="p">,</span> <span class="n">ProtocolEncoderOutput</span> <span class="n">out</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">ImageRequest</span> <span class="n">request</span> <span class="o">=</span> <span class="p">(</span><span class="n">ImageRequest</span><span class="p">)</span> <span class="n">message</span><span class="p">;</span>
-        <span class="n">IoBuffer</span> <span class="n">buffer</span> <span class="o">=</span> <span class="n">IoBuffer</span><span class="o">.</span><span class="n">allocate</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="n">false</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">putInt</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">getWidth</span><span class="p">());</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">putInt</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">getHeight</span><span class="p">());</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">putInt</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">getNumberOfCharacters</span><span class="p">());</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">flip</span><span class="p">();</span>
-        <span class="n">out</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">buffer</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="n">void</span> <span class="n">dispose</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="sr">//</span> <span class="n">nothing</span> <span class="n">to</span> <span class="n">dispose</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">encode</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">Object</span> <span class="n">message</span><span class="o">,</span> <span class="n">ProtocolEncoderOutput</span> <span class="n">out</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">ImageRequest</span> <span class="n">request</span> <span class="o">=</span> <span class="o">(</span><span class="n">ImageRequest</span><span class="o">)</span> <span class="n">message</span><span class="o">;</span>
+        <span class="n">IoBuffer</span> <span class="n">buffer</span> <span class="o">=</span> <span class="n">IoBuffer</span><span class="o">.</span><span class="na">allocate</span><span class="o">(</span><span class="mi">12</span><span class="o">,</span> <span class="kc">false</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="n">request</span><span class="o">.</span><span class="na">getWidth</span><span class="o">());</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="n">request</span><span class="o">.</span><span class="na">getHeight</span><span class="o">());</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="n">request</span><span class="o">.</span><span class="na">getNumberOfCharacters</span><span class="o">());</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">flip</span><span class="o">();</span>
+        <span class="n">out</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">buffer</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">dispose</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="c1">// nothing to dispose</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -278,21 +282,21 @@ This is the layout of a response message
 </ul>
 <p>Now let's have a look at the decoder. The CumulativeProtocolDecoder is a great help for writing your own decoder: it will buffer all incoming data until your decoder decides it can do something with it.
 In this case the message has a fixed size, so it's easiest to wait until all data is available:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageRequestDecoder</span> <span class="n">extends</span> <span class="n">CumulativeProtocolDecoder</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageRequestDecoder</span> <span class="kd">extends</span> <span class="n">CumulativeProtocolDecoder</span> <span class="o">{</span>
 
-    <span class="n">protected</span> <span class="n">boolean</span> <span class="n">doDecode</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">IoBuffer</span> <span class="n">in</span><span class="p">,</span> <span class="n">ProtocolDecoderOutput</span> <span class="n">out</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="k">if</span> <span class="p">(</span><span class="n">in</span><span class="o">.</span><span class="n">remaining</span><span class="p">()</span> <span class="o">&gt;=</span> <span class="mi">12</span><span class="p">)</span> <span class="p">{</span>
-            <span class="nb">int</span> <span class="n">width</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="n">getInt</span><span class="p">();</span>
-            <span class="nb">int</span> <span class="n">height</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="n">getInt</span><span class="p">();</span>
-            <span class="nb">int</span> <span class="n">numberOfCharachters</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="n">getInt</span><span class="p">();</span>
-            <span class="n">ImageRequest</span> <span class="n">request</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageRequest</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">height</span><span class="p">,</span> <span class="n">numberOfCharachters</span><span class="p">);</span>
-            <span class="n">out</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">request</span><span class="p">);</span>
-            <span class="k">return</span> <span class="n">true</span><span class="p">;</span>
-        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
-            <span class="k">return</span> <span class="n">false</span><span class="p">;</span>
-        <span class="p">}</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">protected</span> <span class="kt">boolean</span> <span class="nf">doDecode</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">IoBuffer</span> <span class="n">in</span><span class="o">,</span> <span class="n">ProtocolDecoderOutput</span> <span class="n">out</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">in</span><span class="o">.</span><span class="na">remaining</span><span class="o">()</span> <span class="o">&gt;=</span> <span class="mi">12</span><span class="o">)</span> <span class="o">{</span>
+            <span class="kt">int</span> <span class="n">width</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">getInt</span><span class="o">();</span>
+            <span class="kt">int</span> <span class="n">height</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">getInt</span><span class="o">();</span>
+            <span class="kt">int</span> <span class="n">numberOfCharachters</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">getInt</span><span class="o">();</span>
+            <span class="n">ImageRequest</span> <span class="n">request</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageRequest</span><span class="o">(</span><span class="n">width</span><span class="o">,</span> <span class="n">height</span><span class="o">,</span> <span class="n">numberOfCharachters</span><span class="o">);</span>
+            <span class="n">out</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">request</span><span class="o">);</span>
+            <span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
+        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+            <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+        <span class="o">}</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -303,52 +307,52 @@ In this case the message has a fixed siz
 <li>when there is not enough data available to decode a message, just return false</li>
 </ul>
 <p>The response is also a very simple POJO:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageResponse</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageResponse</span> <span class="o">{</span>
 
-    <span class="n">private</span> <span class="n">BufferedImage</span> <span class="n">image1</span><span class="p">;</span>
+    <span class="kd">private</span> <span class="n">BufferedImage</span> <span class="n">image1</span><span class="o">;</span>
 
-    <span class="n">private</span> <span class="n">BufferedImage</span> <span class="n">image2</span><span class="p">;</span>
+    <span class="kd">private</span> <span class="n">BufferedImage</span> <span class="n">image2</span><span class="o">;</span>
 
-    <span class="n">public</span> <span class="n">ImageResponse</span><span class="p">(</span><span class="n">BufferedImage</span> <span class="n">image1</span><span class="p">,</span> <span class="n">BufferedImage</span> <span class="n">image2</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">image1</span> <span class="o">=</span> <span class="n">image1</span><span class="p">;</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">image2</span> <span class="o">=</span> <span class="n">image2</span><span class="p">;</span>
-    <span class="p">}</span>
+    <span class="kd">public</span> <span class="nf">ImageResponse</span><span class="o">(</span><span class="n">BufferedImage</span> <span class="n">image1</span><span class="o">,</span> <span class="n">BufferedImage</span> <span class="n">image2</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">image1</span> <span class="o">=</span> <span class="n">image1</span><span class="o">;</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">image2</span> <span class="o">=</span> <span class="n">image2</span><span class="o">;</span>
+    <span class="o">}</span>
 
-    <span class="n">public</span> <span class="n">BufferedImage</span> <span class="n">getImage1</span><span class="p">()</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">image1</span><span class="p">;</span>
-    <span class="p">}</span>
+    <span class="kd">public</span> <span class="n">BufferedImage</span> <span class="nf">getImage1</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">image1</span><span class="o">;</span>
+    <span class="o">}</span>
 
-    <span class="n">public</span> <span class="n">BufferedImage</span> <span class="n">getImage2</span><span class="p">()</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">image2</span><span class="p">;</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">public</span> <span class="n">BufferedImage</span> <span class="nf">getImage2</span><span class="o">()</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">image2</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Encoding the response is also trivial:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageResponseEncoder</span> <span class="n">extends</span> <span class="n">ProtocolEncoderAdapter</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageResponseEncoder</span> <span class="kd">extends</span> <span class="n">ProtocolEncoderAdapter</span> <span class="o">{</span>
 
-    <span class="n">public</span> <span class="n">void</span> <span class="n">encode</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">Object</span> <span class="n">message</span><span class="p">,</span> <span class="n">ProtocolEncoderOutput</span> <span class="n">out</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">ImageResponse</span> <span class="n">imageResponse</span> <span class="o">=</span> <span class="p">(</span><span class="n">ImageResponse</span><span class="p">)</span> <span class="n">message</span><span class="p">;</span>
-        <span class="n">byte</span><span class="o">[]</span> <span class="n">bytes1</span> <span class="o">=</span> <span class="n">getBytes</span><span class="p">(</span><span class="n">imageResponse</span><span class="o">.</span><span class="n">getImage1</span><span class="p">());</span>
-        <span class="n">byte</span><span class="o">[]</span> <span class="n">bytes2</span> <span class="o">=</span> <span class="n">getBytes</span><span class="p">(</span><span class="n">imageResponse</span><span class="o">.</span><span class="n">getImage2</span><span class="p">());</span>
-        <span class="nb">int</span> <span class="n">capacity</span> <span class="o">=</span> <span class="n">bytes1</span><span class="o">.</span><span class="nb">length</span> <span class="o">+</span> <span class="n">bytes2</span><span class="o">.</span><span class="nb">length</span> <span class="o">+</span> <span class="mi">8</span><span class="p">;</span>
-        <span class="n">IoBuffer</span> <span class="n">buffer</span> <span class="o">=</span> <span class="n">IoBuffer</span><span class="o">.</span><span class="n">allocate</span><span class="p">(</span><span class="n">capacity</span><span class="p">,</span> <span class="n">false</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">setAutoExpand</span><span class="p">(</span><span class="n">true</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">putInt</span><span class="p">(</span><span class="n">bytes1</span><span class="o">.</span><span class="nb">length</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">bytes1</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">putInt</span><span class="p">(</span><span class="n">bytes2</span><span class="o">.</span><span class="nb">length</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">bytes2</span><span class="p">);</span>
-        <span class="n">buffer</span><span class="o">.</span><span class="n">flip</span><span class="p">();</span>
-        <span class="n">out</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">buffer</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="n">private</span> <span class="n">byte</span><span class="o">[]</span> <span class="n">getBytes</span><span class="p">(</span><span class="n">BufferedImage</span> <span class="n">image</span><span class="p">)</span> <span class="n">throws</span> <span class="n">IOException</span> <span class="p">{</span>
-        <span class="n">ByteArrayOutputStream</span> <span class="n">baos</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayOutputStream</span><span class="p">();</span>
-        <span class="n">ImageIO</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="s">&quot;PNG&quot;</span><span class="p">,</span> <span class="n">baos</span><span class="p">);</span>
-        <span class="k">return</span> <span class="n">baos</span><span class="o">.</span><span class="n">toByteArray</span><span class="p">();</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">encode</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">Object</span> <span class="n">message</span><span class="o">,</span> <span class="n">ProtocolEncoderOutput</span> <span class="n">out</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">ImageResponse</span> <span class="n">imageResponse</span> <span class="o">=</span> <span class="o">(</span><span class="n">ImageResponse</span><span class="o">)</span> <span class="n">message</span><span class="o">;</span>
+        <span class="kt">byte</span><span class="o">[]</span> <span class="n">bytes1</span> <span class="o">=</span> <span class="n">getBytes</span><span class="o">(</span><span class="n">imageResponse</span><span class="o">.</span><span class="na">getImage1</span><span class="o">());</span>
+        <span class="kt">byte</span><span class="o">[]</span> <span class="n">bytes2</span> <span class="o">=</span> <span class="n">getBytes</span><span class="o">(</span><span class="n">imageResponse</span><span class="o">.</span><span class="na">getImage2</span><span class="o">());</span>
+        <span class="kt">int</span> <span class="n">capacity</span> <span class="o">=</span> <span class="n">bytes1</span><span class="o">.</span><span class="na">length</span> <span class="o">+</span> <span class="n">bytes2</span><span class="o">.</span><span class="na">length</span> <span class="o">+</span> <span class="mi">8</span><span class="o">;</span>
+        <span class="n">IoBuffer</span> <span class="n">buffer</span> <span class="o">=</span> <span class="n">IoBuffer</span><span class="o">.</span><span class="na">allocate</span><span class="o">(</span><span class="n">capacity</span><span class="o">,</span> <span class="kc">false</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">setAutoExpand</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="n">bytes1</span><span class="o">.</span><span class="na">length</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">bytes1</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">putInt</span><span class="o">(</span><span class="n">bytes2</span><span class="o">.</span><span class="na">length</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">put</span><span class="o">(</span><span class="n">bytes2</span><span class="o">);</span>
+        <span class="n">buffer</span><span class="o">.</span><span class="na">flip</span><span class="o">();</span>
+        <span class="n">out</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">buffer</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">private</span> <span class="kt">byte</span><span class="o">[]</span> <span class="nf">getBytes</span><span class="o">(</span><span class="n">BufferedImage</span> <span class="n">image</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+        <span class="n">ByteArrayOutputStream</span> <span class="n">baos</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayOutputStream</span><span class="o">();</span>
+        <span class="n">ImageIO</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">image</span><span class="o">,</span> <span class="s">&quot;PNG&quot;</span><span class="o">,</span> <span class="n">baos</span><span class="o">);</span>
+        <span class="k">return</span> <span class="n">baos</span><span class="o">.</span><span class="na">toByteArray</span><span class="o">();</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -357,55 +361,55 @@ In this case the message has a fixed siz
 <li>when it is impossible to calculate the length of the IoBuffer beforehand, you can use an auto-expanding buffer by calling buffer.setAutoExpand(true);</li>
 </ul>
 <p>Now let's have a look at decoding the response:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageResponseDecoder</span> <span class="n">extends</span> <span class="n">CumulativeProtocolDecoder</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageResponseDecoder</span> <span class="kd">extends</span> <span class="n">CumulativeProtocolDecoder</span> <span class="o">{</span>
 
-    <span class="n">private</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">DECODER_STATE_KEY</span> <span class="o">=</span> <span class="n">ImageResponseDecoder</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;.STATE&quot;</span><span class="p">;</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">DECODER_STATE_KEY</span> <span class="o">=</span> <span class="n">ImageResponseDecoder</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">&quot;.STATE&quot;</span><span class="o">;</span>
 
-    <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="nb">int</span> <span class="n">MAX_IMAGE_SIZE</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="p">;</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="n">MAX_IMAGE_SIZE</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">1024</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">;</span>
 
-    <span class="n">private</span> <span class="n">static</span> <span class="n">class</span> <span class="n">DecoderState</span> <span class="p">{</span>
-        <span class="n">BufferedImage</span> <span class="n">image1</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">protected</span> <span class="n">boolean</span> <span class="n">doDecode</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">IoBuffer</span> <span class="n">in</span><span class="p">,</span> <span class="n">ProtocolDecoderOutput</span> <span class="n">out</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">DecoderState</span> <span class="n">decoderState</span> <span class="o">=</span> <span class="p">(</span><span class="n">DecoderState</span><span class="p">)</span> <span class="n">session</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="n">DECODER_STATE_KEY</span><span class="p">);</span>
-        <span class="k">if</span> <span class="p">(</span><span class="n">decoderState</span> <span class="o">==</span> <span class="n">null</span><span class="p">)</span> <span class="p">{</span>
-            <span class="n">decoderState</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DecoderState</span><span class="p">();</span>
-            <span class="n">session</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="n">DECODER_STATE_KEY</span><span class="p">,</span> <span class="n">decoderState</span><span class="p">);</span>
-        <span class="p">}</span>
-        <span class="k">if</span> <span class="p">(</span><span class="n">decoderState</span><span class="o">.</span><span class="n">image1</span> <span class="o">==</span> <span class="n">null</span><span class="p">)</span> <span class="p">{</span>
-            <span class="sr">//</span> <span class="n">try</span> <span class="n">to</span> <span class="nb">read</span> <span class="n">first</span> <span class="n">image</span>
-            <span class="k">if</span> <span class="p">(</span><span class="n">in</span><span class="o">.</span><span class="n">prefixedDataAvailable</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">MAX_IMAGE_SIZE</span><span class="p">))</span> <span class="p">{</span>
-                <span class="n">decoderState</span><span class="o">.</span><span class="n">image1</span> <span class="o">=</span> <span class="n">readImage</span><span class="p">(</span><span class="n">in</span><span class="p">);</span>
-            <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
-                <span class="sr">//</span> <span class="ow">not</span> <span class="n">enough</span> <span class="n">data</span> <span class="n">available</span> <span class="n">to</span> <span class="nb">read</span> <span class="n">first</span> <span class="n">image</span>
-                <span class="k">return</span> <span class="n">false</span><span class="p">;</span>
-            <span class="p">}</span>
-        <span class="p">}</span>
-        <span class="k">if</span> <span class="p">(</span><span class="n">decoderState</span><span class="o">.</span><span class="n">image1</span> <span class="o">!=</span> <span class="n">null</span><span class="p">)</span> <span class="p">{</span>
-            <span class="sr">//</span> <span class="n">try</span> <span class="n">to</span> <span class="nb">read</span> <span class="n">second</span> <span class="n">image</span>
-            <span class="k">if</span> <span class="p">(</span><span class="n">in</span><span class="o">.</span><span class="n">prefixedDataAvailable</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="n">MAX_IMAGE_SIZE</span><span class="p">))</span> <span class="p">{</span>
-                <span class="n">BufferedImage</span> <span class="n">image2</span> <span class="o">=</span> <span class="n">readImage</span><span class="p">(</span><span class="n">in</span><span class="p">);</span>
-                <span class="n">ImageResponse</span> <span class="n">imageResponse</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponse</span><span class="p">(</span><span class="n">decoderState</span><span class="o">.</span><span class="n">image1</span><span class="p">,</span> <span class="n">image2</span><span class="p">);</span>
-                <span class="n">out</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">imageResponse</span><span class="p">);</span>
-                <span class="n">decoderState</span><span class="o">.</span><span class="n">image1</span> <span class="o">=</span> <span class="n">null</span><span class="p">;</span>
-                <span class="k">return</span> <span class="n">true</span><span class="p">;</span>
-            <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
-                <span class="sr">//</span> <span class="ow">not</span> <span class="n">enough</span> <span class="n">data</span> <span class="n">available</span> <span class="n">to</span> <span class="nb">read</span> <span class="n">second</span> <span class="n">image</span>
-                <span class="k">return</span> <span class="n">false</span><span class="p">;</span>
-            <span class="p">}</span>
-        <span class="p">}</span>
-        <span class="k">return</span> <span class="n">false</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">private</span> <span class="n">BufferedImage</span> <span class="n">readImage</span><span class="p">(</span><span class="n">IoBuffer</span> <span class="n">in</span><span class="p">)</span> <span class="n">throws</span> <span class="n">IOException</span> <span class="p">{</span>
-        <span class="nb">int</span> <span class="nb">length</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="n">getInt</span><span class="p">();</span>
-        <span class="n">byte</span><span class="o">[]</span> <span class="n">bytes</span> <span class="o">=</span> <span class="k">new</span> <span class="n">byte</span><span class="p">[</span><span class="nb">length</span><span class="p">];</span>
-        <span class="n">in</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bytes</span><span class="p">);</span>
-        <span class="n">ByteArrayInputStream</span> <span class="n">bais</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayInputStream</span><span class="p">(</span><span class="n">bytes</span><span class="p">);</span>
-        <span class="k">return</span> <span class="n">ImageIO</span><span class="o">.</span><span class="nb">read</span><span class="p">(</span><span class="n">bais</span><span class="p">);</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">private</span> <span class="kd">static</span> <span class="kd">class</span> <span class="nc">DecoderState</span> <span class="o">{</span>
+        <span class="n">BufferedImage</span> <span class="n">image1</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">protected</span> <span class="kt">boolean</span> <span class="nf">doDecode</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">IoBuffer</span> <span class="n">in</span><span class="o">,</span> <span class="n">ProtocolDecoderOutput</span> <span class="n">out</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">DecoderState</span> <span class="n">decoderState</span> <span class="o">=</span> <span class="o">(</span><span class="n">DecoderState</span><span class="o">)</span> <span class="n">session</span><span class="o">.</span><span class="na">getAttribute</span><span class="o">(</span><span class="n">DECODER_STATE_KEY</span><span class="o">);</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">decoderState</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+            <span class="n">decoderState</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DecoderState</span><span class="o">();</span>
+            <span class="n">session</span><span class="o">.</span><span class="na">setAttribute</span><span class="o">(</span><span class="n">DECODER_STATE_KEY</span><span class="o">,</span> <span class="n">decoderState</span><span class="o">);</span>
+        <span class="o">}</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">decoderState</span><span class="o">.</span><span class="na">image1</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+            <span class="c1">// try to read first image</span>
+            <span class="k">if</span> <span class="o">(</span><span class="n">in</span><span class="o">.</span><span class="na">prefixedDataAvailable</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span> <span class="n">MAX_IMAGE_SIZE</span><span class="o">))</span> <span class="o">{</span>
+                <span class="n">decoderState</span><span class="o">.</span><span class="na">image1</span> <span class="o">=</span> <span class="n">readImage</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
+            <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+                <span class="c1">// not enough data available to read first image</span>
+                <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+            <span class="o">}</span>
+        <span class="o">}</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">decoderState</span><span class="o">.</span><span class="na">image1</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
+            <span class="c1">// try to read second image</span>
+            <span class="k">if</span> <span class="o">(</span><span class="n">in</span><span class="o">.</span><span class="na">prefixedDataAvailable</span><span class="o">(</span><span class="mi">4</span><span class="o">,</span> <span class="n">MAX_IMAGE_SIZE</span><span class="o">))</span> <span class="o">{</span>
+                <span class="n">BufferedImage</span> <span class="n">image2</span> <span class="o">=</span> <span class="n">readImage</span><span class="o">(</span><span class="n">in</span><span class="o">);</span>
+                <span class="n">ImageResponse</span> <span class="n">imageResponse</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponse</span><span class="o">(</span><span class="n">decoderState</span><span class="o">.</span><span class="na">image1</span><span class="o">,</span> <span class="n">image2</span><span class="o">);</span>
+                <span class="n">out</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">imageResponse</span><span class="o">);</span>
+                <span class="n">decoderState</span><span class="o">.</span><span class="na">image1</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
+                <span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
+            <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+                <span class="c1">// not enough data available to read second image</span>
+                <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+            <span class="o">}</span>
+        <span class="o">}</span>
+        <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">private</span> <span class="n">BufferedImage</span> <span class="nf">readImage</span><span class="o">(</span><span class="n">IoBuffer</span> <span class="n">in</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+        <span class="kt">int</span> <span class="n">length</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">getInt</span><span class="o">();</span>
+        <span class="kt">byte</span><span class="o">[]</span> <span class="n">bytes</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="n">length</span><span class="o">];</span>
+        <span class="n">in</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">bytes</span><span class="o">);</span>
+        <span class="n">ByteArrayInputStream</span> <span class="n">bais</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayInputStream</span><span class="o">(</span><span class="n">bytes</span><span class="o">);</span>
+        <span class="k">return</span> <span class="n">ImageIO</span><span class="o">.</span><span class="na">read</span><span class="o">(</span><span class="n">bais</span><span class="o">);</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -423,45 +427,45 @@ see <a href="http://www.nabble.com/Tutor
 <li>don't forget to reset the decoder state when you've decoded a response (removing the session attribute is another way to do it)</li>
 </ul>
 <p>If the response would consist of a single image, we would not need to store decoder state:</p>
-<div class="codehilite"><pre><span class="n">protected</span> <span class="n">boolean</span> <span class="n">doDecode</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">IoBuffer</span> <span class="n">in</span><span class="p">,</span> <span class="n">ProtocolDecoderOutput</span> <span class="n">out</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-    <span class="k">if</span> <span class="p">(</span><span class="n">in</span><span class="o">.</span><span class="n">prefixedDataAvailable</span><span class="p">(</span><span class="mi">4</span><span class="p">))</span> <span class="p">{</span>
-        <span class="nb">int</span> <span class="nb">length</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="n">getInt</span><span class="p">();</span>
-        <span class="n">byte</span><span class="o">[]</span> <span class="n">bytes</span> <span class="o">=</span> <span class="k">new</span> <span class="n">byte</span><span class="p">[</span><span class="nb">length</span><span class="p">];</span>
-        <span class="n">in</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bytes</span><span class="p">);</span>
-        <span class="n">ByteArrayInputStream</span> <span class="n">bais</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayInputStream</span><span class="p">(</span><span class="n">bytes</span><span class="p">);</span>
-        <span class="n">BufferedImage</span> <span class="n">image</span> <span class="o">=</span> <span class="n">ImageIO</span><span class="o">.</span><span class="nb">read</span><span class="p">(</span><span class="n">bais</span><span class="p">);</span>
-        <span class="n">out</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">image</span><span class="p">);</span>
-        <span class="k">return</span> <span class="n">true</span><span class="p">;</span>
-    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">false</span><span class="p">;</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">protected</span> <span class="kt">boolean</span> <span class="nf">doDecode</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">IoBuffer</span> <span class="n">in</span><span class="o">,</span> <span class="n">ProtocolDecoderOutput</span> <span class="n">out</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+    <span class="k">if</span> <span class="o">(</span><span class="n">in</span><span class="o">.</span><span class="na">prefixedDataAvailable</span><span class="o">(</span><span class="mi">4</span><span class="o">))</span> <span class="o">{</span>
+        <span class="kt">int</span> <span class="n">length</span> <span class="o">=</span> <span class="n">in</span><span class="o">.</span><span class="na">getInt</span><span class="o">();</span>
+        <span class="kt">byte</span><span class="o">[]</span> <span class="n">bytes</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span><span class="o">[</span><span class="n">length</span><span class="o">];</span>
+        <span class="n">in</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">bytes</span><span class="o">);</span>
+        <span class="n">ByteArrayInputStream</span> <span class="n">bais</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ByteArrayInputStream</span><span class="o">(</span><span class="n">bytes</span><span class="o">);</span>
+        <span class="n">BufferedImage</span> <span class="n">image</span> <span class="o">=</span> <span class="n">ImageIO</span><span class="o">.</span><span class="na">read</span><span class="o">(</span><span class="n">bais</span><span class="o">);</span>
+        <span class="n">out</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">image</span><span class="o">);</span>
+        <span class="k">return</span> <span class="kc">true</span><span class="o">;</span>
+    <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="kc">false</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Now let's glue it all together:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageCodecFactory</span> <span class="n">implements</span> <span class="n">ProtocolCodecFactory</span> <span class="p">{</span>
-    <span class="n">private</span> <span class="n">ProtocolEncoder</span> <span class="n">encoder</span><span class="p">;</span>
-    <span class="n">private</span> <span class="n">ProtocolDecoder</span> <span class="n">decoder</span><span class="p">;</span>
-
-    <span class="n">public</span> <span class="n">ImageCodecFactory</span><span class="p">(</span><span class="n">boolean</span> <span class="n">client</span><span class="p">)</span> <span class="p">{</span>
-        <span class="k">if</span> <span class="p">(</span><span class="n">client</span><span class="p">)</span> <span class="p">{</span>
-            <span class="n">encoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageRequestEncoder</span><span class="p">();</span>
-            <span class="n">decoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponseDecoder</span><span class="p">();</span>
-        <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
-            <span class="n">encoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponseEncoder</span><span class="p">();</span>
-            <span class="n">decoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageRequestDecoder</span><span class="p">();</span>
-        <span class="p">}</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="n">ProtocolEncoder</span> <span class="n">getEncoder</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">ioSession</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">encoder</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="n">ProtocolDecoder</span> <span class="n">getDecoder</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">ioSession</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="k">return</span> <span class="n">decoder</span><span class="p">;</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageCodecFactory</span> <span class="kd">implements</span> <span class="n">ProtocolCodecFactory</span> <span class="o">{</span>
+    <span class="kd">private</span> <span class="n">ProtocolEncoder</span> <span class="n">encoder</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">ProtocolDecoder</span> <span class="n">decoder</span><span class="o">;</span>
+
+    <span class="kd">public</span> <span class="nf">ImageCodecFactory</span><span class="o">(</span><span class="kt">boolean</span> <span class="n">client</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">if</span> <span class="o">(</span><span class="n">client</span><span class="o">)</span> <span class="o">{</span>
+            <span class="n">encoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageRequestEncoder</span><span class="o">();</span>
+            <span class="n">decoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponseDecoder</span><span class="o">();</span>
+        <span class="o">}</span> <span class="k">else</span> <span class="o">{</span>
+            <span class="n">encoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponseEncoder</span><span class="o">();</span>
+            <span class="n">decoder</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageRequestDecoder</span><span class="o">();</span>
+        <span class="o">}</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="n">ProtocolEncoder</span> <span class="nf">getEncoder</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">ioSession</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">encoder</span><span class="o">;</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="n">ProtocolDecoder</span> <span class="nf">getDecoder</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">ioSession</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="k">return</span> <span class="n">decoder</span><span class="o">;</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
@@ -471,104 +475,104 @@ see <a href="http://www.nabble.com/Tutor
 <li>since our encoders and decoders store no conversational state, it is safe to let all sessions share a single instance.</li>
 </ul>
 <p>This is how the server would use the ProtocolCodecFactory:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageServer</span> <span class="p">{</span>
-    <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="nb">int</span> <span class="n">PORT</span> <span class="o">=</span> <span class="mi">33789</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageServer</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="n">PORT</span> <span class="o">=</span> <span class="mi">33789</span><span class="o">;</span>
 
-    <span class="n">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="p">)</span> <span class="n">throws</span> <span class="n">IOException</span> <span class="p">{</span>
-        <span class="n">ImageServerIoHandler</span> <span class="n">handler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageServerIoHandler</span><span class="p">();</span>
-        <span class="n">NioSocketAcceptor</span> <span class="n">acceptor</span> <span class="o">=</span> <span class="k">new</span> <span class="n">NioSocketAcceptor</span><span class="p">();</span>
-        <span class="n">acceptor</span><span class="o">.</span><span class="n">getFilterChain</span><span class="p">()</span><span class="o">.</span><span class="n">addLast</span><span class="p">(</span><span class="s">&quot;protocol&quot;</span><span class="p">,</span> <span class="k">new</span> <span class="n">ProtocolCodecFilter</span><span class="p">(</span><span class="k">new</span> <span class="n">ImageCodecFactory</span><span class="p">(</span><span class="n">false</span><span class="p">)));</span>
-        <span class="n">acceptor</span><span class="o">.</span><span class="n">setLocalAddress</span><span class="p">(</span><span class="k">new</span> <span class="n">InetSocketAddress</span><span class="p">(</span><span class="n">PORT</span><span class="p">));</span>
-        <span class="n">acceptor</span><span class="o">.</span><span class="n">setHandler</span><span class="p">(</span><span class="n">handler</span><span class="p">);</span>
-        <span class="n">acceptor</span><span class="o">.</span><span class="nb">bind</span><span class="p">();</span>
-        <span class="n">System</span><span class="o">.</span><span class="n">out</span><span class="o">.</span><span class="n">println</span><span class="p">(</span><span class="s">&quot;server is listenig at port &quot;</span> <span class="o">+</span> <span class="n">PORT</span><span class="p">);</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="o">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">args</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">IOException</span> <span class="o">{</span>
+        <span class="n">ImageServerIoHandler</span> <span class="n">handler</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageServerIoHandler</span><span class="o">();</span>
+        <span class="n">NioSocketAcceptor</span> <span class="n">acceptor</span> <span class="o">=</span> <span class="k">new</span> <span class="n">NioSocketAcceptor</span><span class="o">();</span>
+        <span class="n">acceptor</span><span class="o">.</span><span class="na">getFilterChain</span><span class="o">().</span><span class="na">addLast</span><span class="o">(</span><span class="s">&quot;protocol&quot;</span><span class="o">,</span> <span class="k">new</span> <span class="n">ProtocolCodecFilter</span><span class="o">(</span><span class="k">new</span> <span class="n">ImageCodecFactory</span><span class="o">(</span><span class="kc">false</span><span class="o">)));</span>
+        <span class="n">acceptor</span><span class="o">.</span><span class="na">setLocalAddress</span><span class="o">(</span><span class="k">new</span> <span class="n">InetSocketAddress</span><span class="o">(</span><span class="n">PORT</span><span class="o">));</span>
+        <span class="n">acceptor</span><span class="o">.</span><span class="na">setHandler</span><span class="o">(</span><span class="n">handler</span><span class="o">);</span>
+        <span class="n">acceptor</span><span class="o">.</span><span class="na">bind</span><span class="o">();</span>
+        <span class="n">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">&quot;server is listenig at port &quot;</span> <span class="o">+</span> <span class="n">PORT</span><span class="o">);</span>
+    <span class="o">}</span>
+<span class="o">}</span>
 </pre></div>
 
 
 <p>Usage by the client is identical:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageClient</span> <span class="n">extends</span> <span class="n">IoHandlerAdapter</span> <span class="p">{</span>
-    <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="nb">int</span> <span class="n">CONNECT_TIMEOUT</span> <span class="o">=</span> <span class="mi">3000</span><span class="p">;</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageClient</span> <span class="kd">extends</span> <span class="n">IoHandlerAdapter</span> <span class="o">{</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="kt">int</span> <span class="n">CONNECT_TIMEOUT</span> <span class="o">=</span> <span class="mi">3000</span><span class="o">;</span>
 
-    <span class="n">private</span> <span class="n">String</span> <span class="n">host</span><span class="p">;</span>
-    <span class="n">private</span> <span class="nb">int</span> <span class="n">port</span><span class="p">;</span>
-    <span class="n">private</span> <span class="n">SocketConnector</span> <span class="n">connector</span><span class="p">;</span>
-    <span class="n">private</span> <span class="n">IoSession</span> <span class="n">session</span><span class="p">;</span>
-    <span class="n">private</span> <span class="n">ImageListener</span> <span class="n">imageListener</span><span class="p">;</span>
-
-    <span class="n">public</span> <span class="n">ImageClient</span><span class="p">(</span><span class="n">String</span> <span class="n">host</span><span class="p">,</span> <span class="nb">int</span> <span class="n">port</span><span class="p">,</span> <span class="n">ImageListener</span> <span class="n">imageListener</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">host</span> <span class="o">=</span> <span class="n">host</span><span class="p">;</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">port</span> <span class="o">=</span> <span class="n">port</span><span class="p">;</span>
-        <span class="n">this</span><span class="o">.</span><span class="n">imageListener</span> <span class="o">=</span> <span class="n">imageListener</span><span class="p">;</span>
-        <span class="n">connector</span> <span class="o">=</span> <span class="k">new</span> <span class="n">NioSocketConnector</span><span class="p">();</span>
-        <span class="n">connector</span><span class="o">.</span><span class="n">getFilterChain</span><span class="p">()</span><span class="o">.</span><span class="n">addLast</span><span class="p">(</span><span class="s">&quot;codec&quot;</span><span class="p">,</span> <span class="k">new</span> <span class="n">ProtocolCodecFilter</span><span class="p">(</span><span class="k">new</span> <span class="n">ImageCodecFactory</span><span class="p">(</span><span class="n">true</span><span class="p">)));</span>
-        <span class="n">connector</span><span class="o">.</span><span class="n">setHandler</span><span class="p">(</span><span class="n">this</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">Object</span> <span class="n">message</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">ImageResponse</span> <span class="n">response</span> <span class="o">=</span> <span class="p">(</span><span class="n">ImageResponse</span><span class="p">)</span> <span class="n">message</span><span class="p">;</span>
-        <span class="n">imageListener</span><span class="o">.</span><span class="n">onImages</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">getImage1</span><span class="p">(),</span> <span class="n">response</span><span class="o">.</span><span class="n">getImage2</span><span class="p">());</span>
-    <span class="p">}</span>
+    <span class="kd">private</span> <span class="n">String</span> <span class="n">host</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="kt">int</span> <span class="n">port</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">SocketConnector</span> <span class="n">connector</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">IoSession</span> <span class="n">session</span><span class="o">;</span>
+    <span class="kd">private</span> <span class="n">ImageListener</span> <span class="n">imageListener</span><span class="o">;</span>
+
+    <span class="kd">public</span> <span class="nf">ImageClient</span><span class="o">(</span><span class="n">String</span> <span class="n">host</span><span class="o">,</span> <span class="kt">int</span> <span class="n">port</span><span class="o">,</span> <span class="n">ImageListener</span> <span class="n">imageListener</span><span class="o">)</span> <span class="o">{</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">host</span> <span class="o">=</span> <span class="n">host</span><span class="o">;</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">port</span> <span class="o">=</span> <span class="n">port</span><span class="o">;</span>
+        <span class="k">this</span><span class="o">.</span><span class="na">imageListener</span> <span class="o">=</span> <span class="n">imageListener</span><span class="o">;</span>
+        <span class="n">connector</span> <span class="o">=</span> <span class="k">new</span> <span class="n">NioSocketConnector</span><span class="o">();</span>
+        <span class="n">connector</span><span class="o">.</span><span class="na">getFilterChain</span><span class="o">().</span><span class="na">addLast</span><span class="o">(</span><span class="s">&quot;codec&quot;</span><span class="o">,</span> <span class="k">new</span> <span class="n">ProtocolCodecFilter</span><span class="o">(</span><span class="k">new</span> <span class="n">ImageCodecFactory</span><span class="o">(</span><span class="kc">true</span><span class="o">)));</span>
+        <span class="n">connector</span><span class="o">.</span><span class="na">setHandler</span><span class="o">(</span><span class="k">this</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">Object</span> <span class="n">message</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">ImageResponse</span> <span class="n">response</span> <span class="o">=</span> <span class="o">(</span><span class="n">ImageResponse</span><span class="o">)</span> <span class="n">message</span><span class="o">;</span>
+        <span class="n">imageListener</span><span class="o">.</span><span class="na">onImages</span><span class="o">(</span><span class="n">response</span><span class="o">.</span><span class="na">getImage1</span><span class="o">(),</span> <span class="n">response</span><span class="o">.</span><span class="na">getImage2</span><span class="o">());</span>
+    <span class="o">}</span>
     <span class="o">...</span>
 </pre></div>
 
 
 <p>For completeness, I will add the code for the server-side IoHandler:</p>
-<div class="codehilite"><pre><span class="n">public</span> <span class="n">class</span> <span class="n">ImageServerIoHandler</span> <span class="n">extends</span> <span class="n">IoHandlerAdapter</span> <span class="p">{</span>
+<div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ImageServerIoHandler</span> <span class="kd">extends</span> <span class="n">IoHandlerAdapter</span> <span class="o">{</span>
 
-    <span class="n">private</span> <span class="n">final</span> <span class="n">static</span> <span class="n">String</span> <span class="n">characters</span> <span class="o">=</span> <span class="s">&quot;mina rocks abcdefghijklmnopqrstuvwxyz0123456789&quot;</span><span class="p">;</span>
+    <span class="kd">private</span> <span class="kd">final</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">characters</span> <span class="o">=</span> <span class="s">&quot;mina rocks abcdefghijklmnopqrstuvwxyz0123456789&quot;</span><span class="o">;</span>
 
-    <span class="n">public</span> <span class="n">static</span> <span class="n">final</span> <span class="n">String</span> <span class="n">INDEX_KEY</span> <span class="o">=</span> <span class="n">ImageServerIoHandler</span><span class="o">.</span><span class="n">class</span><span class="o">.</span><span class="n">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;.INDEX&quot;</span><span class="p">;</span>
+    <span class="kd">public</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">String</span> <span class="n">INDEX_KEY</span> <span class="o">=</span> <span class="n">ImageServerIoHandler</span><span class="o">.</span><span class="na">class</span><span class="o">.</span><span class="na">getName</span><span class="o">()</span> <span class="o">+</span> <span class="s">&quot;.INDEX&quot;</span><span class="o">;</span>
 
-    <span class="n">private</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">getClass</span><span class="p">());</span>
+    <span class="kd">private</span> <span class="n">Logger</span> <span class="n">logger</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="k">this</span><span class="o">.</span><span class="na">getClass</span><span class="o">());</span>
 
-    <span class="n">public</span> <span class="n">void</span> <span class="n">sessionOpened</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">session</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="n">INDEX_KEY</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="n">void</span> <span class="n">exceptionCaught</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">Throwable</span> <span class="n">cause</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">IoSessionLogger</span> <span class="n">sessionLogger</span> <span class="o">=</span> <span class="n">IoSessionLogger</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">logger</span><span class="p">);</span>
-        <span class="n">sessionLogger</span><span class="o">.</span><span class="nb">warn</span><span class="p">(</span><span class="n">cause</span><span class="o">.</span><span class="n">getMessage</span><span class="p">(),</span> <span class="n">cause</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="n">public</span> <span class="n">void</span> <span class="n">messageReceived</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="n">Object</span> <span class="n">message</span><span class="p">)</span> <span class="n">throws</span> <span class="n">Exception</span> <span class="p">{</span>
-        <span class="n">ImageRequest</span> <span class="n">request</span> <span class="o">=</span> <span class="p">(</span><span class="n">ImageRequest</span><span class="p">)</span> <span class="n">message</span><span class="p">;</span>
-        <span class="n">String</span> <span class="n">text1</span> <span class="o">=</span> <span class="n">generateString</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">getNumberOfCharacters</span><span class="p">());</span>
-        <span class="n">String</span> <span class="n">text2</span> <span class="o">=</span> <span class="n">generateString</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">getNumberOfCharacters</span><span class="p">());</span>
-        <span class="n">BufferedImage</span> <span class="n">image1</span> <span class="o">=</span> <span class="n">createImage</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">text1</span><span class="p">);</span>
-        <span class="n">BufferedImage</span> <span class="n">image2</span> <span class="o">=</span> <span class="n">createImage</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">text2</span><span class="p">);</span>
-        <span class="n">ImageResponse</span> <span class="n">response</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponse</span><span class="p">(</span><span class="n">image1</span><span class="p">,</span> <span class="n">image2</span><span class="p">);</span>
-        <span class="n">session</span><span class="o">.</span><span class="nb">write</span><span class="p">(</span><span class="n">response</span><span class="p">);</span>
-    <span class="p">}</span>
-
-    <span class="n">private</span> <span class="n">BufferedImage</span> <span class="n">createImage</span><span class="p">(</span><span class="n">ImageRequest</span> <span class="n">request</span><span class="p">,</span> <span class="n">String</span> <span class="n">text</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">BufferedImage</span> <span class="n">image</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BufferedImage</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">getWidth</span><span class="p">(),</span> <span class="n">request</span><span class="o">.</span><span class="n">getHeight</span><span class="p">(),</span> <span class="n">BufferedImage</span><span class="o">.</span><span class="n">TYPE_BYTE_INDEXED</span><span class="p">);</span>
-        <span class="n">Graphics</span> <span class="n">graphics</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">createGraphics</span><span class="p">();</span>
-        <span class="n">graphics</span><span class="o">.</span><span class="n">setColor</span><span class="p">(</span><span class="n">Color</span><span class="o">.</span><span class="n">YELLOW</span><span class="p">);</span>
-        <span class="n">graphics</span><span class="o">.</span><span class="n">fillRect</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">image</span><span class="o">.</span><span class="n">getWidth</span><span class="p">(),</span> <span class="n">image</span><span class="o">.</span><span class="n">getHeight</span><span class="p">());</span>
-        <span class="n">Font</span> <span class="n">serif</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Font</span><span class="p">(</span><span class="s">&quot;serif&quot;</span><span class="p">,</span> <span class="n">Font</span><span class="o">.</span><span class="n">PLAIN</span><span class="p">,</span> <span class="mi">30</span><span class="p">);</span>
-        <span class="n">graphics</span><span class="o">.</span><span class="n">setFont</span><span class="p">(</span><span class="n">serif</span><span class="p">);</span>
-        <span class="n">graphics</span><span class="o">.</span><span class="n">setColor</span><span class="p">(</span><span class="n">Color</span><span class="o">.</span><span class="n">BLUE</span><span class="p">);</span>
-        <span class="n">graphics</span><span class="o">.</span><span class="n">drawString</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">50</span><span class="p">);</span>
-        <span class="k">return</span> <span class="n">image</span><span class="p">;</span>
-    <span class="p">}</span>
-
-    <span class="n">private</span> <span class="n">String</span> <span class="n">generateString</span><span class="p">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="p">,</span> <span class="nb">int</span> <span class="nb">length</span><span class="p">)</span> <span class="p">{</span>
-        <span class="n">Integer</span> <span class="nb">index</span> <span class="o">=</span> <span class="p">(</span><span class="n">Integer</span><span class="p">)</span> <span class="n">session</span><span class="o">.</span><span class="n">getAttribute</span><span class="p">(</span><span class="n">INDEX_KEY</span><span class="p">);</span>
-        <span class="n">StringBuffer</span> <span class="n">buffer</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StringBuffer</span><span class="p">(</span><span class="nb">length</span><span class="p">);</span>
-
-        <span class="k">while</span> <span class="p">(</span><span class="n">buffer</span><span class="o">.</span><span class="nb">length</span><span class="p">()</span> <span class="o">&lt;</span> <span class="nb">length</span><span class="p">)</span> <span class="p">{</span>
-            <span class="n">buffer</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">characters</span><span class="o">.</span><span class="n">charAt</span><span class="p">(</span><span class="nb">index</span><span class="p">));</span>
-            <span class="nb">index</span><span class="o">++</span><span class="p">;</span>
-            <span class="k">if</span> <span class="p">(</span><span class="nb">index</span> <span class="o">&gt;=</span> <span class="n">characters</span><span class="o">.</span><span class="nb">length</span><span class="p">())</span> <span class="p">{</span>
-                <span class="nb">index</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
-            <span class="p">}</span>
-        <span class="p">}</span>
-        <span class="n">session</span><span class="o">.</span><span class="n">setAttribute</span><span class="p">(</span><span class="n">INDEX_KEY</span><span class="p">,</span> <span class="nb">index</span><span class="p">);</span>
-        <span class="k">return</span> <span class="n">buffer</span><span class="o">.</span><span class="n">toString</span><span class="p">();</span>
-    <span class="p">}</span>
-<span class="p">}</span>
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">sessionOpened</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">session</span><span class="o">.</span><span class="na">setAttribute</span><span class="o">(</span><span class="n">INDEX_KEY</span><span class="o">,</span> <span class="mi">0</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">exceptionCaught</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">Throwable</span> <span class="n">cause</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">IoSessionLogger</span> <span class="n">sessionLogger</span> <span class="o">=</span> <span class="n">IoSessionLogger</span><span class="o">.</span><span class="na">getLogger</span><span class="o">(</span><span class="n">session</span><span class="o">,</span> <span class="n">logger</span><span class="o">);</span>
+        <span class="n">sessionLogger</span><span class="o">.</span><span class="na">warn</span><span class="o">(</span><span class="n">cause</span><span class="o">.</span><span class="na">getMessage</span><span class="o">(),</span> <span class="n">cause</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">messageReceived</span><span class="o">(</span><span class="n">IoSession</span> <span class="n">session</span><span class="o">,</span> <span class="n">Object</span> <span class="n">message</span><span class="o">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="o">{</span>
+        <span class="n">ImageRequest</span> <span class="n">request</span> <span class="o">=</span> <span class="o">(</span><span class="n">ImageRequest</span><span class="o">)</span> <span class="n">message</span><span class="o">;</span>
+        <span class="n">String</span> <span class="n">text1</span> <span class="o">=</span> <span class="n">generateString</span><span class="o">(</span><span class="n">session</span><span class="o">,</span> <span class="n">request</span><span class="o">.</span><span class="na">getNumberOfCharacters</span><span class="o">());</span>
+        <span class="n">String</span> <span class="n">text2</span> <span class="o">=</span> <span class="n">generateString</span><span class="o">(</span><span class="n">session</span><span class="o">,</span> <span class="n">request</span><span class="o">.</span><span class="na">getNumberOfCharacters</span><span class="o">());</span>
+        <span class="n">BufferedImage</span> <span class="n">image1</span> <span class="o">=</span> <span class="n">createImage</span><span class="o">(</span><span class="n">request</span><span class="o">,</span> <span class="n">text1</span><span class="o">);</span>
+        <span class="n">BufferedImage</span> <span class="n">image2</span> <span class="o">=</span> <span class="n">createImage</span><span class="o">(</span><span class="n">request</span><span class="o">,</span> <span class="n">text2</span><span class="o">);</span>
+        <span class="n">ImageResponse</span> <span class="n">response</span> <span class="o">=</span> <span class="k">new</span> <span class="n">ImageResponse</span><span class="o">(</span><span class="n">image1</span><span class="o">,</span> <span class="n">image2</span><span class="o">);</span>
+        <span class="n">session</span><span class="o">.</span><span class="na">write</span><span class="o">(</span><span class="n">response</span><span class="o">);</span>
+    <span class="o">}</span>
+
+    <span class="kd">private</span> <span class="n">BufferedImage</span> <span class="nf">createImage</span><span class="o">(</span><span class="n">ImageRequest</span> <span class="n">request</span><span class="o">,</span> <span class="n">String</span> <span class="n">text</span><span class="o">)</span> <span class="o">{</span>
+        <span class="n">BufferedImage</span> <span class="n">image</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BufferedImage</span><span class="o">(</span><span class="n">request</span><span class="o">.</span><span class="na">getWidth</span><span class="o">(),</span> <span class="n">request</span><span class="o">.</span><span class="na">getHeight</span><span class="o">(),</span> <span class="n">BufferedImage</span><span class="o">.</span><span class="na">TYPE_BYTE_INDEXED</span><span class="o">);</span>
+        <span class="n">Graphics</span> <span class="n">graphics</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="na">createGraphics</span><span class="o">();</span>
+        <span class="n">graphics</span><span class="o">.</span><span class="na">setColor</span><span class="o">(</span><span class="n">Color</span><span class="o">.</span><span class="na">YELLOW</span><span class="o">);</span>
+        <span class="n">graphics</span><span class="o">.</span><span class="na">fillRect</span><span class="o">(</span><span class="mi">0</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">image</span><span class="o">.</span><span class="na">getWidth</span><span class="o">(),</span> <span class="n">image</span><span class="o">.</span><span class="na">getHeight</span><span class="o">());</span>
+        <span class="n">Font</span> <span class="n">serif</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Font</span><span class="o">(</span><span class="s">&quot;serif&quot;</span><span class="o">,</span> <span class="n">Font</span><span class="o">.</span><span class="na">PLAIN</span><span class="o">,</span> <span class="mi">30</span><span class="o">);</span>
+        <span class="n">graphics</span><span class="o">.</span><span class="na">setFont</span><span class="o">(</span><span class="n">serif</span><span class="o">);</span>
+        <span class="n">graphics</span><span class="o">.</span><span class="na">setColor</span><span class="o">(</span><span class="n">Color</span><span class="o">.</span><span class="na">BLUE</span><span class="o">);</span>
+        <span class="n">graphics</span><span class="o">.</span><span class="na">drawString</span><span class="o">(</span><span class="n">text</span><span class="o">,</span> <span class="mi">10</span><span class="o">,</span> <span class="mi">50</span><span class="o">);</span>
+        <span class="k">return</span> <span class="n">image</span><span class="o">;</span>
+    <span class="o">}</span>
+

[... 19 lines stripped ...]