<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> *  Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> *  or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> *  distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> *  regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> *  to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> *  "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> *  with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> *  Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> *  software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> *  KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> *  specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> *  under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> *<a name="line.18"></a>
<span class="sourceLineNo">019</span> */<a name="line.19"></a>
<span class="sourceLineNo">020</span>package org.apache.mina.core.session;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.io.File;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.io.FileInputStream;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.net.SocketAddress;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.nio.channels.FileChannel;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.Iterator;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.Queue;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.concurrent.ConcurrentLinkedQueue;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.mina.core.buffer.IoBuffer;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.mina.core.file.DefaultFileRegion;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.mina.core.file.FilenameFileRegion;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.mina.core.filterchain.IoFilterChain;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.mina.core.future.CloseFuture;<a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.mina.core.future.DefaultCloseFuture;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.mina.core.future.DefaultReadFuture;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.mina.core.future.DefaultWriteFuture;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.mina.core.future.IoFutureListener;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.mina.core.future.ReadFuture;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.mina.core.future.WriteFuture;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.mina.core.service.AbstractIoService;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.mina.core.service.IoAcceptor;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.mina.core.service.IoHandler;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.mina.core.service.IoProcessor;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.mina.core.service.IoService;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.mina.core.service.TransportMetadata;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.mina.core.write.DefaultWriteRequest;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.mina.core.write.WriteException;<a name="line.53"></a>
<span class="sourceLineNo">054</span>import org.apache.mina.core.write.WriteRequest;<a name="line.54"></a>
<span class="sourceLineNo">055</span>import org.apache.mina.core.write.WriteRequestQueue;<a name="line.55"></a>
<span class="sourceLineNo">056</span>import org.apache.mina.core.write.WriteTimeoutException;<a name="line.56"></a>
<span class="sourceLineNo">057</span>import org.apache.mina.core.write.WriteToClosedSessionException;<a name="line.57"></a>
<span class="sourceLineNo">058</span>import org.apache.mina.util.ExceptionMonitor;<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>/**<a name="line.60"></a>
<span class="sourceLineNo">061</span> * Base implementation of {@link IoSession}.<a name="line.61"></a>
<span class="sourceLineNo">062</span> * <a name="line.62"></a>
<span class="sourceLineNo">063</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.63"></a>
<span class="sourceLineNo">064</span> */<a name="line.64"></a>
<span class="sourceLineNo">065</span>public abstract class AbstractIoSession implements IoSession {<a name="line.65"></a>
<span class="sourceLineNo">066</span>    /** The associated handler */<a name="line.66"></a>
<span class="sourceLineNo">067</span>    private final IoHandler handler;<a name="line.67"></a>
<span class="sourceLineNo">068</span><a name="line.68"></a>
<span class="sourceLineNo">069</span>    /** The session config */<a name="line.69"></a>
<span class="sourceLineNo">070</span>    protected IoSessionConfig config;<a name="line.70"></a>
<span class="sourceLineNo">071</span><a name="line.71"></a>
<span class="sourceLineNo">072</span>    /** The service which will manage this session */<a name="line.72"></a>
<span class="sourceLineNo">073</span>    private final IoService service;<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>    private static final AttributeKey READY_READ_FUTURES_KEY = new AttributeKey(AbstractIoSession.class,<a name="line.75"></a>
<span class="sourceLineNo">076</span>            "readyReadFutures");<a name="line.76"></a>
<span class="sourceLineNo">077</span><a name="line.77"></a>
<span class="sourceLineNo">078</span>    private static final AttributeKey WAITING_READ_FUTURES_KEY = new AttributeKey(AbstractIoSession.class,<a name="line.78"></a>
<span class="sourceLineNo">079</span>            "waitingReadFutures");<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    private static final IoFutureListener&lt;CloseFuture&gt; SCHEDULED_COUNTER_RESETTER = new IoFutureListener&lt;CloseFuture&gt;() {<a name="line.81"></a>
<span class="sourceLineNo">082</span>        public void operationComplete(CloseFuture future) {<a name="line.82"></a>
<span class="sourceLineNo">083</span>            AbstractIoSession session = (AbstractIoSession) future.getSession();<a name="line.83"></a>
<span class="sourceLineNo">084</span>            session.scheduledWriteBytes.set(0);<a name="line.84"></a>
<span class="sourceLineNo">085</span>            session.scheduledWriteMessages.set(0);<a name="line.85"></a>
<span class="sourceLineNo">086</span>            session.readBytesThroughput = 0;<a name="line.86"></a>
<span class="sourceLineNo">087</span>            session.readMessagesThroughput = 0;<a name="line.87"></a>
<span class="sourceLineNo">088</span>            session.writtenBytesThroughput = 0;<a name="line.88"></a>
<span class="sourceLineNo">089</span>            session.writtenMessagesThroughput = 0;<a name="line.89"></a>
<span class="sourceLineNo">090</span>        }<a name="line.90"></a>
<span class="sourceLineNo">091</span>    };<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * An internal write request object that triggers session close.<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * <a name="line.95"></a>
<span class="sourceLineNo">096</span>     * @see #writeRequestQueue<a name="line.96"></a>
<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
<span class="sourceLineNo">098</span>    public static final WriteRequest CLOSE_REQUEST = new DefaultWriteRequest(new Object());<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>    /**<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * An internal write request object that triggers message sent events.<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * <a name="line.102"></a>
<span class="sourceLineNo">103</span>     * @see #writeRequestQueue<a name="line.103"></a>
<span class="sourceLineNo">104</span>     */<a name="line.104"></a>
<span class="sourceLineNo">105</span>    public static final WriteRequest MESSAGE_SENT_REQUEST = new DefaultWriteRequest(DefaultWriteRequest.EMPTY_MESSAGE);<a name="line.105"></a>
<span class="sourceLineNo">106</span><a name="line.106"></a>
<span class="sourceLineNo">107</span>    private final Object lock = new Object();<a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108"></a>
<span class="sourceLineNo">109</span>    private IoSessionAttributeMap attributes;<a name="line.109"></a>
<span class="sourceLineNo">110</span><a name="line.110"></a>
<span class="sourceLineNo">111</span>    private WriteRequestQueue writeRequestQueue;<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    private WriteRequest currentWriteRequest;<a name="line.113"></a>
<span class="sourceLineNo">114</span><a name="line.114"></a>
<span class="sourceLineNo">115</span>    /** The Session creation's time */<a name="line.115"></a>
<span class="sourceLineNo">116</span>    private final long creationTime;<a name="line.116"></a>
<span class="sourceLineNo">117</span><a name="line.117"></a>
<span class="sourceLineNo">118</span>    /** An id generator guaranteed to generate unique IDs for the session */<a name="line.118"></a>
<span class="sourceLineNo">119</span>    private static AtomicLong idGenerator = new AtomicLong(0);<a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
<span class="sourceLineNo">121</span>    /** The session ID */<a name="line.121"></a>
<span class="sourceLineNo">122</span>    private long sessionId;<a name="line.122"></a>
<span class="sourceLineNo">123</span><a name="line.123"></a>
<span class="sourceLineNo">124</span>    /**<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * A future that will be set 'closed' when the connection is closed.<a name="line.125"></a>
<span class="sourceLineNo">126</span>     */<a name="line.126"></a>
<span class="sourceLineNo">127</span>    private final CloseFuture closeFuture = new DefaultCloseFuture(this);<a name="line.127"></a>
<span class="sourceLineNo">128</span><a name="line.128"></a>
<span class="sourceLineNo">129</span>    private volatile boolean closing;<a name="line.129"></a>
<span class="sourceLineNo">130</span><a name="line.130"></a>
<span class="sourceLineNo">131</span>    // traffic control<a name="line.131"></a>
<span class="sourceLineNo">132</span>    private boolean readSuspended = false;<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>    private boolean writeSuspended = false;<a name="line.134"></a>
<span class="sourceLineNo">135</span><a name="line.135"></a>
<span class="sourceLineNo">136</span>    // Status variables<a name="line.136"></a>
<span class="sourceLineNo">137</span>    private final AtomicBoolean scheduledForFlush = new AtomicBoolean();<a name="line.137"></a>
<span class="sourceLineNo">138</span><a name="line.138"></a>
<span class="sourceLineNo">139</span>    private final AtomicInteger scheduledWriteBytes = new AtomicInteger();<a name="line.139"></a>
<span class="sourceLineNo">140</span><a name="line.140"></a>
<span class="sourceLineNo">141</span>    private final AtomicInteger scheduledWriteMessages = new AtomicInteger();<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>    private long readBytes;<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>    private long writtenBytes;<a name="line.145"></a>
<span class="sourceLineNo">146</span><a name="line.146"></a>
<span class="sourceLineNo">147</span>    private long readMessages;<a name="line.147"></a>
<span class="sourceLineNo">148</span><a name="line.148"></a>
<span class="sourceLineNo">149</span>    private long writtenMessages;<a name="line.149"></a>
<span class="sourceLineNo">150</span><a name="line.150"></a>
<span class="sourceLineNo">151</span>    private long lastReadTime;<a name="line.151"></a>
<span class="sourceLineNo">152</span><a name="line.152"></a>
<span class="sourceLineNo">153</span>    private long lastWriteTime;<a name="line.153"></a>
<span class="sourceLineNo">154</span><a name="line.154"></a>
<span class="sourceLineNo">155</span>    private long lastThroughputCalculationTime;<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>    private long lastReadBytes;<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>    private long lastWrittenBytes;<a name="line.159"></a>
<span class="sourceLineNo">160</span><a name="line.160"></a>
<span class="sourceLineNo">161</span>    private long lastReadMessages;<a name="line.161"></a>
<span class="sourceLineNo">162</span><a name="line.162"></a>
<span class="sourceLineNo">163</span>    private long lastWrittenMessages;<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>    private double readBytesThroughput;<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>    private double writtenBytesThroughput;<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>    private double readMessagesThroughput;<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>    private double writtenMessagesThroughput;<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>    private AtomicInteger idleCountForBoth = new AtomicInteger();<a name="line.173"></a>
<span class="sourceLineNo">174</span><a name="line.174"></a>
<span class="sourceLineNo">175</span>    private AtomicInteger idleCountForRead = new AtomicInteger();<a name="line.175"></a>
<span class="sourceLineNo">176</span><a name="line.176"></a>
<span class="sourceLineNo">177</span>    private AtomicInteger idleCountForWrite = new AtomicInteger();<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>    private long lastIdleTimeForBoth;<a name="line.179"></a>
<span class="sourceLineNo">180</span><a name="line.180"></a>
<span class="sourceLineNo">181</span>    private long lastIdleTimeForRead;<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>    private long lastIdleTimeForWrite;<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>    private boolean deferDecreaseReadBuffer = true;<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span>    /**<a name="line.187"></a>
<span class="sourceLineNo">188</span>     * Create a Session for a service<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * <a name="line.189"></a>
<span class="sourceLineNo">190</span>     * @param service the Service for this session<a name="line.190"></a>
<span class="sourceLineNo">191</span>     */<a name="line.191"></a>
<span class="sourceLineNo">192</span>    protected AbstractIoSession(IoService service) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>        this.service = service;<a name="line.193"></a>
<span class="sourceLineNo">194</span>        this.handler = service.getHandler();<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>        // Initialize all the Session counters to the current time<a name="line.196"></a>
<span class="sourceLineNo">197</span>        long currentTime = System.currentTimeMillis();<a name="line.197"></a>
<span class="sourceLineNo">198</span>        creationTime = currentTime;<a name="line.198"></a>
<span class="sourceLineNo">199</span>        lastThroughputCalculationTime = currentTime;<a name="line.199"></a>
<span class="sourceLineNo">200</span>        lastReadTime = currentTime;<a name="line.200"></a>
<span class="sourceLineNo">201</span>        lastWriteTime = currentTime;<a name="line.201"></a>
<span class="sourceLineNo">202</span>        lastIdleTimeForBoth = currentTime;<a name="line.202"></a>
<span class="sourceLineNo">203</span>        lastIdleTimeForRead = currentTime;<a name="line.203"></a>
<span class="sourceLineNo">204</span>        lastIdleTimeForWrite = currentTime;<a name="line.204"></a>
<span class="sourceLineNo">205</span><a name="line.205"></a>
<span class="sourceLineNo">206</span>        // TODO add documentation<a name="line.206"></a>
<span class="sourceLineNo">207</span>        closeFuture.addListener(SCHEDULED_COUNTER_RESETTER);<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>        // Set a new ID for this session<a name="line.209"></a>
<span class="sourceLineNo">210</span>        sessionId = idGenerator.incrementAndGet();<a name="line.210"></a>
<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
<span class="sourceLineNo">212</span><a name="line.212"></a>
<span class="sourceLineNo">213</span>    /**<a name="line.213"></a>
<span class="sourceLineNo">214</span>     * {@inheritDoc}<a name="line.214"></a>
<span class="sourceLineNo">215</span>     * <a name="line.215"></a>
<span class="sourceLineNo">216</span>     * We use an AtomicLong to guarantee that the session ID are unique.<a name="line.216"></a>
<span class="sourceLineNo">217</span>     */<a name="line.217"></a>
<span class="sourceLineNo">218</span>    public final long getId() {<a name="line.218"></a>
<span class="sourceLineNo">219</span>        return sessionId;<a name="line.219"></a>
<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>    /**<a name="line.222"></a>
<span class="sourceLineNo">223</span>     * @return The associated IoProcessor for this session<a name="line.223"></a>
<span class="sourceLineNo">224</span>     */<a name="line.224"></a>
<span class="sourceLineNo">225</span>    public abstract IoProcessor getProcessor();<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>    /**<a name="line.227"></a>
<span class="sourceLineNo">228</span>     * {@inheritDoc}<a name="line.228"></a>
<span class="sourceLineNo">229</span>     */<a name="line.229"></a>
<span class="sourceLineNo">230</span>    public final boolean isConnected() {<a name="line.230"></a>
<span class="sourceLineNo">231</span>        return !closeFuture.isClosed();<a name="line.231"></a>
<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
<span class="sourceLineNo">233</span><a name="line.233"></a>
<span class="sourceLineNo">234</span>    /**<a name="line.234"></a>
<span class="sourceLineNo">235</span>     * {@inheritDoc}<a name="line.235"></a>
<span class="sourceLineNo">236</span>     */<a name="line.236"></a>
<span class="sourceLineNo">237</span>    public boolean isActive() {<a name="line.237"></a>
<span class="sourceLineNo">238</span>        // Return true by default<a name="line.238"></a>
<span class="sourceLineNo">239</span>        return true;<a name="line.239"></a>
<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>    /**<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * {@inheritDoc}<a name="line.243"></a>
<span class="sourceLineNo">244</span>     */<a name="line.244"></a>
<span class="sourceLineNo">245</span>    public final boolean isClosing() {<a name="line.245"></a>
<span class="sourceLineNo">246</span>        return closing || closeFuture.isClosed();<a name="line.246"></a>
<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
<span class="sourceLineNo">248</span><a name="line.248"></a>
<span class="sourceLineNo">249</span>    /**<a name="line.249"></a>
<span class="sourceLineNo">250</span>     * {@inheritDoc}<a name="line.250"></a>
<span class="sourceLineNo">251</span>     */<a name="line.251"></a>
<span class="sourceLineNo">252</span>    public boolean isSecured() {<a name="line.252"></a>
<span class="sourceLineNo">253</span>        // Always false...<a name="line.253"></a>
<span class="sourceLineNo">254</span>        return false;<a name="line.254"></a>
<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
<span class="sourceLineNo">256</span><a name="line.256"></a>
<span class="sourceLineNo">257</span>    /**<a name="line.257"></a>
<span class="sourceLineNo">258</span>     * {@inheritDoc}<a name="line.258"></a>
<span class="sourceLineNo">259</span>     */<a name="line.259"></a>
<span class="sourceLineNo">260</span>    public final CloseFuture getCloseFuture() {<a name="line.260"></a>
<span class="sourceLineNo">261</span>        return closeFuture;<a name="line.261"></a>
<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
<span class="sourceLineNo">263</span><a name="line.263"></a>
<span class="sourceLineNo">264</span>    /**<a name="line.264"></a>
<span class="sourceLineNo">265</span>     * Tells if the session is scheduled for flushed<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * <a name="line.266"></a>
<span class="sourceLineNo">267</span>     * @return true if the session is scheduled for flush<a name="line.267"></a>
<span class="sourceLineNo">268</span>     */<a name="line.268"></a>
<span class="sourceLineNo">269</span>    public final boolean isScheduledForFlush() {<a name="line.269"></a>
<span class="sourceLineNo">270</span>        return scheduledForFlush.get();<a name="line.270"></a>
<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
<span class="sourceLineNo">272</span><a name="line.272"></a>
<span class="sourceLineNo">273</span>    /**<a name="line.273"></a>
<span class="sourceLineNo">274</span>     * Schedule the session for flushed<a name="line.274"></a>
<span class="sourceLineNo">275</span>     */<a name="line.275"></a>
<span class="sourceLineNo">276</span>    public final void scheduledForFlush() {<a name="line.276"></a>
<span class="sourceLineNo">277</span>        scheduledForFlush.set(true);<a name="line.277"></a>
<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>    /**<a name="line.280"></a>
<span class="sourceLineNo">281</span>     * Change the session's status : it's not anymore scheduled for flush<a name="line.281"></a>
<span class="sourceLineNo">282</span>     */<a name="line.282"></a>
<span class="sourceLineNo">283</span>    public final void unscheduledForFlush() {<a name="line.283"></a>
<span class="sourceLineNo">284</span>        scheduledForFlush.set(false);<a name="line.284"></a>
<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
<span class="sourceLineNo">286</span><a name="line.286"></a>
<span class="sourceLineNo">287</span>    /**<a name="line.287"></a>
<span class="sourceLineNo">288</span>     * Set the scheduledForFLush flag. As we may have concurrent access to this<a name="line.288"></a>
<span class="sourceLineNo">289</span>     * flag, we compare and set it in one call.<a name="line.289"></a>
<span class="sourceLineNo">290</span>     * <a name="line.290"></a>
<span class="sourceLineNo">291</span>     * @param schedule<a name="line.291"></a>
<span class="sourceLineNo">292</span>     *            the new value to set if not already set.<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * @return true if the session flag has been set, and if it wasn't set<a name="line.293"></a>
<span class="sourceLineNo">294</span>     *         already.<a name="line.294"></a>
<span class="sourceLineNo">295</span>     */<a name="line.295"></a>
<span class="sourceLineNo">296</span>    public final boolean setScheduledForFlush(boolean schedule) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>        if (schedule) {<a name="line.297"></a>
<span class="sourceLineNo">298</span>            // If the current tag is set to false, switch it to true,<a name="line.298"></a>
<span class="sourceLineNo">299</span>            // otherwise, we do nothing but return false : the session<a name="line.299"></a>
<span class="sourceLineNo">300</span>            // is already scheduled for flush<a name="line.300"></a>
<span class="sourceLineNo">301</span>            return scheduledForFlush.compareAndSet(false, schedule);<a name="line.301"></a>
<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
<span class="sourceLineNo">303</span><a name="line.303"></a>
<span class="sourceLineNo">304</span>        scheduledForFlush.set(schedule);<a name="line.304"></a>
<span class="sourceLineNo">305</span>        return true;<a name="line.305"></a>
<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
<span class="sourceLineNo">307</span><a name="line.307"></a>
<span class="sourceLineNo">308</span>    /**<a name="line.308"></a>
<span class="sourceLineNo">309</span>     * {@inheritDoc}<a name="line.309"></a>
<span class="sourceLineNo">310</span>     */<a name="line.310"></a>
<span class="sourceLineNo">311</span>    public final CloseFuture close(boolean rightNow) {<a name="line.311"></a>
<span class="sourceLineNo">312</span>        if (rightNow) {<a name="line.312"></a>
<span class="sourceLineNo">313</span>            return closeNow();<a name="line.313"></a>
<span class="sourceLineNo">314</span>        } else {<a name="line.314"></a>
<span class="sourceLineNo">315</span>            return closeOnFlush();<a name="line.315"></a>
<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>    /**<a name="line.319"></a>
<span class="sourceLineNo">320</span>     * {@inheritDoc}<a name="line.320"></a>
<span class="sourceLineNo">321</span>     */<a name="line.321"></a>
<span class="sourceLineNo">322</span>    public final CloseFuture close() {<a name="line.322"></a>
<span class="sourceLineNo">323</span>        return closeNow();<a name="line.323"></a>
<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
<span class="sourceLineNo">325</span><a name="line.325"></a>
<span class="sourceLineNo">326</span>    /**<a name="line.326"></a>
<span class="sourceLineNo">327</span>     * {@inheritDoc}<a name="line.327"></a>
<span class="sourceLineNo">328</span>     */<a name="line.328"></a>
<span class="sourceLineNo">329</span>    public final CloseFuture closeOnFlush() {<a name="line.329"></a>
<span class="sourceLineNo">330</span>        if (!isClosing()) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>            getWriteRequestQueue().offer(this, CLOSE_REQUEST);<a name="line.331"></a>
<span class="sourceLineNo">332</span>            getProcessor().flush(this);<a name="line.332"></a>
<span class="sourceLineNo">333</span>        }<a name="line.333"></a>
<span class="sourceLineNo">334</span>        <a name="line.334"></a>
<span class="sourceLineNo">335</span>        return closeFuture;<a name="line.335"></a>
<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
<span class="sourceLineNo">337</span><a name="line.337"></a>
<span class="sourceLineNo">338</span>    /**<a name="line.338"></a>
<span class="sourceLineNo">339</span>     * {@inheritDoc}<a name="line.339"></a>
<span class="sourceLineNo">340</span>     */<a name="line.340"></a>
<span class="sourceLineNo">341</span>    public final CloseFuture closeNow() {<a name="line.341"></a>
<span class="sourceLineNo">342</span>        synchronized (lock) {<a name="line.342"></a>
<span class="sourceLineNo">343</span>            if (isClosing()) {<a name="line.343"></a>
<span class="sourceLineNo">344</span>                return closeFuture;<a name="line.344"></a>
<span class="sourceLineNo">345</span>            }<a name="line.345"></a>
<span class="sourceLineNo">346</span><a name="line.346"></a>
<span class="sourceLineNo">347</span>            closing = true;<a name="line.347"></a>
<span class="sourceLineNo">348</span>            <a name="line.348"></a>
<span class="sourceLineNo">349</span>            try {<a name="line.349"></a>
<span class="sourceLineNo">350</span>                destroy();<a name="line.350"></a>
<span class="sourceLineNo">351</span>            } catch (Exception e) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>                IoFilterChain filterChain = getFilterChain();<a name="line.352"></a>
<span class="sourceLineNo">353</span>                filterChain.fireExceptionCaught(e);<a name="line.353"></a>
<span class="sourceLineNo">354</span>            }<a name="line.354"></a>
<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
<span class="sourceLineNo">356</span><a name="line.356"></a>
<span class="sourceLineNo">357</span>        getFilterChain().fireFilterClose();<a name="line.357"></a>
<span class="sourceLineNo">358</span><a name="line.358"></a>
<span class="sourceLineNo">359</span>        return closeFuture;<a name="line.359"></a>
<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
<span class="sourceLineNo">361</span>    <a name="line.361"></a>
<span class="sourceLineNo">362</span>    /**<a name="line.362"></a>
<span class="sourceLineNo">363</span>     * Destroy the session<a name="line.363"></a>
<span class="sourceLineNo">364</span>     */<a name="line.364"></a>
<span class="sourceLineNo">365</span>    protected void destroy() {<a name="line.365"></a>
<span class="sourceLineNo">366</span>        if (writeRequestQueue != null) {<a name="line.366"></a>
<span class="sourceLineNo">367</span>            while (!writeRequestQueue.isEmpty(this)) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>                WriteRequest writeRequest = writeRequestQueue.poll(this);<a name="line.368"></a>
<span class="sourceLineNo">369</span>                writeRequest.getFuture().setWritten();<a name="line.369"></a>
<span class="sourceLineNo">370</span>            }<a name="line.370"></a>
<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
<span class="sourceLineNo">372</span>    }<a name="line.372"></a>
<span class="sourceLineNo">373</span><a name="line.373"></a>
<span class="sourceLineNo">374</span>    /**<a name="line.374"></a>
<span class="sourceLineNo">375</span>     * {@inheritDoc}<a name="line.375"></a>
<span class="sourceLineNo">376</span>     */<a name="line.376"></a>
<span class="sourceLineNo">377</span>    public IoHandler getHandler() {<a name="line.377"></a>
<span class="sourceLineNo">378</span>        return handler;<a name="line.378"></a>
<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>    /**<a name="line.381"></a>
<span class="sourceLineNo">382</span>     * {@inheritDoc}<a name="line.382"></a>
<span class="sourceLineNo">383</span>     */<a name="line.383"></a>
<span class="sourceLineNo">384</span>    public IoSessionConfig getConfig() {<a name="line.384"></a>
<span class="sourceLineNo">385</span>        return config;<a name="line.385"></a>
<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
<span class="sourceLineNo">387</span><a name="line.387"></a>
<span class="sourceLineNo">388</span>    /**<a name="line.388"></a>
<span class="sourceLineNo">389</span>     * {@inheritDoc}<a name="line.389"></a>
<span class="sourceLineNo">390</span>     */<a name="line.390"></a>
<span class="sourceLineNo">391</span>    public final ReadFuture read() {<a name="line.391"></a>
<span class="sourceLineNo">392</span>        if (!getConfig().isUseReadOperation()) {<a name="line.392"></a>
<span class="sourceLineNo">393</span>            throw new IllegalStateException("useReadOperation is not enabled.");<a name="line.393"></a>
<span class="sourceLineNo">394</span>        }<a name="line.394"></a>
<span class="sourceLineNo">395</span><a name="line.395"></a>
<span class="sourceLineNo">396</span>        Queue&lt;ReadFuture&gt; readyReadFutures = getReadyReadFutures();<a name="line.396"></a>
<span class="sourceLineNo">397</span>        ReadFuture future;<a name="line.397"></a>
<span class="sourceLineNo">398</span>        synchronized (readyReadFutures) {<a name="line.398"></a>
<span class="sourceLineNo">399</span>            future = readyReadFutures.poll();<a name="line.399"></a>
<span class="sourceLineNo">400</span>            if (future != null) {<a name="line.400"></a>
<span class="sourceLineNo">401</span>                if (future.isClosed()) {<a name="line.401"></a>
<span class="sourceLineNo">402</span>                    // Let other readers get notified.<a name="line.402"></a>
<span class="sourceLineNo">403</span>                    readyReadFutures.offer(future);<a name="line.403"></a>
<span class="sourceLineNo">404</span>                }<a name="line.404"></a>
<span class="sourceLineNo">405</span>            } else {<a name="line.405"></a>
<span class="sourceLineNo">406</span>                future = new DefaultReadFuture(this);<a name="line.406"></a>
<span class="sourceLineNo">407</span>                getWaitingReadFutures().offer(future);<a name="line.407"></a>
<span class="sourceLineNo">408</span>            }<a name="line.408"></a>
<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
<span class="sourceLineNo">410</span><a name="line.410"></a>
<span class="sourceLineNo">411</span>        return future;<a name="line.411"></a>
<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
<span class="sourceLineNo">414</span>    /**<a name="line.414"></a>
<span class="sourceLineNo">415</span>     * Associates a message to a ReadFuture<a name="line.415"></a>
<span class="sourceLineNo">416</span>     * <a name="line.416"></a>
<span class="sourceLineNo">417</span>     * @param message the message to associate to the ReadFuture<a name="line.417"></a>
<span class="sourceLineNo">418</span>     * <a name="line.418"></a>
<span class="sourceLineNo">419</span>     */<a name="line.419"></a>
<span class="sourceLineNo">420</span>    public final void offerReadFuture(Object message) {<a name="line.420"></a>
<span class="sourceLineNo">421</span>        newReadFuture().setRead(message);<a name="line.421"></a>
<span class="sourceLineNo">422</span>    }<a name="line.422"></a>
<span class="sourceLineNo">423</span><a name="line.423"></a>
<span class="sourceLineNo">424</span>    /**<a name="line.424"></a>
<span class="sourceLineNo">425</span>     * Associates a failure to a ReadFuture<a name="line.425"></a>
<span class="sourceLineNo">426</span>     * <a name="line.426"></a>
<span class="sourceLineNo">427</span>     * @param exception the exception to associate to the ReadFuture<a name="line.427"></a>
<span class="sourceLineNo">428</span>     */<a name="line.428"></a>
<span class="sourceLineNo">429</span>    public final void offerFailedReadFuture(Throwable exception) {<a name="line.429"></a>
<span class="sourceLineNo">430</span>        newReadFuture().setException(exception);<a name="line.430"></a>
<span class="sourceLineNo">431</span>    }<a name="line.431"></a>
<span class="sourceLineNo">432</span><a name="line.432"></a>
<span class="sourceLineNo">433</span>    /**<a name="line.433"></a>
<span class="sourceLineNo">434</span>     * Inform the ReadFuture that the session has been closed<a name="line.434"></a>
<span class="sourceLineNo">435</span>     */<a name="line.435"></a>
<span class="sourceLineNo">436</span>    public final void offerClosedReadFuture() {<a name="line.436"></a>
<span class="sourceLineNo">437</span>        Queue&lt;ReadFuture&gt; readyReadFutures = getReadyReadFutures();<a name="line.437"></a>
<span class="sourceLineNo">438</span>        <a name="line.438"></a>
<span class="sourceLineNo">439</span>        synchronized (readyReadFutures) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>            newReadFuture().setClosed();<a name="line.440"></a>
<span class="sourceLineNo">441</span>        }<a name="line.441"></a>
<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>    /**<a name="line.444"></a>
<span class="sourceLineNo">445</span>     * @return a readFuture get from the waiting ReadFuture<a name="line.445"></a>
<span class="sourceLineNo">446</span>     */<a name="line.446"></a>
<span class="sourceLineNo">447</span>    private ReadFuture newReadFuture() {<a name="line.447"></a>
<span class="sourceLineNo">448</span>        Queue&lt;ReadFuture&gt; readyReadFutures = getReadyReadFutures();<a name="line.448"></a>
<span class="sourceLineNo">449</span>        Queue&lt;ReadFuture&gt; waitingReadFutures = getWaitingReadFutures();<a name="line.449"></a>
<span class="sourceLineNo">450</span>        ReadFuture future;<a name="line.450"></a>
<span class="sourceLineNo">451</span>        <a name="line.451"></a>
<span class="sourceLineNo">452</span>        synchronized (readyReadFutures) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>            future = waitingReadFutures.poll();<a name="line.453"></a>
<span class="sourceLineNo">454</span>            <a name="line.454"></a>
<span class="sourceLineNo">455</span>            if (future == null) {<a name="line.455"></a>
<span class="sourceLineNo">456</span>                future = new DefaultReadFuture(this);<a name="line.456"></a>
<span class="sourceLineNo">457</span>                readyReadFutures.offer(future);<a name="line.457"></a>
<span class="sourceLineNo">458</span>            }<a name="line.458"></a>
<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
<span class="sourceLineNo">460</span>        <a name="line.460"></a>
<span class="sourceLineNo">461</span>        return future;<a name="line.461"></a>
<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
<span class="sourceLineNo">464</span>    /**<a name="line.464"></a>
<span class="sourceLineNo">465</span>     * @return a queue of ReadFuture<a name="line.465"></a>
<span class="sourceLineNo">466</span>     */<a name="line.466"></a>
<span class="sourceLineNo">467</span>    private Queue&lt;ReadFuture&gt; getReadyReadFutures() {<a name="line.467"></a>
<span class="sourceLineNo">468</span>        Queue&lt;ReadFuture&gt; readyReadFutures = (Queue&lt;ReadFuture&gt;) getAttribute(READY_READ_FUTURES_KEY);<a name="line.468"></a>
<span class="sourceLineNo">469</span>        <a name="line.469"></a>
<span class="sourceLineNo">470</span>        if (readyReadFutures == null) {<a name="line.470"></a>
<span class="sourceLineNo">471</span>            readyReadFutures = new ConcurrentLinkedQueue&lt;ReadFuture&gt;();<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>            Queue&lt;ReadFuture&gt; oldReadyReadFutures = (Queue&lt;ReadFuture&gt;) setAttributeIfAbsent(READY_READ_FUTURES_KEY,<a name="line.473"></a>
<span class="sourceLineNo">474</span>                    readyReadFutures);<a name="line.474"></a>
<span class="sourceLineNo">475</span>            <a name="line.475"></a>
<span class="sourceLineNo">476</span>            if (oldReadyReadFutures != null) {<a name="line.476"></a>
<span class="sourceLineNo">477</span>                readyReadFutures = oldReadyReadFutures;<a name="line.477"></a>
<span class="sourceLineNo">478</span>            }<a name="line.478"></a>
<span class="sourceLineNo">479</span>        }<a name="line.479"></a>
<span class="sourceLineNo">480</span>        <a name="line.480"></a>
<span class="sourceLineNo">481</span>        return readyReadFutures;<a name="line.481"></a>
<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
<span class="sourceLineNo">483</span><a name="line.483"></a>
<span class="sourceLineNo">484</span>    /**<a name="line.484"></a>
<span class="sourceLineNo">485</span>     * @return the queue of waiting ReadFuture<a name="line.485"></a>
<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
<span class="sourceLineNo">487</span>    private Queue&lt;ReadFuture&gt; getWaitingReadFutures() {<a name="line.487"></a>
<span class="sourceLineNo">488</span>        Queue&lt;ReadFuture&gt; waitingReadyReadFutures = (Queue&lt;ReadFuture&gt;) getAttribute(WAITING_READ_FUTURES_KEY);<a name="line.488"></a>
<span class="sourceLineNo">489</span>        <a name="line.489"></a>
<span class="sourceLineNo">490</span>        if (waitingReadyReadFutures == null) {<a name="line.490"></a>
<span class="sourceLineNo">491</span>            waitingReadyReadFutures = new ConcurrentLinkedQueue&lt;ReadFuture&gt;();<a name="line.491"></a>
<span class="sourceLineNo">492</span><a name="line.492"></a>
<span class="sourceLineNo">493</span>            Queue&lt;ReadFuture&gt; oldWaitingReadyReadFutures = (Queue&lt;ReadFuture&gt;) setAttributeIfAbsent(<a name="line.493"></a>
<span class="sourceLineNo">494</span>                    WAITING_READ_FUTURES_KEY, waitingReadyReadFutures);<a name="line.494"></a>
<span class="sourceLineNo">495</span>            <a name="line.495"></a>
<span class="sourceLineNo">496</span>            if (oldWaitingReadyReadFutures != null) {<a name="line.496"></a>
<span class="sourceLineNo">497</span>                waitingReadyReadFutures = oldWaitingReadyReadFutures;<a name="line.497"></a>
<span class="sourceLineNo">498</span>            }<a name="line.498"></a>
<span class="sourceLineNo">499</span>        }<a name="line.499"></a>
<span class="sourceLineNo">500</span>        <a name="line.500"></a>
<span class="sourceLineNo">501</span>        return waitingReadyReadFutures;<a name="line.501"></a>
<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
<span class="sourceLineNo">503</span><a name="line.503"></a>
<span class="sourceLineNo">504</span>    /**<a name="line.504"></a>
<span class="sourceLineNo">505</span>     * {@inheritDoc}<a name="line.505"></a>
<span class="sourceLineNo">506</span>     */<a name="line.506"></a>
<span class="sourceLineNo">507</span>    public WriteFuture write(Object message) {<a name="line.507"></a>
<span class="sourceLineNo">508</span>        return write(message, null);<a name="line.508"></a>
<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
<span class="sourceLineNo">510</span><a name="line.510"></a>
<span class="sourceLineNo">511</span>    /**<a name="line.511"></a>
<span class="sourceLineNo">512</span>     * {@inheritDoc}<a name="line.512"></a>
<span class="sourceLineNo">513</span>     */<a name="line.513"></a>
<span class="sourceLineNo">514</span>    public WriteFuture write(Object message, SocketAddress remoteAddress) {<a name="line.514"></a>
<span class="sourceLineNo">515</span>        if (message == null) {<a name="line.515"></a>
<span class="sourceLineNo">516</span>            throw new IllegalArgumentException("Trying to write a null message : not allowed");<a name="line.516"></a>
<span class="sourceLineNo">517</span>        }<a name="line.517"></a>
<span class="sourceLineNo">518</span><a name="line.518"></a>
<span class="sourceLineNo">519</span>        // We can't send a message to a connected session if we don't have<a name="line.519"></a>
<span class="sourceLineNo">520</span>        // the remote address<a name="line.520"></a>
<span class="sourceLineNo">521</span>        if (!getTransportMetadata().isConnectionless() &amp;&amp; (remoteAddress != null)) {<a name="line.521"></a>
<span class="sourceLineNo">522</span>            throw new UnsupportedOperationException();<a name="line.522"></a>
<span class="sourceLineNo">523</span>        }<a name="line.523"></a>
<span class="sourceLineNo">524</span><a name="line.524"></a>
<span class="sourceLineNo">525</span>        // If the session has been closed or is closing, we can't either<a name="line.525"></a>
<span class="sourceLineNo">526</span>        // send a message to the remote side. We generate a future<a name="line.526"></a>
<span class="sourceLineNo">527</span>        // containing an exception.<a name="line.527"></a>
<span class="sourceLineNo">528</span>        if (isClosing() || !isConnected()) {<a name="line.528"></a>
<span class="sourceLineNo">529</span>            WriteFuture future = new DefaultWriteFuture(this);<a name="line.529"></a>
<span class="sourceLineNo">530</span>            WriteRequest request = new DefaultWriteRequest(message, future, remoteAddress);<a name="line.530"></a>
<span class="sourceLineNo">531</span>            WriteException writeException = new WriteToClosedSessionException(request);<a name="line.531"></a>
<span class="sourceLineNo">532</span>            future.setException(writeException);<a name="line.532"></a>
<span class="sourceLineNo">533</span>            return future;<a name="line.533"></a>
<span class="sourceLineNo">534</span>        }<a name="line.534"></a>
<span class="sourceLineNo">535</span><a name="line.535"></a>
<span class="sourceLineNo">536</span>        FileChannel openedFileChannel = null;<a name="line.536"></a>
<span class="sourceLineNo">537</span><a name="line.537"></a>
<span class="sourceLineNo">538</span>        // TODO: remove this code as soon as we use InputStream<a name="line.538"></a>
<span class="sourceLineNo">539</span>        // instead of Object for the message.<a name="line.539"></a>
<span class="sourceLineNo">540</span>        try {<a name="line.540"></a>
<span class="sourceLineNo">541</span>            if ((message instanceof IoBuffer) &amp;&amp; !((IoBuffer) message).hasRemaining()) {<a name="line.541"></a>
<span class="sourceLineNo">542</span>                // Nothing to write : probably an error in the user code<a name="line.542"></a>
<span class="sourceLineNo">543</span>                throw new IllegalArgumentException("message is empty. Forgot to call flip()?");<a name="line.543"></a>
<span class="sourceLineNo">544</span>            } else if (message instanceof FileChannel) {<a name="line.544"></a>
<span class="sourceLineNo">545</span>                FileChannel fileChannel = (FileChannel) message;<a name="line.545"></a>
<span class="sourceLineNo">546</span>                message = new DefaultFileRegion(fileChannel, 0, fileChannel.size());<a name="line.546"></a>
<span class="sourceLineNo">547</span>            } else if (message instanceof File) {<a name="line.547"></a>
<span class="sourceLineNo">548</span>                File file = (File) message;<a name="line.548"></a>
<span class="sourceLineNo">549</span>                openedFileChannel = new FileInputStream(file).getChannel();<a name="line.549"></a>
<span class="sourceLineNo">550</span>                message = new FilenameFileRegion(file, openedFileChannel, 0, openedFileChannel.size());<a name="line.550"></a>
<span class="sourceLineNo">551</span>            }<a name="line.551"></a>
<span class="sourceLineNo">552</span>        } catch (IOException e) {<a name="line.552"></a>
<span class="sourceLineNo">553</span>            ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.553"></a>
<span class="sourceLineNo">554</span>            return DefaultWriteFuture.newNotWrittenFuture(this, e);<a name="line.554"></a>
<span class="sourceLineNo">555</span>        }<a name="line.555"></a>
<span class="sourceLineNo">556</span><a name="line.556"></a>
<span class="sourceLineNo">557</span>        // Now, we can write the message. First, create a future<a name="line.557"></a>
<span class="sourceLineNo">558</span>        WriteFuture writeFuture = new DefaultWriteFuture(this);<a name="line.558"></a>
<span class="sourceLineNo">559</span>        WriteRequest writeRequest = new DefaultWriteRequest(message, writeFuture, remoteAddress);<a name="line.559"></a>
<span class="sourceLineNo">560</span><a name="line.560"></a>
<span class="sourceLineNo">561</span>        // Then, get the chain and inject the WriteRequest into it<a name="line.561"></a>
<span class="sourceLineNo">562</span>        IoFilterChain filterChain = getFilterChain();<a name="line.562"></a>
<span class="sourceLineNo">563</span>        filterChain.fireFilterWrite(writeRequest);<a name="line.563"></a>
<span class="sourceLineNo">564</span><a name="line.564"></a>
<span class="sourceLineNo">565</span>        // TODO : This is not our business ! The caller has created a<a name="line.565"></a>
<span class="sourceLineNo">566</span>        // FileChannel,<a name="line.566"></a>
<span class="sourceLineNo">567</span>        // he has to close it !<a name="line.567"></a>
<span class="sourceLineNo">568</span>        if (openedFileChannel != null) {<a name="line.568"></a>
<span class="sourceLineNo">569</span>            // If we opened a FileChannel, it needs to be closed when the write<a name="line.569"></a>
<span class="sourceLineNo">570</span>            // has completed<a name="line.570"></a>
<span class="sourceLineNo">571</span>            final FileChannel finalChannel = openedFileChannel;<a name="line.571"></a>
<span class="sourceLineNo">572</span>            writeFuture.addListener(new IoFutureListener&lt;WriteFuture&gt;() {<a name="line.572"></a>
<span class="sourceLineNo">573</span>                public void operationComplete(WriteFuture future) {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                    try {<a name="line.574"></a>
<span class="sourceLineNo">575</span>                        finalChannel.close();<a name="line.575"></a>
<span class="sourceLineNo">576</span>                    } catch (IOException e) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>                        ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.577"></a>
<span class="sourceLineNo">578</span>                    }<a name="line.578"></a>
<span class="sourceLineNo">579</span>                }<a name="line.579"></a>
<span class="sourceLineNo">580</span>            });<a name="line.580"></a>
<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span>        // Return the WriteFuture.<a name="line.583"></a>
<span class="sourceLineNo">584</span>        return writeFuture;<a name="line.584"></a>
<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
<span class="sourceLineNo">586</span><a name="line.586"></a>
<span class="sourceLineNo">587</span>    /**<a name="line.587"></a>
<span class="sourceLineNo">588</span>     * {@inheritDoc}<a name="line.588"></a>
<span class="sourceLineNo">589</span>     */<a name="line.589"></a>
<span class="sourceLineNo">590</span>    public final Object getAttachment() {<a name="line.590"></a>
<span class="sourceLineNo">591</span>        return getAttribute("");<a name="line.591"></a>
<span class="sourceLineNo">592</span>    }<a name="line.592"></a>
<span class="sourceLineNo">593</span><a name="line.593"></a>
<span class="sourceLineNo">594</span>    /**<a name="line.594"></a>
<span class="sourceLineNo">595</span>     * {@inheritDoc}<a name="line.595"></a>
<span class="sourceLineNo">596</span>     */<a name="line.596"></a>
<span class="sourceLineNo">597</span>    public final Object setAttachment(Object attachment) {<a name="line.597"></a>
<span class="sourceLineNo">598</span>        return setAttribute("", attachment);<a name="line.598"></a>
<span class="sourceLineNo">599</span>    }<a name="line.599"></a>
<span class="sourceLineNo">600</span><a name="line.600"></a>
<span class="sourceLineNo">601</span>    /**<a name="line.601"></a>
<span class="sourceLineNo">602</span>     * {@inheritDoc}<a name="line.602"></a>
<span class="sourceLineNo">603</span>     */<a name="line.603"></a>
<span class="sourceLineNo">604</span>    public final Object getAttribute(Object key) {<a name="line.604"></a>
<span class="sourceLineNo">605</span>        return getAttribute(key, null);<a name="line.605"></a>
<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
<span class="sourceLineNo">607</span><a name="line.607"></a>
<span class="sourceLineNo">608</span>    /**<a name="line.608"></a>
<span class="sourceLineNo">609</span>     * {@inheritDoc}<a name="line.609"></a>
<span class="sourceLineNo">610</span>     */<a name="line.610"></a>
<span class="sourceLineNo">611</span>    public final Object getAttribute(Object key, Object defaultValue) {<a name="line.611"></a>
<span class="sourceLineNo">612</span>        return attributes.getAttribute(this, key, defaultValue);<a name="line.612"></a>
<span class="sourceLineNo">613</span>    }<a name="line.613"></a>
<span class="sourceLineNo">614</span><a name="line.614"></a>
<span class="sourceLineNo">615</span>    /**<a name="line.615"></a>
<span class="sourceLineNo">616</span>     * {@inheritDoc}<a name="line.616"></a>
<span class="sourceLineNo">617</span>     */<a name="line.617"></a>
<span class="sourceLineNo">618</span>    public final Object setAttribute(Object key, Object value) {<a name="line.618"></a>
<span class="sourceLineNo">619</span>        return attributes.setAttribute(this, key, value);<a name="line.619"></a>
<span class="sourceLineNo">620</span>    }<a name="line.620"></a>
<span class="sourceLineNo">621</span><a name="line.621"></a>
<span class="sourceLineNo">622</span>    /**<a name="line.622"></a>
<span class="sourceLineNo">623</span>     * {@inheritDoc}<a name="line.623"></a>
<span class="sourceLineNo">624</span>     */<a name="line.624"></a>
<span class="sourceLineNo">625</span>    public final Object setAttribute(Object key) {<a name="line.625"></a>
<span class="sourceLineNo">626</span>        return setAttribute(key, Boolean.TRUE);<a name="line.626"></a>
<span class="sourceLineNo">627</span>    }<a name="line.627"></a>
<span class="sourceLineNo">628</span><a name="line.628"></a>
<span class="sourceLineNo">629</span>    /**<a name="line.629"></a>
<span class="sourceLineNo">630</span>     * {@inheritDoc}<a name="line.630"></a>
<span class="sourceLineNo">631</span>     */<a name="line.631"></a>
<span class="sourceLineNo">632</span>    public final Object setAttributeIfAbsent(Object key, Object value) {<a name="line.632"></a>
<span class="sourceLineNo">633</span>        return attributes.setAttributeIfAbsent(this, key, value);<a name="line.633"></a>
<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
<span class="sourceLineNo">635</span><a name="line.635"></a>
<span class="sourceLineNo">636</span>    /**<a name="line.636"></a>
<span class="sourceLineNo">637</span>     * {@inheritDoc}<a name="line.637"></a>
<span class="sourceLineNo">638</span>     */<a name="line.638"></a>
<span class="sourceLineNo">639</span>    public final Object setAttributeIfAbsent(Object key) {<a name="line.639"></a>
<span class="sourceLineNo">640</span>        return setAttributeIfAbsent(key, Boolean.TRUE);<a name="line.640"></a>
<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
<span class="sourceLineNo">642</span><a name="line.642"></a>
<span class="sourceLineNo">643</span>    /**<a name="line.643"></a>
<span class="sourceLineNo">644</span>     * {@inheritDoc}<a name="line.644"></a>
<span class="sourceLineNo">645</span>     */<a name="line.645"></a>
<span class="sourceLineNo">646</span>    public final Object removeAttribute(Object key) {<a name="line.646"></a>
<span class="sourceLineNo">647</span>        return attributes.removeAttribute(this, key);<a name="line.647"></a>
<span class="sourceLineNo">648</span>    }<a name="line.648"></a>
<span class="sourceLineNo">649</span><a name="line.649"></a>
<span class="sourceLineNo">650</span>    /**<a name="line.650"></a>
<span class="sourceLineNo">651</span>     * {@inheritDoc}<a name="line.651"></a>
<span class="sourceLineNo">652</span>     */<a name="line.652"></a>
<span class="sourceLineNo">653</span>    public final boolean removeAttribute(Object key, Object value) {<a name="line.653"></a>
<span class="sourceLineNo">654</span>        return attributes.removeAttribute(this, key, value);<a name="line.654"></a>
<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
<span class="sourceLineNo">656</span><a name="line.656"></a>
<span class="sourceLineNo">657</span>    /**<a name="line.657"></a>
<span class="sourceLineNo">658</span>     * {@inheritDoc}<a name="line.658"></a>
<span class="sourceLineNo">659</span>     */<a name="line.659"></a>
<span class="sourceLineNo">660</span>    public final boolean replaceAttribute(Object key, Object oldValue, Object newValue) {<a name="line.660"></a>
<span class="sourceLineNo">661</span>        return attributes.replaceAttribute(this, key, oldValue, newValue);<a name="line.661"></a>
<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
<span class="sourceLineNo">663</span><a name="line.663"></a>
<span class="sourceLineNo">664</span>    /**<a name="line.664"></a>
<span class="sourceLineNo">665</span>     * {@inheritDoc}<a name="line.665"></a>
<span class="sourceLineNo">666</span>     */<a name="line.666"></a>
<span class="sourceLineNo">667</span>    public final boolean containsAttribute(Object key) {<a name="line.667"></a>
<span class="sourceLineNo">668</span>        return attributes.containsAttribute(this, key);<a name="line.668"></a>
<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
<span class="sourceLineNo">670</span><a name="line.670"></a>
<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
<span class="sourceLineNo">672</span>     * {@inheritDoc}<a name="line.672"></a>
<span class="sourceLineNo">673</span>     */<a name="line.673"></a>
<span class="sourceLineNo">674</span>    public final Set&lt;Object&gt; getAttributeKeys() {<a name="line.674"></a>
<span class="sourceLineNo">675</span>        return attributes.getAttributeKeys(this);<a name="line.675"></a>
<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
<span class="sourceLineNo">677</span><a name="line.677"></a>
<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
<span class="sourceLineNo">679</span>     * @return The map of attributes associated with the session<a name="line.679"></a>
<span class="sourceLineNo">680</span>     */<a name="line.680"></a>
<span class="sourceLineNo">681</span>    public final IoSessionAttributeMap getAttributeMap() {<a name="line.681"></a>
<span class="sourceLineNo">682</span>        return attributes;<a name="line.682"></a>
<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
<span class="sourceLineNo">684</span><a name="line.684"></a>
<span class="sourceLineNo">685</span>    /**<a name="line.685"></a>
<span class="sourceLineNo">686</span>     * Set the map of attributes associated with the session<a name="line.686"></a>
<span class="sourceLineNo">687</span>     * <a name="line.687"></a>
<span class="sourceLineNo">688</span>     * @param attributes The Map of attributes<a name="line.688"></a>
<span class="sourceLineNo">689</span>     */<a name="line.689"></a>
<span class="sourceLineNo">690</span>    public final void setAttributeMap(IoSessionAttributeMap attributes) {<a name="line.690"></a>
<span class="sourceLineNo">691</span>        this.attributes = attributes;<a name="line.691"></a>
<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
<span class="sourceLineNo">693</span><a name="line.693"></a>
<span class="sourceLineNo">694</span>    /**<a name="line.694"></a>
<span class="sourceLineNo">695</span>     * Create a new close aware write queue, based on the given write queue.<a name="line.695"></a>
<span class="sourceLineNo">696</span>     * <a name="line.696"></a>
<span class="sourceLineNo">697</span>     * @param writeRequestQueue The write request queue<a name="line.697"></a>
<span class="sourceLineNo">698</span>     */<a name="line.698"></a>
<span class="sourceLineNo">699</span>    public final void setWriteRequestQueue(WriteRequestQueue writeRequestQueue) {<a name="line.699"></a>
<span class="sourceLineNo">700</span>        this.writeRequestQueue = writeRequestQueue;<a name="line.700"></a>
<span class="sourceLineNo">701</span>    }<a name="line.701"></a>
<span class="sourceLineNo">702</span><a name="line.702"></a>
<span class="sourceLineNo">703</span>    /**<a name="line.703"></a>
<span class="sourceLineNo">704</span>     * {@inheritDoc}<a name="line.704"></a>
<span class="sourceLineNo">705</span>     */<a name="line.705"></a>
<span class="sourceLineNo">706</span>    public final void suspendRead() {<a name="line.706"></a>
<span class="sourceLineNo">707</span>        readSuspended = true;<a name="line.707"></a>
<span class="sourceLineNo">708</span>        if (isClosing() || !isConnected()) {<a name="line.708"></a>
<span class="sourceLineNo">709</span>            return;<a name="line.709"></a>
<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
<span class="sourceLineNo">711</span>        getProcessor().updateTrafficControl(this);<a name="line.711"></a>
<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
<span class="sourceLineNo">713</span><a name="line.713"></a>
<span class="sourceLineNo">714</span>    /**<a name="line.714"></a>
<span class="sourceLineNo">715</span>     * {@inheritDoc}<a name="line.715"></a>
<span class="sourceLineNo">716</span>     */<a name="line.716"></a>
<span class="sourceLineNo">717</span>    public final void suspendWrite() {<a name="line.717"></a>
<span class="sourceLineNo">718</span>        writeSuspended = true;<a name="line.718"></a>
<span class="sourceLineNo">719</span>        if (isClosing() || !isConnected()) {<a name="line.719"></a>
<span class="sourceLineNo">720</span>            return;<a name="line.720"></a>
<span class="sourceLineNo">721</span>        }<a name="line.721"></a>
<span class="sourceLineNo">722</span>        getProcessor().updateTrafficControl(this);<a name="line.722"></a>
<span class="sourceLineNo">723</span>    }<a name="line.723"></a>
<span class="sourceLineNo">724</span><a name="line.724"></a>
<span class="sourceLineNo">725</span>    /**<a name="line.725"></a>
<span class="sourceLineNo">726</span>     * {@inheritDoc}<a name="line.726"></a>
<span class="sourceLineNo">727</span>     */<a name="line.727"></a>
<span class="sourceLineNo">728</span>    @SuppressWarnings("unchecked")<a name="line.728"></a>
<span class="sourceLineNo">729</span>    public final void resumeRead() {<a name="line.729"></a>
<span class="sourceLineNo">730</span>        readSuspended = false;<a name="line.730"></a>
<span class="sourceLineNo">731</span>        if (isClosing() || !isConnected()) {<a name="line.731"></a>
<span class="sourceLineNo">732</span>            return;<a name="line.732"></a>
<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
<span class="sourceLineNo">734</span>        getProcessor().updateTrafficControl(this);<a name="line.734"></a>
<span class="sourceLineNo">735</span>    }<a name="line.735"></a>
<span class="sourceLineNo">736</span><a name="line.736"></a>
<span class="sourceLineNo">737</span>    /**<a name="line.737"></a>
<span class="sourceLineNo">738</span>     * {@inheritDoc}<a name="line.738"></a>
<span class="sourceLineNo">739</span>     */<a name="line.739"></a>
<span class="sourceLineNo">740</span>    @SuppressWarnings("unchecked")<a name="line.740"></a>
<span class="sourceLineNo">741</span>    public final void resumeWrite() {<a name="line.741"></a>
<span class="sourceLineNo">742</span>        writeSuspended = false;<a name="line.742"></a>
<span class="sourceLineNo">743</span>        if (isClosing() || !isConnected()) {<a name="line.743"></a>
<span class="sourceLineNo">744</span>            return;<a name="line.744"></a>
<span class="sourceLineNo">745</span>        }<a name="line.745"></a>
<span class="sourceLineNo">746</span>        getProcessor().updateTrafficControl(this);<a name="line.746"></a>
<span class="sourceLineNo">747</span>    }<a name="line.747"></a>
<span class="sourceLineNo">748</span><a name="line.748"></a>
<span class="sourceLineNo">749</span>    /**<a name="line.749"></a>
<span class="sourceLineNo">750</span>     * {@inheritDoc}<a name="line.750"></a>
<span class="sourceLineNo">751</span>     */<a name="line.751"></a>
<span class="sourceLineNo">752</span>    public boolean isReadSuspended() {<a name="line.752"></a>
<span class="sourceLineNo">753</span>        return readSuspended;<a name="line.753"></a>
<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>    /**<a name="line.756"></a>
<span class="sourceLineNo">757</span>     * {@inheritDoc}<a name="line.757"></a>
<span class="sourceLineNo">758</span>     */<a name="line.758"></a>
<span class="sourceLineNo">759</span>    public boolean isWriteSuspended() {<a name="line.759"></a>
<span class="sourceLineNo">760</span>        return writeSuspended;<a name="line.760"></a>
<span class="sourceLineNo">761</span>    }<a name="line.761"></a>
<span class="sourceLineNo">762</span><a name="line.762"></a>
<span class="sourceLineNo">763</span>    /**<a name="line.763"></a>
<span class="sourceLineNo">764</span>     * {@inheritDoc}<a name="line.764"></a>
<span class="sourceLineNo">765</span>     */<a name="line.765"></a>
<span class="sourceLineNo">766</span>    public final long getReadBytes() {<a name="line.766"></a>
<span class="sourceLineNo">767</span>        return readBytes;<a name="line.767"></a>
<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
<span class="sourceLineNo">769</span><a name="line.769"></a>
<span class="sourceLineNo">770</span>    /**<a name="line.770"></a>
<span class="sourceLineNo">771</span>     * {@inheritDoc}<a name="line.771"></a>
<span class="sourceLineNo">772</span>     */<a name="line.772"></a>
<span class="sourceLineNo">773</span>    public final long getWrittenBytes() {<a name="line.773"></a>
<span class="sourceLineNo">774</span>        return writtenBytes;<a name="line.774"></a>
<span class="sourceLineNo">775</span>    }<a name="line.775"></a>
<span class="sourceLineNo">776</span><a name="line.776"></a>
<span class="sourceLineNo">777</span>    /**<a name="line.777"></a>
<span class="sourceLineNo">778</span>     * {@inheritDoc}<a name="line.778"></a>
<span class="sourceLineNo">779</span>     */<a name="line.779"></a>
<span class="sourceLineNo">780</span>    public final long getReadMessages() {<a name="line.780"></a>
<span class="sourceLineNo">781</span>        return readMessages;<a name="line.781"></a>
<span class="sourceLineNo">782</span>    }<a name="line.782"></a>
<span class="sourceLineNo">783</span><a name="line.783"></a>
<span class="sourceLineNo">784</span>    /**<a name="line.784"></a>
<span class="sourceLineNo">785</span>     * {@inheritDoc}<a name="line.785"></a>
<span class="sourceLineNo">786</span>     */<a name="line.786"></a>
<span class="sourceLineNo">787</span>    public final long getWrittenMessages() {<a name="line.787"></a>
<span class="sourceLineNo">788</span>        return writtenMessages;<a name="line.788"></a>
<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
<span class="sourceLineNo">790</span><a name="line.790"></a>
<span class="sourceLineNo">791</span>    /**<a name="line.791"></a>
<span class="sourceLineNo">792</span>     * {@inheritDoc}<a name="line.792"></a>
<span class="sourceLineNo">793</span>     */<a name="line.793"></a>
<span class="sourceLineNo">794</span>    public final double getReadBytesThroughput() {<a name="line.794"></a>
<span class="sourceLineNo">795</span>        return readBytesThroughput;<a name="line.795"></a>
<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
<span class="sourceLineNo">797</span><a name="line.797"></a>
<span class="sourceLineNo">798</span>    /**<a name="line.798"></a>
<span class="sourceLineNo">799</span>     * {@inheritDoc}<a name="line.799"></a>
<span class="sourceLineNo">800</span>     */<a name="line.800"></a>
<span class="sourceLineNo">801</span>    public final double getWrittenBytesThroughput() {<a name="line.801"></a>
<span class="sourceLineNo">802</span>        return writtenBytesThroughput;<a name="line.802"></a>
<span class="sourceLineNo">803</span>    }<a name="line.803"></a>
<span class="sourceLineNo">804</span><a name="line.804"></a>
<span class="sourceLineNo">805</span>    /**<a name="line.805"></a>
<span class="sourceLineNo">806</span>     * {@inheritDoc}<a name="line.806"></a>
<span class="sourceLineNo">807</span>     */<a name="line.807"></a>
<span class="sourceLineNo">808</span>    public final double getReadMessagesThroughput() {<a name="line.808"></a>
<span class="sourceLineNo">809</span>        return readMessagesThroughput;<a name="line.809"></a>
<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
<span class="sourceLineNo">811</span><a name="line.811"></a>
<span class="sourceLineNo">812</span>    /**<a name="line.812"></a>
<span class="sourceLineNo">813</span>     * {@inheritDoc}<a name="line.813"></a>
<span class="sourceLineNo">814</span>     */<a name="line.814"></a>
<span class="sourceLineNo">815</span>    public final double getWrittenMessagesThroughput() {<a name="line.815"></a>
<span class="sourceLineNo">816</span>        return writtenMessagesThroughput;<a name="line.816"></a>
<span class="sourceLineNo">817</span>    }<a name="line.817"></a>
<span class="sourceLineNo">818</span><a name="line.818"></a>
<span class="sourceLineNo">819</span>    /**<a name="line.819"></a>
<span class="sourceLineNo">820</span>     * {@inheritDoc}<a name="line.820"></a>
<span class="sourceLineNo">821</span>     */<a name="line.821"></a>
<span class="sourceLineNo">822</span>    public final void updateThroughput(long currentTime, boolean force) {<a name="line.822"></a>
<span class="sourceLineNo">823</span>        int interval = (int) (currentTime - lastThroughputCalculationTime);<a name="line.823"></a>
<span class="sourceLineNo">824</span><a name="line.824"></a>
<span class="sourceLineNo">825</span>        long minInterval = getConfig().getThroughputCalculationIntervalInMillis();<a name="line.825"></a>
<span class="sourceLineNo">826</span><a name="line.826"></a>
<span class="sourceLineNo">827</span>        if (((minInterval == 0) || (interval &lt; minInterval)) &amp;&amp; !force) {<a name="line.827"></a>
<span class="sourceLineNo">828</span>            return;<a name="line.828"></a>
<span class="sourceLineNo">829</span>        }<a name="line.829"></a>
<span class="sourceLineNo">830</span><a name="line.830"></a>
<span class="sourceLineNo">831</span>        readBytesThroughput = (readBytes - lastReadBytes) * 1000.0 / interval;<a name="line.831"></a>
<span class="sourceLineNo">832</span>        writtenBytesThroughput = (writtenBytes - lastWrittenBytes) * 1000.0 / interval;<a name="line.832"></a>
<span class="sourceLineNo">833</span>        readMessagesThroughput = (readMessages - lastReadMessages) * 1000.0 / interval;<a name="line.833"></a>
<span class="sourceLineNo">834</span>        writtenMessagesThroughput = (writtenMessages - lastWrittenMessages) * 1000.0 / interval;<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>        lastReadBytes = readBytes;<a name="line.836"></a>
<span class="sourceLineNo">837</span>        lastWrittenBytes = writtenBytes;<a name="line.837"></a>
<span class="sourceLineNo">838</span>        lastReadMessages = readMessages;<a name="line.838"></a>
<span class="sourceLineNo">839</span>        lastWrittenMessages = writtenMessages;<a name="line.839"></a>
<span class="sourceLineNo">840</span><a name="line.840"></a>
<span class="sourceLineNo">841</span>        lastThroughputCalculationTime = currentTime;<a name="line.841"></a>
<span class="sourceLineNo">842</span>    }<a name="line.842"></a>
<span class="sourceLineNo">843</span><a name="line.843"></a>
<span class="sourceLineNo">844</span>    /**<a name="line.844"></a>
<span class="sourceLineNo">845</span>     * {@inheritDoc}<a name="line.845"></a>
<span class="sourceLineNo">846</span>     */<a name="line.846"></a>
<span class="sourceLineNo">847</span>    public final long getScheduledWriteBytes() {<a name="line.847"></a>
<span class="sourceLineNo">848</span>        return scheduledWriteBytes.get();<a name="line.848"></a>
<span class="sourceLineNo">849</span>    }<a name="line.849"></a>
<span class="sourceLineNo">850</span><a name="line.850"></a>
<span class="sourceLineNo">851</span>    /**<a name="line.851"></a>
<span class="sourceLineNo">852</span>     * {@inheritDoc}<a name="line.852"></a>
<span class="sourceLineNo">853</span>     */<a name="line.853"></a>
<span class="sourceLineNo">854</span>    public final int getScheduledWriteMessages() {<a name="line.854"></a>
<span class="sourceLineNo">855</span>        return scheduledWriteMessages.get();<a name="line.855"></a>
<span class="sourceLineNo">856</span>    }<a name="line.856"></a>
<span class="sourceLineNo">857</span><a name="line.857"></a>
<span class="sourceLineNo">858</span>    /**<a name="line.858"></a>
<span class="sourceLineNo">859</span>     * Set the number of scheduled write bytes<a name="line.859"></a>
<span class="sourceLineNo">860</span>     * <a name="line.860"></a>
<span class="sourceLineNo">861</span>     * @param byteCount The number of scheduled bytes for write<a name="line.861"></a>
<span class="sourceLineNo">862</span>     */<a name="line.862"></a>
<span class="sourceLineNo">863</span>    protected void setScheduledWriteBytes(int byteCount) {<a name="line.863"></a>
<span class="sourceLineNo">864</span>        scheduledWriteBytes.set(byteCount);<a name="line.864"></a>
<span class="sourceLineNo">865</span>    }<a name="line.865"></a>
<span class="sourceLineNo">866</span><a name="line.866"></a>
<span class="sourceLineNo">867</span>    /**<a name="line.867"></a>
<span class="sourceLineNo">868</span>     * Set the number of scheduled write messages<a name="line.868"></a>
<span class="sourceLineNo">869</span>     * <a name="line.869"></a>
<span class="sourceLineNo">870</span>     * @param messages The number of scheduled messages for write<a name="line.870"></a>
<span class="sourceLineNo">871</span>     */<a name="line.871"></a>
<span class="sourceLineNo">872</span>    protected void setScheduledWriteMessages(int messages) {<a name="line.872"></a>
<span class="sourceLineNo">873</span>        scheduledWriteMessages.set(messages);<a name="line.873"></a>
<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
<span class="sourceLineNo">875</span><a name="line.875"></a>
<span class="sourceLineNo">876</span>    /**<a name="line.876"></a>
<span class="sourceLineNo">877</span>     * Increase the number of read bytes<a name="line.877"></a>
<span class="sourceLineNo">878</span>     * <a name="line.878"></a>
<span class="sourceLineNo">879</span>     * @param increment The number of read bytes<a name="line.879"></a>
<span class="sourceLineNo">880</span>     * @param currentTime The current time<a name="line.880"></a>
<span class="sourceLineNo">881</span>     */<a name="line.881"></a>
<span class="sourceLineNo">882</span>    public final void increaseReadBytes(long increment, long currentTime) {<a name="line.882"></a>
<span class="sourceLineNo">883</span>        if (increment &lt;= 0) {<a name="line.883"></a>
<span class="sourceLineNo">884</span>            return;<a name="line.884"></a>
<span class="sourceLineNo">885</span>        }<a name="line.885"></a>
<span class="sourceLineNo">886</span><a name="line.886"></a>
<span class="sourceLineNo">887</span>        readBytes += increment;<a name="line.887"></a>
<span class="sourceLineNo">888</span>        lastReadTime = currentTime;<a name="line.888"></a>
<span class="sourceLineNo">889</span>        idleCountForBoth.set(0);<a name="line.889"></a>
<span class="sourceLineNo">890</span>        idleCountForRead.set(0);<a name="line.890"></a>
<span class="sourceLineNo">891</span><a name="line.891"></a>
<span class="sourceLineNo">892</span>        if (getService() instanceof AbstractIoService) {<a name="line.892"></a>
<span class="sourceLineNo">893</span>            ((AbstractIoService) getService()).getStatistics().increaseReadBytes(increment, currentTime);<a name="line.893"></a>
<span class="sourceLineNo">894</span>        }<a name="line.894"></a>
<span class="sourceLineNo">895</span>    }<a name="line.895"></a>
<span class="sourceLineNo">896</span><a name="line.896"></a>
<span class="sourceLineNo">897</span>    /**<a name="line.897"></a>
<span class="sourceLineNo">898</span>     * Increase the number of read messages<a name="line.898"></a>
<span class="sourceLineNo">899</span>     * <a name="line.899"></a>
<span class="sourceLineNo">900</span>     * @param currentTime The current time<a name="line.900"></a>
<span class="sourceLineNo">901</span>     */<a name="line.901"></a>
<span class="sourceLineNo">902</span>    public final void increaseReadMessages(long currentTime) {<a name="line.902"></a>
<span class="sourceLineNo">903</span>        readMessages++;<a name="line.903"></a>
<span class="sourceLineNo">904</span>        lastReadTime = currentTime;<a name="line.904"></a>
<span class="sourceLineNo">905</span>        idleCountForBoth.set(0);<a name="line.905"></a>
<span class="sourceLineNo">906</span>        idleCountForRead.set(0);<a name="line.906"></a>
<span class="sourceLineNo">907</span><a name="line.907"></a>
<span class="sourceLineNo">908</span>        if (getService() instanceof AbstractIoService) {<a name="line.908"></a>
<span class="sourceLineNo">909</span>            ((AbstractIoService) getService()).getStatistics().increaseReadMessages(currentTime);<a name="line.909"></a>
<span class="sourceLineNo">910</span>        }<a name="line.910"></a>
<span class="sourceLineNo">911</span>    }<a name="line.911"></a>
<span class="sourceLineNo">912</span><a name="line.912"></a>
<span class="sourceLineNo">913</span>    /**<a name="line.913"></a>
<span class="sourceLineNo">914</span>     * Increase the number of written bytes<a name="line.914"></a>
<span class="sourceLineNo">915</span>     * <a name="line.915"></a>
<span class="sourceLineNo">916</span>     * @param increment The number of written bytes<a name="line.916"></a>
<span class="sourceLineNo">917</span>     * @param currentTime The current time<a name="line.917"></a>
<span class="sourceLineNo">918</span>     */<a name="line.918"></a>
<span class="sourceLineNo">919</span>    public final void increaseWrittenBytes(int increment, long currentTime) {<a name="line.919"></a>
<span class="sourceLineNo">920</span>        if (increment &lt;= 0) {<a name="line.920"></a>
<span class="sourceLineNo">921</span>            return;<a name="line.921"></a>
<span class="sourceLineNo">922</span>        }<a name="line.922"></a>
<span class="sourceLineNo">923</span><a name="line.923"></a>
<span class="sourceLineNo">924</span>        writtenBytes += increment;<a name="line.924"></a>
<span class="sourceLineNo">925</span>        lastWriteTime = currentTime;<a name="line.925"></a>
<span class="sourceLineNo">926</span>        idleCountForBoth.set(0);<a name="line.926"></a>
<span class="sourceLineNo">927</span>        idleCountForWrite.set(0);<a name="line.927"></a>
<span class="sourceLineNo">928</span><a name="line.928"></a>
<span class="sourceLineNo">929</span>        if (getService() instanceof AbstractIoService) {<a name="line.929"></a>
<span class="sourceLineNo">930</span>            ((AbstractIoService) getService()).getStatistics().increaseWrittenBytes(increment, currentTime);<a name="line.930"></a>
<span class="sourceLineNo">931</span>        }<a name="line.931"></a>
<span class="sourceLineNo">932</span><a name="line.932"></a>
<span class="sourceLineNo">933</span>        increaseScheduledWriteBytes(-increment);<a name="line.933"></a>
<span class="sourceLineNo">934</span>    }<a name="line.934"></a>
<span class="sourceLineNo">935</span><a name="line.935"></a>
<span class="sourceLineNo">936</span>    /**<a name="line.936"></a>
<span class="sourceLineNo">937</span>     * Increase the number of written messages<a name="line.937"></a>
<span class="sourceLineNo">938</span>     * <a name="line.938"></a>
<span class="sourceLineNo">939</span>     * @param request The written message<a name="line.939"></a>
<span class="sourceLineNo">940</span>     * @param currentTime The current tile<a name="line.940"></a>
<span class="sourceLineNo">941</span>     */<a name="line.941"></a>
<span class="sourceLineNo">942</span>    public final void increaseWrittenMessages(WriteRequest request, long currentTime) {<a name="line.942"></a>
<span class="sourceLineNo">943</span>        Object message = request.getMessage();<a name="line.943"></a>
<span class="sourceLineNo">944</span><a name="line.944"></a>
<span class="sourceLineNo">945</span>        if (message instanceof IoBuffer) {<a name="line.945"></a>
<span class="sourceLineNo">946</span>            IoBuffer b = (IoBuffer) message;<a name="line.946"></a>
<span class="sourceLineNo">947</span><a name="line.947"></a>
<span class="sourceLineNo">948</span>            if (b.hasRemaining()) {<a name="line.948"></a>
<span class="sourceLineNo">949</span>                return;<a name="line.949"></a>
<span class="sourceLineNo">950</span>            }<a name="line.950"></a>
<span class="sourceLineNo">951</span>        }<a name="line.951"></a>
<span class="sourceLineNo">952</span><a name="line.952"></a>
<span class="sourceLineNo">953</span>        writtenMessages++;<a name="line.953"></a>
<span class="sourceLineNo">954</span>        lastWriteTime = currentTime;<a name="line.954"></a>
<span class="sourceLineNo">955</span><a name="line.955"></a>
<span class="sourceLineNo">956</span>        if (getService() instanceof AbstractIoService) {<a name="line.956"></a>
<span class="sourceLineNo">957</span>            ((AbstractIoService) getService()).getStatistics().increaseWrittenMessages(currentTime);<a name="line.957"></a>
<span class="sourceLineNo">958</span>        }<a name="line.958"></a>
<span class="sourceLineNo">959</span><a name="line.959"></a>
<span class="sourceLineNo">960</span>        decreaseScheduledWriteMessages();<a name="line.960"></a>
<span class="sourceLineNo">961</span>    }<a name="line.961"></a>
<span class="sourceLineNo">962</span><a name="line.962"></a>
<span class="sourceLineNo">963</span>    /**<a name="line.963"></a>
<span class="sourceLineNo">964</span>     * Increase the number of scheduled write bytes for the session<a name="line.964"></a>
<span class="sourceLineNo">965</span>     * <a name="line.965"></a>
<span class="sourceLineNo">966</span>     * @param increment The number of newly added bytes to write<a name="line.966"></a>
<span class="sourceLineNo">967</span>     */<a name="line.967"></a>
<span class="sourceLineNo">968</span>    public final void increaseScheduledWriteBytes(int increment) {<a name="line.968"></a>
<span class="sourceLineNo">969</span>        scheduledWriteBytes.addAndGet(increment);<a name="line.969"></a>
<span class="sourceLineNo">970</span>        if (getService() instanceof AbstractIoService) {<a name="line.970"></a>
<span class="sourceLineNo">971</span>            ((AbstractIoService) getService()).getStatistics().increaseScheduledWriteBytes(increment);<a name="line.971"></a>
<span class="sourceLineNo">972</span>        }<a name="line.972"></a>
<span class="sourceLineNo">973</span>    }<a name="line.973"></a>
<span class="sourceLineNo">974</span><a name="line.974"></a>
<span class="sourceLineNo">975</span>    /**<a name="line.975"></a>
<span class="sourceLineNo">976</span>     * Increase the number of scheduled message to write<a name="line.976"></a>
<span class="sourceLineNo">977</span>     */<a name="line.977"></a>
<span class="sourceLineNo">978</span>    public final void increaseScheduledWriteMessages() {<a name="line.978"></a>
<span class="sourceLineNo">979</span>        scheduledWriteMessages.incrementAndGet();<a name="line.979"></a>
<span class="sourceLineNo">980</span>        <a name="line.980"></a>
<span class="sourceLineNo">981</span>        if (getService() instanceof AbstractIoService) {<a name="line.981"></a>
<span class="sourceLineNo">982</span>            ((AbstractIoService) getService()).getStatistics().increaseScheduledWriteMessages();<a name="line.982"></a>
<span class="sourceLineNo">983</span>        }<a name="line.983"></a>
<span class="sourceLineNo">984</span>    }<a name="line.984"></a>
<span class="sourceLineNo">985</span><a name="line.985"></a>
<span class="sourceLineNo">986</span>    /**<a name="line.986"></a>
<span class="sourceLineNo">987</span>     * Decrease the number of scheduled message written<a name="line.987"></a>
<span class="sourceLineNo">988</span>     */<a name="line.988"></a>
<span class="sourceLineNo">989</span>    private void decreaseScheduledWriteMessages() {<a name="line.989"></a>
<span class="sourceLineNo">990</span>        scheduledWriteMessages.decrementAndGet();<a name="line.990"></a>
<span class="sourceLineNo">991</span>        if (getService() instanceof AbstractIoService) {<a name="line.991"></a>
<span class="sourceLineNo">992</span>            ((AbstractIoService) getService()).getStatistics().decreaseScheduledWriteMessages();<a name="line.992"></a>
<span class="sourceLineNo">993</span>        }<a name="line.993"></a>
<span class="sourceLineNo">994</span>    }<a name="line.994"></a>
<span class="sourceLineNo">995</span><a name="line.995"></a>
<span class="sourceLineNo">996</span>    /**<a name="line.996"></a>
<span class="sourceLineNo">997</span>     * Decrease the counters of written messages and written bytes when a message has been written<a name="line.997"></a>
<span class="sourceLineNo">998</span>     * <a name="line.998"></a>
<span class="sourceLineNo">999</span>     * @param request The written message<a name="line.999"></a>
<span class="sourceLineNo">1000</span>     */<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>    public final void decreaseScheduledBytesAndMessages(WriteRequest request) {<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>        Object message = request.getMessage();<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>        <a name="line.1003"></a>
<span class="sourceLineNo">1004</span>        if (message instanceof IoBuffer) {<a name="line.1004"></a>
<span class="sourceLineNo">1005</span>            IoBuffer b = (IoBuffer) message;<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>            <a name="line.1006"></a>
<span class="sourceLineNo">1007</span>            if (b.hasRemaining()) {<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>                increaseScheduledWriteBytes(-((IoBuffer) message).remaining());<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>            } else {<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>                decreaseScheduledWriteMessages();<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>            }<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>        } else {<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>            decreaseScheduledWriteMessages();<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>        }<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>    }<a name="line.1015"></a>
<span class="sourceLineNo">1016</span><a name="line.1016"></a>
<span class="sourceLineNo">1017</span>    /**<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>     * {@inheritDoc}<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>     */<a name="line.1019"></a>
<span class="sourceLineNo">1020</span>    public final WriteRequestQueue getWriteRequestQueue() {<a name="line.1020"></a>
<span class="sourceLineNo">1021</span>        if (writeRequestQueue == null) {<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>            throw new IllegalStateException();<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>        }<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>        <a name="line.1024"></a>
<span class="sourceLineNo">1025</span>        return writeRequestQueue;<a name="line.1025"></a>
<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
<span class="sourceLineNo">1027</span><a name="line.1027"></a>
<span class="sourceLineNo">1028</span>    /**<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>     * {@inheritDoc}<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>     */<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>    public final WriteRequest getCurrentWriteRequest() {<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>        return currentWriteRequest;<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>    }<a name="line.1033"></a>
<span class="sourceLineNo">1034</span><a name="line.1034"></a>
<span class="sourceLineNo">1035</span>    /**<a name="line.1035"></a>
<span class="sourceLineNo">1036</span>     * {@inheritDoc}<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>     */<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>    public final Object getCurrentWriteMessage() {<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>        WriteRequest req = getCurrentWriteRequest();<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>        <a name="line.1040"></a>
<span class="sourceLineNo">1041</span>        if (req == null) {<a name="line.1041"></a>
<span class="sourceLineNo">1042</span>            return null;<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>        }<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>        return req.getMessage();<a name="line.1044"></a>
<span class="sourceLineNo">1045</span>    }<a name="line.1045"></a>
<span class="sourceLineNo">1046</span><a name="line.1046"></a>
<span class="sourceLineNo">1047</span>    /**<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>     * {@inheritDoc}<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>     */<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    public final void setCurrentWriteRequest(WriteRequest currentWriteRequest) {<a name="line.1050"></a>
<span class="sourceLineNo">1051</span>        this.currentWriteRequest = currentWriteRequest;<a name="line.1051"></a>
<span class="sourceLineNo">1052</span>    }<a name="line.1052"></a>
<span class="sourceLineNo">1053</span><a name="line.1053"></a>
<span class="sourceLineNo">1054</span>    /**<a name="line.1054"></a>
<span class="sourceLineNo">1055</span>     * Increase the ReadBuffer size (it will double)<a name="line.1055"></a>
<span class="sourceLineNo">1056</span>     */<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>    public final void increaseReadBufferSize() {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>        int newReadBufferSize = getConfig().getReadBufferSize() &lt;&lt; 1;<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>        if (newReadBufferSize &lt;= getConfig().getMaxReadBufferSize()) {<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>            getConfig().setReadBufferSize(newReadBufferSize);<a name="line.1060"></a>
<span class="sourceLineNo">1061</span>        } else {<a name="line.1061"></a>
<span class="sourceLineNo">1062</span>            getConfig().setReadBufferSize(getConfig().getMaxReadBufferSize());<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>        }<a name="line.1063"></a>
<span class="sourceLineNo">1064</span><a name="line.1064"></a>
<span class="sourceLineNo">1065</span>        deferDecreaseReadBuffer = true;<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
<span class="sourceLineNo">1067</span><a name="line.1067"></a>
<span class="sourceLineNo">1068</span>    /**<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>     * Decrease the ReadBuffer size (it will be divided by a factor 2)<a name="line.1069"></a>
<span class="sourceLineNo">1070</span>     */<a name="line.1070"></a>
<span class="sourceLineNo">1071</span>    public final void decreaseReadBufferSize() {<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>        if (deferDecreaseReadBuffer) {<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>            deferDecreaseReadBuffer = false;<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>            return;<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>        }<a name="line.1075"></a>
<span class="sourceLineNo">1076</span><a name="line.1076"></a>
<span class="sourceLineNo">1077</span>        if (getConfig().getReadBufferSize() &gt; getConfig().getMinReadBufferSize()) {<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>            getConfig().setReadBufferSize(getConfig().getReadBufferSize() &gt;&gt;&gt; 1);<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>        }<a name="line.1079"></a>
<span class="sourceLineNo">1080</span><a name="line.1080"></a>
<span class="sourceLineNo">1081</span>        deferDecreaseReadBuffer = true;<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
<span class="sourceLineNo">1083</span><a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    /**<a name="line.1084"></a>
<span class="sourceLineNo">1085</span>     * {@inheritDoc}<a name="line.1085"></a>
<span class="sourceLineNo">1086</span>     */<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>    public final long getCreationTime() {<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>        return creationTime;<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>    }<a name="line.1089"></a>
<span class="sourceLineNo">1090</span><a name="line.1090"></a>
<span class="sourceLineNo">1091</span>    /**<a name="line.1091"></a>
<span class="sourceLineNo">1092</span>     * {@inheritDoc}<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>     */<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>    public final long getLastIoTime() {<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>        return Math.max(lastReadTime, lastWriteTime);<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>    }<a name="line.1096"></a>
<span class="sourceLineNo">1097</span><a name="line.1097"></a>
<span class="sourceLineNo">1098</span>    /**<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>     * {@inheritDoc}<a name="line.1099"></a>
<span class="sourceLineNo">1100</span>     */<a name="line.1100"></a>
<span class="sourceLineNo">1101</span>    public final long getLastReadTime() {<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>        return lastReadTime;<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>    }<a name="line.1103"></a>
<span class="sourceLineNo">1104</span><a name="line.1104"></a>
<span class="sourceLineNo">1105</span>    /**<a name="line.1105"></a>
<span class="sourceLineNo">1106</span>     * {@inheritDoc}<a name="line.1106"></a>
<span class="sourceLineNo">1107</span>     */<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>    public final long getLastWriteTime() {<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>        return lastWriteTime;<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>    }<a name="line.1110"></a>
<span class="sourceLineNo">1111</span><a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    /**<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>     * {@inheritDoc}<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>     */<a name="line.1114"></a>
<span class="sourceLineNo">1115</span>    public final boolean isIdle(IdleStatus status) {<a name="line.1115"></a>
<span class="sourceLineNo">1116</span>        if (status == IdleStatus.BOTH_IDLE) {<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>            return idleCountForBoth.get() &gt; 0;<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>        }<a name="line.1118"></a>
<span class="sourceLineNo">1119</span><a name="line.1119"></a>
<span class="sourceLineNo">1120</span>        if (status == IdleStatus.READER_IDLE) {<a name="line.1120"></a>
<span class="sourceLineNo">1121</span>            return idleCountForRead.get() &gt; 0;<a name="line.1121"></a>
<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
<span class="sourceLineNo">1123</span><a name="line.1123"></a>
<span class="sourceLineNo">1124</span>        if (status == IdleStatus.WRITER_IDLE) {<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>            return idleCountForWrite.get() &gt; 0;<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>        }<a name="line.1126"></a>
<span class="sourceLineNo">1127</span><a name="line.1127"></a>
<span class="sourceLineNo">1128</span>        throw new IllegalArgumentException("Unknown idle status: " + status);<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
<span class="sourceLineNo">1130</span><a name="line.1130"></a>
<span class="sourceLineNo">1131</span>    /**<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>     * {@inheritDoc}<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>     */<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>    public final boolean isBothIdle() {<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>        return isIdle(IdleStatus.BOTH_IDLE);<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
<span class="sourceLineNo">1137</span><a name="line.1137"></a>
<span class="sourceLineNo">1138</span>    /**<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>     * {@inheritDoc}<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>     */<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>    public final boolean isReaderIdle() {<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>        return isIdle(IdleStatus.READER_IDLE);<a name="line.1142"></a>
<span class="sourceLineNo">1143</span>    }<a name="line.1143"></a>
<span class="sourceLineNo">1144</span><a name="line.1144"></a>
<span class="sourceLineNo">1145</span>    /**<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>     * {@inheritDoc}<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>     */<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>    public final boolean isWriterIdle() {<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>        return isIdle(IdleStatus.WRITER_IDLE);<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
<span class="sourceLineNo">1151</span><a name="line.1151"></a>
<span class="sourceLineNo">1152</span>    /**<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>     * {@inheritDoc}<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>     */<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>    public final int getIdleCount(IdleStatus status) {<a name="line.1155"></a>
<span class="sourceLineNo">1156</span>        if (getConfig().getIdleTime(status) == 0) {<a name="line.1156"></a>
<span class="sourceLineNo">1157</span>            if (status == IdleStatus.BOTH_IDLE) {<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>                idleCountForBoth.set(0);<a name="line.1158"></a>
<span class="sourceLineNo">1159</span>            }<a name="line.1159"></a>
<span class="sourceLineNo">1160</span><a name="line.1160"></a>
<span class="sourceLineNo">1161</span>            if (status == IdleStatus.READER_IDLE) {<a name="line.1161"></a>
<span class="sourceLineNo">1162</span>                idleCountForRead.set(0);<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>            }<a name="line.1163"></a>
<span class="sourceLineNo">1164</span><a name="line.1164"></a>
<span class="sourceLineNo">1165</span>            if (status == IdleStatus.WRITER_IDLE) {<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>                idleCountForWrite.set(0);<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>            }<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>        }<a name="line.1168"></a>
<span class="sourceLineNo">1169</span><a name="line.1169"></a>
<span class="sourceLineNo">1170</span>        if (status == IdleStatus.BOTH_IDLE) {<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>            return idleCountForBoth.get();<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>        }<a name="line.1172"></a>
<span class="sourceLineNo">1173</span><a name="line.1173"></a>
<span class="sourceLineNo">1174</span>        if (status == IdleStatus.READER_IDLE) {<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>            return idleCountForRead.get();<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>        }<a name="line.1176"></a>
<span class="sourceLineNo">1177</span><a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        if (status == IdleStatus.WRITER_IDLE) {<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>            return idleCountForWrite.get();<a name="line.1179"></a>
<span class="sourceLineNo">1180</span>        }<a name="line.1180"></a>
<span class="sourceLineNo">1181</span><a name="line.1181"></a>
<span class="sourceLineNo">1182</span>        throw new IllegalArgumentException("Unknown idle status: " + status);<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
<span class="sourceLineNo">1184</span><a name="line.1184"></a>
<span class="sourceLineNo">1185</span>    /**<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>     * {@inheritDoc}<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>     */<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>    public final long getLastIdleTime(IdleStatus status) {<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>        if (status == IdleStatus.BOTH_IDLE) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>            return lastIdleTimeForBoth;<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>        }<a name="line.1191"></a>
<span class="sourceLineNo">1192</span><a name="line.1192"></a>
<span class="sourceLineNo">1193</span>        if (status == IdleStatus.READER_IDLE) {<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>            return lastIdleTimeForRead;<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>        }<a name="line.1195"></a>
<span class="sourceLineNo">1196</span><a name="line.1196"></a>
<span class="sourceLineNo">1197</span>        if (status == IdleStatus.WRITER_IDLE) {<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>            return lastIdleTimeForWrite;<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>        }<a name="line.1199"></a>
<span class="sourceLineNo">1200</span><a name="line.1200"></a>
<span class="sourceLineNo">1201</span>        throw new IllegalArgumentException("Unknown idle status: " + status);<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>    }<a name="line.1202"></a>
<span class="sourceLineNo">1203</span><a name="line.1203"></a>
<span class="sourceLineNo">1204</span>    /**<a name="line.1204"></a>
<span class="sourceLineNo">1205</span>     * Increase the count of the various Idle counter<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>     * <a name="line.1206"></a>
<span class="sourceLineNo">1207</span>     * @param status The current status<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>     * @param currentTime The current time<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>     */<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>    public final void increaseIdleCount(IdleStatus status, long currentTime) {<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>        if (status == IdleStatus.BOTH_IDLE) {<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>            idleCountForBoth.incrementAndGet();<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>            lastIdleTimeForBoth = currentTime;<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>        } else if (status == IdleStatus.READER_IDLE) {<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>            idleCountForRead.incrementAndGet();<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>            lastIdleTimeForRead = currentTime;<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>        } else if (status == IdleStatus.WRITER_IDLE) {<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>            idleCountForWrite.incrementAndGet();<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>            lastIdleTimeForWrite = currentTime;<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>        } else {<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>            throw new IllegalArgumentException("Unknown idle status: " + status);<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>        }<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
<span class="sourceLineNo">1224</span><a name="line.1224"></a>
<span class="sourceLineNo">1225</span>    /**<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>     * {@inheritDoc}<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>     */<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>    public final int getBothIdleCount() {<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>        return getIdleCount(IdleStatus.BOTH_IDLE);<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>    }<a name="line.1230"></a>
<span class="sourceLineNo">1231</span><a name="line.1231"></a>
<span class="sourceLineNo">1232</span>    /**<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>     * {@inheritDoc}<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>     */<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>    public final long getLastBothIdleTime() {<a name="line.1235"></a>
<span class="sourceLineNo">1236</span>        return getLastIdleTime(IdleStatus.BOTH_IDLE);<a name="line.1236"></a>
<span class="sourceLineNo">1237</span>    }<a name="line.1237"></a>
<span class="sourceLineNo">1238</span><a name="line.1238"></a>
<span class="sourceLineNo">1239</span>    /**<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>     * {@inheritDoc}<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>     */<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>    public final long getLastReaderIdleTime() {<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>        return getLastIdleTime(IdleStatus.READER_IDLE);<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>    }<a name="line.1244"></a>
<span class="sourceLineNo">1245</span><a name="line.1245"></a>
<span class="sourceLineNo">1246</span>    /**<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>     * {@inheritDoc}<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>     */<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>    public final long getLastWriterIdleTime() {<a name="line.1249"></a>
<span class="sourceLineNo">1250</span>        return getLastIdleTime(IdleStatus.WRITER_IDLE);<a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
<span class="sourceLineNo">1252</span><a name="line.1252"></a>
<span class="sourceLineNo">1253</span>    /**<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>     * {@inheritDoc}<a name="line.1254"></a>
<span class="sourceLineNo">1255</span>     */<a name="line.1255"></a>
<span class="sourceLineNo">1256</span>    public final int getReaderIdleCount() {<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>        return getIdleCount(IdleStatus.READER_IDLE);<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>    }<a name="line.1258"></a>
<span class="sourceLineNo">1259</span><a name="line.1259"></a>
<span class="sourceLineNo">1260</span>    /**<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>     * {@inheritDoc}<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>     */<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>    public final int getWriterIdleCount() {<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>        return getIdleCount(IdleStatus.WRITER_IDLE);<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>    }<a name="line.1265"></a>
<span class="sourceLineNo">1266</span><a name="line.1266"></a>
<span class="sourceLineNo">1267</span>    /**<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>     * {@inheritDoc}<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>     */<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>    public SocketAddress getServiceAddress() {<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>        IoService service = getService();<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>        if (service instanceof IoAcceptor) {<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>            return ((IoAcceptor) service).getLocalAddress();<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>        }<a name="line.1274"></a>
<span class="sourceLineNo">1275</span><a name="line.1275"></a>
<span class="sourceLineNo">1276</span>        return getRemoteAddress();<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>    }<a name="line.1277"></a>
<span class="sourceLineNo">1278</span><a name="line.1278"></a>
<span class="sourceLineNo">1279</span>    /**<a name="line.1279"></a>
<span class="sourceLineNo">1280</span>     * {@inheritDoc}<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>     */<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>    @Override<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    public final int hashCode() {<a name="line.1283"></a>
<span class="sourceLineNo">1284</span>        return super.hashCode();<a name="line.1284"></a>
<span class="sourceLineNo">1285</span>    }<a name="line.1285"></a>
<span class="sourceLineNo">1286</span><a name="line.1286"></a>
<span class="sourceLineNo">1287</span>    /**<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>     * {@inheritDoc} TODO This is a ridiculous implementation. Need to be<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>     * replaced.<a name="line.1289"></a>
<span class="sourceLineNo">1290</span>     */<a name="line.1290"></a>
<span class="sourceLineNo">1291</span>    @Override<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>    public final boolean equals(Object o) {<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>        return super.equals(o);<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>    }<a name="line.1294"></a>
<span class="sourceLineNo">1295</span><a name="line.1295"></a>
<span class="sourceLineNo">1296</span>    /**<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>     * {@inheritDoc}<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>     */<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>    @Override<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>    public String toString() {<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>        if (isConnected() || isClosing()) {<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>            String remote = null;<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>            String local = null;<a name="line.1303"></a>
<span class="sourceLineNo">1304</span><a name="line.1304"></a>
<span class="sourceLineNo">1305</span>            try {<a name="line.1305"></a>
<span class="sourceLineNo">1306</span>                remote = String.valueOf(getRemoteAddress());<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>            } catch (Exception e) {<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>                remote = "Cannot get the remote address informations: " + e.getMessage();<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>            }<a name="line.1309"></a>
<span class="sourceLineNo">1310</span><a name="line.1310"></a>
<span class="sourceLineNo">1311</span>            try {<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>                local = String.valueOf(getLocalAddress());<a name="line.1312"></a>
<span class="sourceLineNo">1313</span>            } catch (Exception e) {<a name="line.1313"></a>
<span class="sourceLineNo">1314</span>            }<a name="line.1314"></a>
<span class="sourceLineNo">1315</span><a name="line.1315"></a>
<span class="sourceLineNo">1316</span>            if (getService() instanceof IoAcceptor) {<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>                return "(" + getIdAsString() + ": " + getServiceName() + ", server, " + remote + " =&gt; " + local + ')';<a name="line.1317"></a>
<span class="sourceLineNo">1318</span>            }<a name="line.1318"></a>
<span class="sourceLineNo">1319</span><a name="line.1319"></a>
<span class="sourceLineNo">1320</span>            return "(" + getIdAsString() + ": " + getServiceName() + ", client, " + local + " =&gt; " + remote + ')';<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>        }<a name="line.1321"></a>
<span class="sourceLineNo">1322</span><a name="line.1322"></a>
<span class="sourceLineNo">1323</span>        return "(" + getIdAsString() + ") Session disconnected ...";<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>    }<a name="line.1324"></a>
<span class="sourceLineNo">1325</span><a name="line.1325"></a>
<span class="sourceLineNo">1326</span>    /**<a name="line.1326"></a>
<span class="sourceLineNo">1327</span>     * Get the Id as a String<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>     */<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>    private String getIdAsString() {<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>        String id = Long.toHexString(getId()).toUpperCase();<a name="line.1330"></a>
<span class="sourceLineNo">1331</span>        <a name="line.1331"></a>
<span class="sourceLineNo">1332</span>        if (id.length() &lt;= 8) {<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>            return "0x00000000".substring(0, 10 - id.length()) + id;<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>        } else {<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>            return "0x" + id;<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>        }<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>    }<a name="line.1337"></a>
<span class="sourceLineNo">1338</span><a name="line.1338"></a>
<span class="sourceLineNo">1339</span>    /**<a name="line.1339"></a>
<span class="sourceLineNo">1340</span>     * TGet the Service name<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>     */<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>    private String getServiceName() {<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>        TransportMetadata tm = getTransportMetadata();<a name="line.1343"></a>
<span class="sourceLineNo">1344</span>        if (tm == null) {<a name="line.1344"></a>
<span class="sourceLineNo">1345</span>            return "null";<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>        }<a name="line.1346"></a>
<span class="sourceLineNo">1347</span><a name="line.1347"></a>
<span class="sourceLineNo">1348</span>        return tm.getProviderName() + ' ' + tm.getName();<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>    }<a name="line.1349"></a>
<span class="sourceLineNo">1350</span><a name="line.1350"></a>
<span class="sourceLineNo">1351</span>    /**<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>     * {@inheritDoc}<a name="line.1352"></a>
<span class="sourceLineNo">1353</span>     */<a name="line.1353"></a>
<span class="sourceLineNo">1354</span>    public IoService getService() {<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>        return service;<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>    }<a name="line.1356"></a>
<span class="sourceLineNo">1357</span><a name="line.1357"></a>
<span class="sourceLineNo">1358</span>    /**<a name="line.1358"></a>
<span class="sourceLineNo">1359</span>     * Fires a {@link IoEventType#SESSION_IDLE} event to any applicable sessions<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>     * in the specified collection.<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>     * <a name="line.1361"></a>
<span class="sourceLineNo">1362</span>     * @param sessions The sessions that are notified<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>     * @param currentTime the current time (i.e. {@link System#currentTimeMillis()})<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>     */<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>    public static void notifyIdleness(Iterator&lt;? extends IoSession&gt; sessions, long currentTime) {<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>        while (sessions.hasNext()) {<a name="line.1366"></a>
<span class="sourceLineNo">1367</span>            IoSession session = sessions.next();<a name="line.1367"></a>
<span class="sourceLineNo">1368</span>            <a name="line.1368"></a>
<span class="sourceLineNo">1369</span>            if (!session.getCloseFuture().isClosed()) {<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>                notifyIdleSession(session, currentTime);<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>            }<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>        }<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>    }<a name="line.1373"></a>
<span class="sourceLineNo">1374</span><a name="line.1374"></a>
<span class="sourceLineNo">1375</span>    /**<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>     * Fires a {@link IoEventType#SESSION_IDLE} event if applicable for the<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>     * specified {@code session}.<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>     * <a name="line.1378"></a>
<span class="sourceLineNo">1379</span>     * @param session The session that is notified<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>     * @param currentTime the current time (i.e. {@link System#currentTimeMillis()})<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>     */<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>    public static void notifyIdleSession(IoSession session, long currentTime) {<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>        notifyIdleSession0(session, currentTime, session.getConfig().getIdleTimeInMillis(IdleStatus.BOTH_IDLE),<a name="line.1383"></a>
<span class="sourceLineNo">1384</span>                IdleStatus.BOTH_IDLE, Math.max(session.getLastIoTime(), session.getLastIdleTime(IdleStatus.BOTH_IDLE)));<a name="line.1384"></a>
<span class="sourceLineNo">1385</span><a name="line.1385"></a>
<span class="sourceLineNo">1386</span>        notifyIdleSession0(session, currentTime, session.getConfig().getIdleTimeInMillis(IdleStatus.READER_IDLE),<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>                IdleStatus.READER_IDLE,<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>                Math.max(session.getLastReadTime(), session.getLastIdleTime(IdleStatus.READER_IDLE)));<a name="line.1388"></a>
<span class="sourceLineNo">1389</span><a name="line.1389"></a>
<span class="sourceLineNo">1390</span>        notifyIdleSession0(session, currentTime, session.getConfig().getIdleTimeInMillis(IdleStatus.WRITER_IDLE),<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>                IdleStatus.WRITER_IDLE,<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>                Math.max(session.getLastWriteTime(), session.getLastIdleTime(IdleStatus.WRITER_IDLE)));<a name="line.1392"></a>
<span class="sourceLineNo">1393</span><a name="line.1393"></a>
<span class="sourceLineNo">1394</span>        notifyWriteTimeout(session, currentTime);<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
<span class="sourceLineNo">1396</span><a name="line.1396"></a>
<span class="sourceLineNo">1397</span>    private static void notifyIdleSession0(IoSession session, long currentTime, long idleTime, IdleStatus status,<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>            long lastIoTime) {<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>        if ((idleTime &gt; 0) &amp;&amp; (lastIoTime != 0) &amp;&amp; (currentTime - lastIoTime &gt;= idleTime)) {<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>            session.getFilterChain().fireSessionIdle(status);<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>        }<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>    }<a name="line.1402"></a>
<span class="sourceLineNo">1403</span><a name="line.1403"></a>
<span class="sourceLineNo">1404</span>    private static void notifyWriteTimeout(IoSession session, long currentTime) {<a name="line.1404"></a>
<span class="sourceLineNo">1405</span><a name="line.1405"></a>
<span class="sourceLineNo">1406</span>        long writeTimeout = session.getConfig().getWriteTimeoutInMillis();<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>        if ((writeTimeout &gt; 0) &amp;&amp; (currentTime - session.getLastWriteTime() &gt;= writeTimeout)<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>                &amp;&amp; !session.getWriteRequestQueue().isEmpty(session)) {<a name="line.1408"></a>
<span class="sourceLineNo">1409</span>            WriteRequest request = session.getCurrentWriteRequest();<a name="line.1409"></a>
<span class="sourceLineNo">1410</span>            if (request != null) {<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>                session.setCurrentWriteRequest(null);<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>                WriteTimeoutException cause = new WriteTimeoutException(request);<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>                request.getFuture().setException(cause);<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>                session.getFilterChain().fireExceptionCaught(cause);<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>                // WriteException is an IOException, so we close the session.<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>                session.closeNow();<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>            }<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
<span class="sourceLineNo">1420</span>}<a name="line.1420"></a>




























































</pre>
</div>
</body>
</html>
