<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>AbstractBindTest xref</title>
<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
</head>
<body>
<pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> *  Licensed to the Apache Software Foundation (ASF) under one</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> *  or more contributor license agreements.  See the NOTICE file</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> *  distributed with this work for additional information</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> *  regarding copyright ownership.  The ASF licenses this file</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> *  to you under the Apache License, Version 2.0 (the</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> *  "License"); you may not use this file except in compliance</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> *  with the License.  You may obtain a copy of the License at</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *</em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> *    <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> *</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> *  Unless required by applicable law or agreed to in writing,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> *  software distributed under the License is distributed on an</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> *  KIND, either express or implied.  See the License for the</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> *  specific language governing permissions and limitations</em>
<a name="17" href="#17">17</a>  <em class="jxr_comment"> *  under the License.</em>
<a name="18" href="#18">18</a>  <em class="jxr_comment"> *</em>
<a name="19" href="#19">19</a>  <em class="jxr_comment"> */</em>
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">package</strong> org.apache.mina.transport;
<a name="21" href="#21">21</a>  
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
<a name="23" href="#23">23</a>  <strong class="jxr_keyword">import</strong> java.net.SocketAddress;
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
<a name="25" href="#25">25</a>  
<a name="26" href="#26">26</a>  <strong class="jxr_keyword">import</strong> junit.framework.TestCase;
<a name="27" href="#27">27</a>  
<a name="28" href="#28">28</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.buffer.IoBuffer;
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.future.ConnectFuture;
<a name="30" href="#30">30</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.service.IoAcceptor;
<a name="31" href="#31">31</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.service.IoConnector;
<a name="32" href="#32">32</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.service.IoHandlerAdapter;
<a name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.session.IdleStatus;
<a name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.core.session.IoSession;
<a name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.transport.socket.DatagramAcceptor;
<a name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.transport.socket.DatagramSessionConfig;
<a name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.transport.socket.SocketAcceptor;
<a name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> org.apache.mina.transport.socket.SocketSessionConfig;
<a name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
<a name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
<a name="41" href="#41">41</a>  
<a name="42" href="#42">42</a>  <em class="jxr_javadoccomment">/**</em>
<a name="43" href="#43">43</a>  <em class="jxr_javadoccomment"> * Tests {@link IoAcceptor} resource leakage by repeating bind and unbind.</em>
<a name="44" href="#44">44</a>  <em class="jxr_javadoccomment"> *</em>
<a name="45" href="#45">45</a>  <em class="jxr_javadoccomment"> * @author The Apache MINA Project (dev@mina.apache.org)</em>
<a name="46" href="#46">46</a>  <em class="jxr_javadoccomment"> * @version $Rev: 755169 $, $Date: 2009-03-17 10:45:33 +0100 (Tue, 17 Mar 2009) $</em>
<a name="47" href="#47">47</a>  <em class="jxr_javadoccomment"> */</em>
<a name="48" href="#48">48</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../org/apache/mina/transport/AbstractBindTest.html">AbstractBindTest</a> <strong class="jxr_keyword">extends</strong> TestCase {
<a name="49" href="#49">49</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">final</strong> IoAcceptor acceptor;
<a name="50" href="#50">50</a>  
<a name="51" href="#51">51</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> port;
<a name="52" href="#52">52</a>  
<a name="53" href="#53">53</a>      <strong class="jxr_keyword">public</strong> <a href="../../../../org/apache/mina/transport/AbstractBindTest.html">AbstractBindTest</a>(IoAcceptor acceptor) {
<a name="54" href="#54">54</a>          <strong class="jxr_keyword">this</strong>.acceptor = acceptor;
<a name="55" href="#55">55</a>      }
<a name="56" href="#56">56</a>  
<a name="57" href="#57">57</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> SocketAddress createSocketAddress(<strong class="jxr_keyword">int</strong> port);
<a name="58" href="#58">58</a>  
<a name="59" href="#59">59</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> <strong class="jxr_keyword">int</strong> getPort(SocketAddress address);
<a name="60" href="#60">60</a>  
<a name="61" href="#61">61</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">abstract</strong> IoConnector newConnector();
<a name="62" href="#62">62</a>  
<a name="63" href="#63">63</a>      <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> bind(<strong class="jxr_keyword">boolean</strong> reuseAddress) <strong class="jxr_keyword">throws</strong> IOException {
<a name="64" href="#64">64</a>          acceptor.setHandler(<strong class="jxr_keyword">new</strong> <a href="../../../../org/apache/mina/transport/AbstractBindTest.html">EchoProtocolHandler</a>());
<a name="65" href="#65">65</a>  
<a name="66" href="#66">66</a>          setReuseAddress(reuseAddress);
<a name="67" href="#67">67</a>  
<a name="68" href="#68">68</a>          <em class="jxr_comment">// Find an available test port and bind to it.</em>
<a name="69" href="#69">69</a>          <strong class="jxr_keyword">boolean</strong> socketBound = false;
<a name="70" href="#70">70</a>  
<a name="71" href="#71">71</a>          <em class="jxr_comment">// Let's start from port #1 to detect possible resource leak</em>
<a name="72" href="#72">72</a>          <em class="jxr_comment">// because test will fail in port 1-1023 if user run this test</em>
<a name="73" href="#73">73</a>          <em class="jxr_comment">// as a normal user.</em>
<a name="74" href="#74">74</a>          <strong class="jxr_keyword">for</strong> (port = 1; port &lt;= 65535; port++) {
<a name="75" href="#75">75</a>              socketBound = false;
<a name="76" href="#76">76</a>              <strong class="jxr_keyword">try</strong> {
<a name="77" href="#77">77</a>                  acceptor.setDefaultLocalAddress(createSocketAddress(port));
<a name="78" href="#78">78</a>                  acceptor.bind();
<a name="79" href="#79">79</a>                  socketBound = <strong class="jxr_keyword">true</strong>;
<a name="80" href="#80">80</a>                  <strong class="jxr_keyword">break</strong>;
<a name="81" href="#81">81</a>              } <strong class="jxr_keyword">catch</strong> (IOException e) {
<a name="82" href="#82">82</a>                  <em class="jxr_comment">//System.out.println(e.getMessage());</em>
<a name="83" href="#83">83</a>              }
<a name="84" href="#84">84</a>          }
<a name="85" href="#85">85</a>  
<a name="86" href="#86">86</a>          <em class="jxr_comment">// If there is no port available, test fails.</em>
<a name="87" href="#87">87</a>          <strong class="jxr_keyword">if</strong> (!socketBound) {
<a name="88" href="#88">88</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Cannot bind any test port."</span>);
<a name="89" href="#89">89</a>          }
<a name="90" href="#90">90</a>  
<a name="91" href="#91">91</a>          <em class="jxr_comment">//System.out.println( "Using port " + port + " for testing." );</em>
<a name="92" href="#92">92</a>      }
<a name="93" href="#93">93</a>  
<a name="94" href="#94">94</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> setReuseAddress(<strong class="jxr_keyword">boolean</strong> reuseAddress) {
<a name="95" href="#95">95</a>          <strong class="jxr_keyword">if</strong> (acceptor instanceof DatagramAcceptor) {
<a name="96" href="#96">96</a>              ((DatagramSessionConfig) acceptor.getSessionConfig())
<a name="97" href="#97">97</a>                      .setReuseAddress(reuseAddress);
<a name="98" href="#98">98</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (acceptor instanceof SocketAcceptor) {
<a name="99" href="#99">99</a>              ((SocketAcceptor) acceptor).setReuseAddress(reuseAddress);
<a name="100" href="#100">100</a>         }
<a name="101" href="#101">101</a>     }
<a name="102" href="#102">102</a> 
<a name="103" href="#103">103</a>     @Override
<a name="104" href="#104">104</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> tearDown() {
<a name="105" href="#105">105</a>         <strong class="jxr_keyword">try</strong> {
<a name="106" href="#106">106</a>             acceptor.dispose();
<a name="107" href="#107">107</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="108" href="#108">108</a>             <em class="jxr_comment">// ignore</em>
<a name="109" href="#109">109</a>         }
<a name="110" href="#110">110</a> 
<a name="111" href="#111">111</a>         acceptor.setDefaultLocalAddress(<strong class="jxr_keyword">null</strong>);
<a name="112" href="#112">112</a>     }
<a name="113" href="#113">113</a> 
<a name="114" href="#114">114</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testAnonymousBind() <strong class="jxr_keyword">throws</strong> Exception {
<a name="115" href="#115">115</a>         acceptor.setHandler(<strong class="jxr_keyword">new</strong> IoHandlerAdapter());
<a name="116" href="#116">116</a>         acceptor.setDefaultLocalAddress(<strong class="jxr_keyword">null</strong>);
<a name="117" href="#117">117</a>         acceptor.bind();
<a name="118" href="#118">118</a>         assertNotNull(acceptor.getLocalAddress());
<a name="119" href="#119">119</a>         acceptor.unbind(acceptor.getLocalAddress());
<a name="120" href="#120">120</a>         assertNull(acceptor.getLocalAddress());
<a name="121" href="#121">121</a>         acceptor.setDefaultLocalAddress(createSocketAddress(0));
<a name="122" href="#122">122</a>         acceptor.bind();
<a name="123" href="#123">123</a>         assertNotNull(acceptor.getLocalAddress());
<a name="124" href="#124">124</a>         assertTrue(getPort(acceptor.getLocalAddress()) != 0);
<a name="125" href="#125">125</a>         acceptor.unbind(acceptor.getLocalAddress());
<a name="126" href="#126">126</a>     }
<a name="127" href="#127">127</a> 
<a name="128" href="#128">128</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testDuplicateBind() <strong class="jxr_keyword">throws</strong> IOException {
<a name="129" href="#129">129</a>         bind(false);
<a name="130" href="#130">130</a> 
<a name="131" href="#131">131</a>         <strong class="jxr_keyword">try</strong> {
<a name="132" href="#132">132</a>             acceptor.bind();
<a name="133" href="#133">133</a>             fail(<span class="jxr_string">"Exception is not thrown"</span>);
<a name="134" href="#134">134</a>         } <strong class="jxr_keyword">catch</strong> (Exception e) {
<a name="135" href="#135">135</a>             <em class="jxr_comment">// Signifies a successfull test case execution</em>
<a name="136" href="#136">136</a>             assertTrue(<strong class="jxr_keyword">true</strong>);
<a name="137" href="#137">137</a>         }
<a name="138" href="#138">138</a>     }
<a name="139" href="#139">139</a> 
<a name="140" href="#140">140</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testDuplicateUnbind() <strong class="jxr_keyword">throws</strong> IOException {
<a name="141" href="#141">141</a>         bind(false);
<a name="142" href="#142">142</a> 
<a name="143" href="#143">143</a>         <em class="jxr_comment">// this should succeed</em>
<a name="144" href="#144">144</a>         acceptor.unbind();
<a name="145" href="#145">145</a> 
<a name="146" href="#146">146</a>         <em class="jxr_comment">// this shouldn't fail</em>
<a name="147" href="#147">147</a>         acceptor.unbind();
<a name="148" href="#148">148</a>     }
<a name="149" href="#149">149</a> 
<a name="150" href="#150">150</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testManyTimes() <strong class="jxr_keyword">throws</strong> IOException {
<a name="151" href="#151">151</a>         bind(<strong class="jxr_keyword">true</strong>);
<a name="152" href="#152">152</a> 
<a name="153" href="#153">153</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 1024; i++) {
<a name="154" href="#154">154</a>             acceptor.unbind();
<a name="155" href="#155">155</a>             acceptor.bind();
<a name="156" href="#156">156</a>         }
<a name="157" href="#157">157</a>     }
<a name="158" href="#158">158</a> 
<a name="159" href="#159">159</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testUnbindDisconnectsClients() <strong class="jxr_keyword">throws</strong> Exception {
<a name="160" href="#160">160</a>         bind(<strong class="jxr_keyword">true</strong>);
<a name="161" href="#161">161</a>         IoConnector connector = newConnector();
<a name="162" href="#162">162</a>         IoSession[] sessions = <strong class="jxr_keyword">new</strong> IoSession[5];
<a name="163" href="#163">163</a>         connector.setHandler(<strong class="jxr_keyword">new</strong> IoHandlerAdapter());
<a name="164" href="#164">164</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; sessions.length; i++) {
<a name="165" href="#165">165</a>             ConnectFuture future = connector.connect(createSocketAddress(port));
<a name="166" href="#166">166</a>             future.awaitUninterruptibly();
<a name="167" href="#167">167</a>             sessions[i] = future.getSession();
<a name="168" href="#168">168</a>             assertTrue(sessions[i].isConnected());
<a name="169" href="#169">169</a>             assertTrue(sessions[i].write(IoBuffer.allocate(1)).awaitUninterruptibly().isWritten());
<a name="170" href="#170">170</a>         }
<a name="171" href="#171">171</a> 
<a name="172" href="#172">172</a>         <em class="jxr_comment">// Wait for the server side sessions to be created.</em>
<a name="173" href="#173">173</a>         Thread.sleep(500);
<a name="174" href="#174">174</a> 
<a name="175" href="#175">175</a>         Collection&lt;IoSession&gt; managedSessions = acceptor.getManagedSessions().values();
<a name="176" href="#176">176</a>         assertEquals(5, managedSessions.size());
<a name="177" href="#177">177</a> 
<a name="178" href="#178">178</a>         acceptor.unbind();
<a name="179" href="#179">179</a> 
<a name="180" href="#180">180</a>         <em class="jxr_comment">// Wait for the client side sessions to close.</em>
<a name="181" href="#181">181</a>         Thread.sleep(500);
<a name="182" href="#182">182</a> 
<a name="183" href="#183">183</a>         assertEquals(0, managedSessions.size());
<a name="184" href="#184">184</a>         <strong class="jxr_keyword">for</strong> (IoSession element : managedSessions) {
<a name="185" href="#185">185</a>             assertFalse(element.isConnected());
<a name="186" href="#186">186</a>         }
<a name="187" href="#187">187</a>     }
<a name="188" href="#188">188</a> 
<a name="189" href="#189">189</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testUnbindResume() <strong class="jxr_keyword">throws</strong> Exception {
<a name="190" href="#190">190</a>         bind(<strong class="jxr_keyword">true</strong>);
<a name="191" href="#191">191</a>         IoConnector connector = newConnector();
<a name="192" href="#192">192</a>         IoSession session = <strong class="jxr_keyword">null</strong>;
<a name="193" href="#193">193</a>         connector.setHandler(<strong class="jxr_keyword">new</strong> IoHandlerAdapter());
<a name="194" href="#194">194</a>         
<a name="195" href="#195">195</a>         ConnectFuture future = connector.connect(createSocketAddress(port));
<a name="196" href="#196">196</a>         future.awaitUninterruptibly();
<a name="197" href="#197">197</a>         session = future.getSession();
<a name="198" href="#198">198</a>         assertTrue(session.isConnected());
<a name="199" href="#199">199</a>         assertTrue(session.write(IoBuffer.allocate(1)).awaitUninterruptibly().isWritten());
<a name="200" href="#200">200</a> 
<a name="201" href="#201">201</a>         <em class="jxr_comment">// Wait for the server side session to be created.</em>
<a name="202" href="#202">202</a>         Thread.sleep(500);
<a name="203" href="#203">203</a> 
<a name="204" href="#204">204</a>         Collection&lt;IoSession&gt; managedSession = acceptor.getManagedSessions().values();
<a name="205" href="#205">205</a>         assertEquals(1, managedSession.size());
<a name="206" href="#206">206</a> 
<a name="207" href="#207">207</a>         acceptor.unbind();
<a name="208" href="#208">208</a> 
<a name="209" href="#209">209</a>         <em class="jxr_comment">// Wait for the client side sessions to close.</em>
<a name="210" href="#210">210</a>         Thread.sleep(500);
<a name="211" href="#211">211</a> 
<a name="212" href="#212">212</a>         assertEquals(0, managedSession.size());
<a name="213" href="#213">213</a>         <strong class="jxr_keyword">for</strong> (IoSession element : managedSession) {
<a name="214" href="#214">214</a>             assertFalse(element.isConnected());
<a name="215" href="#215">215</a>         }
<a name="216" href="#216">216</a>         
<a name="217" href="#217">217</a>         <em class="jxr_comment">// Rebind</em>
<a name="218" href="#218">218</a>         bind(<strong class="jxr_keyword">true</strong>);
<a name="219" href="#219">219</a>         
<a name="220" href="#220">220</a>         <em class="jxr_comment">// Check again the connection</em>
<a name="221" href="#221">221</a>         future = connector.connect(createSocketAddress(port));
<a name="222" href="#222">222</a>         future.awaitUninterruptibly();
<a name="223" href="#223">223</a>         session = future.getSession();
<a name="224" href="#224">224</a>         assertTrue(session.isConnected());
<a name="225" href="#225">225</a>         assertTrue(session.write(IoBuffer.allocate(1)).awaitUninterruptibly().isWritten());
<a name="226" href="#226">226</a> 
<a name="227" href="#227">227</a>         <em class="jxr_comment">// Wait for the server side session to be created.</em>
<a name="228" href="#228">228</a>         Thread.sleep(500);
<a name="229" href="#229">229</a> 
<a name="230" href="#230">230</a>         managedSession = acceptor.getManagedSessions().values();
<a name="231" href="#231">231</a>         assertEquals(1, managedSession.size());
<a name="232" href="#232">232</a>     }
<a name="233" href="#233">233</a> 
<a name="234" href="#234">234</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> _testRegressively() <strong class="jxr_keyword">throws</strong> IOException {
<a name="235" href="#235">235</a>         setReuseAddress(<strong class="jxr_keyword">true</strong>);
<a name="236" href="#236">236</a> 
<a name="237" href="#237">237</a>         SocketAddress addr = createSocketAddress(port);
<a name="238" href="#238">238</a>         <a href="../../../../org/apache/mina/transport/AbstractBindTest.html">EchoProtocolHandler</a> handler = <strong class="jxr_keyword">new</strong> <a href="../../../../org/apache/mina/transport/AbstractBindTest.html">EchoProtocolHandler</a>();
<a name="239" href="#239">239</a>         acceptor.setDefaultLocalAddress(addr);
<a name="240" href="#240">240</a>         acceptor.setHandler(handler);
<a name="241" href="#241">241</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 1048576; i++) {
<a name="242" href="#242">242</a>             acceptor.bind();
<a name="243" href="#243">243</a>             acceptor.unbind();
<a name="244" href="#244">244</a>             <em class="jxr_comment">//if (i % 100 == 0) {</em>
<a name="245" href="#245">245</a>                 <em class="jxr_comment">//System.out.println(i + " (" + new Date() + ")");</em>
<a name="246" href="#246">246</a>             <em class="jxr_comment">//}</em>
<a name="247" href="#247">247</a>         }
<a name="248" href="#248">248</a>         bind(false);
<a name="249" href="#249">249</a>     }
<a name="250" href="#250">250</a> 
<a name="251" href="#251">251</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../org/apache/mina/transport/AbstractBindTest.html">EchoProtocolHandler</a> <strong class="jxr_keyword">extends</strong> IoHandlerAdapter {
<a name="252" href="#252">252</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger log = LoggerFactory
<a name="253" href="#253">253</a>                 .getLogger(EchoProtocolHandler.<strong class="jxr_keyword">class</strong>);
<a name="254" href="#254">254</a> 
<a name="255" href="#255">255</a>         @Override
<a name="256" href="#256">256</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> sessionCreated(IoSession session) {
<a name="257" href="#257">257</a>             <strong class="jxr_keyword">if</strong> (session.getConfig() instanceof SocketSessionConfig) {
<a name="258" href="#258">258</a>                 ((SocketSessionConfig) session.getConfig())
<a name="259" href="#259">259</a>                         .setReceiveBufferSize(2048);
<a name="260" href="#260">260</a>             }
<a name="261" href="#261">261</a> 
<a name="262" href="#262">262</a>             session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
<a name="263" href="#263">263</a>         }
<a name="264" href="#264">264</a> 
<a name="265" href="#265">265</a>         @Override
<a name="266" href="#266">266</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> sessionIdle(IoSession session, IdleStatus status) {
<a name="267" href="#267">267</a>             log.info(<span class="jxr_string">"*** IDLE #"</span> + session.getIdleCount(IdleStatus.BOTH_IDLE)
<a name="268" href="#268">268</a>                     + <span class="jxr_string">" ***"</span>);
<a name="269" href="#269">269</a>         }
<a name="270" href="#270">270</a> 
<a name="271" href="#271">271</a>         @Override
<a name="272" href="#272">272</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> exceptionCaught(IoSession session, Throwable cause) {
<a name="273" href="#273">273</a>             <em class="jxr_comment">//cause.printStackTrace();</em>
<a name="274" href="#274">274</a>             session.close(<strong class="jxr_keyword">true</strong>);
<a name="275" href="#275">275</a>         }
<a name="276" href="#276">276</a> 
<a name="277" href="#277">277</a>         @Override
<a name="278" href="#278">278</a>         <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> messageReceived(IoSession session, Object message)
<a name="279" href="#279">279</a>                 <strong class="jxr_keyword">throws</strong> Exception {
<a name="280" href="#280">280</a>             <strong class="jxr_keyword">if</strong> (!(message instanceof IoBuffer)) {
<a name="281" href="#281">281</a>                 <strong class="jxr_keyword">return</strong>;
<a name="282" href="#282">282</a>             }
<a name="283" href="#283">283</a> 
<a name="284" href="#284">284</a>             IoBuffer rb = (IoBuffer) message;
<a name="285" href="#285">285</a>             <em class="jxr_comment">// Write the received data back to remote peer</em>
<a name="286" href="#286">286</a>             IoBuffer wb = IoBuffer.allocate(rb.remaining());
<a name="287" href="#287">287</a>             wb.put(rb);
<a name="288" href="#288">288</a>             wb.flip();
<a name="289" href="#289">289</a>             session.write(wb);
<a name="290" href="#290">290</a>         }
<a name="291" href="#291">291</a>     }
<a name="292" href="#292">292</a> }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

