<!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.polling;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.net.SocketAddress;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.nio.channels.ClosedSelectorException;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.nio.channels.spi.SelectorProvider;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.HashMap;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import java.util.Iterator;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import java.util.Queue;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.Set;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.concurrent.ConcurrentLinkedQueue;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.concurrent.Executor;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.concurrent.Executors;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import java.util.concurrent.Semaphore;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.38"></a>
<span class="sourceLineNo">039</span><a name="line.39"></a>
<span class="sourceLineNo">040</span>import org.apache.mina.core.RuntimeIoException;<a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.mina.core.filterchain.IoFilter;<a name="line.41"></a>
<span class="sourceLineNo">042</span>import org.apache.mina.core.service.AbstractIoAcceptor;<a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.mina.core.service.AbstractIoService;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.mina.core.service.IoAcceptor;<a name="line.44"></a>
<span class="sourceLineNo">045</span>import org.apache.mina.core.service.IoHandler;<a name="line.45"></a>
<span class="sourceLineNo">046</span>import org.apache.mina.core.service.IoProcessor;<a name="line.46"></a>
<span class="sourceLineNo">047</span>import org.apache.mina.core.service.SimpleIoProcessorPool;<a name="line.47"></a>
<span class="sourceLineNo">048</span>import org.apache.mina.core.session.AbstractIoSession;<a name="line.48"></a>
<span class="sourceLineNo">049</span>import org.apache.mina.core.session.IoSession;<a name="line.49"></a>
<span class="sourceLineNo">050</span>import org.apache.mina.core.session.IoSessionConfig;<a name="line.50"></a>
<span class="sourceLineNo">051</span>import org.apache.mina.transport.socket.SocketSessionConfig;<a name="line.51"></a>
<span class="sourceLineNo">052</span>import org.apache.mina.transport.socket.nio.NioSocketAcceptor;<a name="line.52"></a>
<span class="sourceLineNo">053</span>import org.apache.mina.util.ExceptionMonitor;<a name="line.53"></a>
<span class="sourceLineNo">054</span><a name="line.54"></a>
<span class="sourceLineNo">055</span>/**<a name="line.55"></a>
<span class="sourceLineNo">056</span> * A base class for implementing transport using a polling strategy. The<a name="line.56"></a>
<span class="sourceLineNo">057</span> * underlying sockets will be checked in an active loop and woke up when an<a name="line.57"></a>
<span class="sourceLineNo">058</span> * socket needed to be processed. This class handle the logic behind binding,<a name="line.58"></a>
<span class="sourceLineNo">059</span> * accepting and disposing the server sockets. An {@link Executor} will be used<a name="line.59"></a>
<span class="sourceLineNo">060</span> * for running client accepting and an {@link AbstractPollingIoProcessor} will<a name="line.60"></a>
<span class="sourceLineNo">061</span> * be used for processing client I/O operations like reading, writing and<a name="line.61"></a>
<span class="sourceLineNo">062</span> * closing.<a name="line.62"></a>
<span class="sourceLineNo">063</span> * <a name="line.63"></a>
<span class="sourceLineNo">064</span> * All the low level methods for binding, accepting, closing need to be provided<a name="line.64"></a>
<span class="sourceLineNo">065</span> * by the subclassing implementation.<a name="line.65"></a>
<span class="sourceLineNo">066</span> * <a name="line.66"></a>
<span class="sourceLineNo">067</span> * @see NioSocketAcceptor for a example of implementation<a name="line.67"></a>
<span class="sourceLineNo">068</span> * <a name="line.68"></a>
<span class="sourceLineNo">069</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.69"></a>
<span class="sourceLineNo">070</span> */<a name="line.70"></a>
<span class="sourceLineNo">071</span>public abstract class AbstractPollingIoAcceptor&lt;S extends AbstractIoSession, H&gt; extends AbstractIoAcceptor {<a name="line.71"></a>
<span class="sourceLineNo">072</span>    /** A lock used to protect the selector to be waked up before it's created */<a name="line.72"></a>
<span class="sourceLineNo">073</span>    private final Semaphore lock = new Semaphore(1);<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>    private final IoProcessor&lt;S&gt; processor;<a name="line.75"></a>
<span class="sourceLineNo">076</span><a name="line.76"></a>
<span class="sourceLineNo">077</span>    private final boolean createdProcessor;<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    private final Queue&lt;AcceptorOperationFuture&gt; registerQueue = new ConcurrentLinkedQueue&lt;&gt;();<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    private final Queue&lt;AcceptorOperationFuture&gt; cancelQueue = new ConcurrentLinkedQueue&lt;&gt;();<a name="line.81"></a>
<span class="sourceLineNo">082</span><a name="line.82"></a>
<span class="sourceLineNo">083</span>    private final Map&lt;SocketAddress, H&gt; boundHandles = Collections.synchronizedMap(new HashMap&lt;SocketAddress, H&gt;());<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>    private final ServiceOperationFuture disposalFuture = new ServiceOperationFuture();<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    /** A flag set when the acceptor has been created and initialized */<a name="line.87"></a>
<span class="sourceLineNo">088</span>    private volatile boolean selectable;<a name="line.88"></a>
<span class="sourceLineNo">089</span><a name="line.89"></a>
<span class="sourceLineNo">090</span>    /** The thread responsible of accepting incoming requests */<a name="line.90"></a>
<span class="sourceLineNo">091</span>    private AtomicReference&lt;Acceptor&gt; acceptorRef = new AtomicReference&lt;&gt;();<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    protected boolean reuseAddress = false;<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span>    /**<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * Define the number of socket that can wait to be accepted. Default<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * to 50 (as in the SocketServer default).<a name="line.97"></a>
<span class="sourceLineNo">098</span>     */<a name="line.98"></a>
<span class="sourceLineNo">099</span>    protected int backlog = 50;<a name="line.99"></a>
<span class="sourceLineNo">100</span><a name="line.100"></a>
<span class="sourceLineNo">101</span>    /**<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a default<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * session configuration, a class of {@link IoProcessor} which will be instantiated in a<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * {@link SimpleIoProcessorPool} for better scaling in multiprocessor systems. The default<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * pool size will be used.<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * <a name="line.106"></a>
<span class="sourceLineNo">107</span>     * @see SimpleIoProcessorPool<a name="line.107"></a>
<span class="sourceLineNo">108</span>     * <a name="line.108"></a>
<span class="sourceLineNo">109</span>     * @param sessionConfig<a name="line.109"></a>
<span class="sourceLineNo">110</span>     *            the default configuration for the managed {@link IoSession}<a name="line.110"></a>
<span class="sourceLineNo">111</span>     * @param processorClass a {@link Class} of {@link IoProcessor} for the associated {@link IoSession}<a name="line.111"></a>
<span class="sourceLineNo">112</span>     *            type.<a name="line.112"></a>
<span class="sourceLineNo">113</span>     */<a name="line.113"></a>
<span class="sourceLineNo">114</span>    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class&lt;? extends IoProcessor&lt;S&gt;&gt; processorClass) {<a name="line.114"></a>
<span class="sourceLineNo">115</span>        this(sessionConfig, null, new SimpleIoProcessorPool&lt;S&gt;(processorClass), true, null);<a name="line.115"></a>
<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
<span class="sourceLineNo">117</span><a name="line.117"></a>
<span class="sourceLineNo">118</span>    /**<a name="line.118"></a>
<span class="sourceLineNo">119</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a default<a name="line.119"></a>
<span class="sourceLineNo">120</span>     * session configuration, a class of {@link IoProcessor} which will be instantiated in a<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * {@link SimpleIoProcessorPool} for using multiple thread for better scaling in multiprocessor<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * systems.<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * <a name="line.123"></a>
<span class="sourceLineNo">124</span>     * @see SimpleIoProcessorPool<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * <a name="line.125"></a>
<span class="sourceLineNo">126</span>     * @param sessionConfig<a name="line.126"></a>
<span class="sourceLineNo">127</span>     *            the default configuration for the managed {@link IoSession}<a name="line.127"></a>
<span class="sourceLineNo">128</span>     * @param processorClass a {@link Class} of {@link IoProcessor} for the associated {@link IoSession}<a name="line.128"></a>
<span class="sourceLineNo">129</span>     *            type.<a name="line.129"></a>
<span class="sourceLineNo">130</span>     * @param processorCount the amount of processor to instantiate for the pool<a name="line.130"></a>
<span class="sourceLineNo">131</span>     */<a name="line.131"></a>
<span class="sourceLineNo">132</span>    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class&lt;? extends IoProcessor&lt;S&gt;&gt; processorClass,<a name="line.132"></a>
<span class="sourceLineNo">133</span>            int processorCount) {<a name="line.133"></a>
<span class="sourceLineNo">134</span>        this(sessionConfig, null, new SimpleIoProcessorPool&lt;S&gt;(processorClass, processorCount), true, null);<a name="line.134"></a>
<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
<span class="sourceLineNo">136</span><a name="line.136"></a>
<span class="sourceLineNo">137</span>    /**<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a default<a name="line.138"></a>
<span class="sourceLineNo">139</span>     * session configuration, a class of {@link IoProcessor} which will be instantiated in a<a name="line.139"></a>
<span class="sourceLineNo">140</span>     * {@link SimpleIoProcessorPool} for using multiple thread for better scaling in multiprocessor<a name="line.140"></a>
<span class="sourceLineNo">141</span>     * systems.<a name="line.141"></a>
<span class="sourceLineNo">142</span>     *<a name="line.142"></a>
<span class="sourceLineNo">143</span>     * @see SimpleIoProcessorPool<a name="line.143"></a>
<span class="sourceLineNo">144</span>     *<a name="line.144"></a>
<span class="sourceLineNo">145</span>     * @param sessionConfig<a name="line.145"></a>
<span class="sourceLineNo">146</span>     *            the default configuration for the managed {@link IoSession}<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * @param processorClass a {@link Class}�of {@link IoProcessor} for the associated {@link IoSession}<a name="line.147"></a>
<span class="sourceLineNo">148</span>     *            type.<a name="line.148"></a>
<span class="sourceLineNo">149</span>     * @param processorCount the amount of processor to instantiate for the pool<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * @param selectorProvider The SelectorProvider to use<a name="line.150"></a>
<span class="sourceLineNo">151</span>     */<a name="line.151"></a>
<span class="sourceLineNo">152</span>    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Class&lt;? extends IoProcessor&lt;S&gt;&gt; processorClass,<a name="line.152"></a>
<span class="sourceLineNo">153</span>            int processorCount, SelectorProvider selectorProvider ) {<a name="line.153"></a>
<span class="sourceLineNo">154</span>        this(sessionConfig, null, new SimpleIoProcessorPool&lt;S&gt;(processorClass, processorCount, selectorProvider), true, selectorProvider);<a name="line.154"></a>
<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span>    /**<a name="line.157"></a>
<span class="sourceLineNo">158</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a default<a name="line.158"></a>
<span class="sourceLineNo">159</span>     * session configuration, a default {@link Executor} will be created using<a name="line.159"></a>
<span class="sourceLineNo">160</span>     * {@link Executors#newCachedThreadPool()}.<a name="line.160"></a>
<span class="sourceLineNo">161</span>     * <a name="line.161"></a>
<span class="sourceLineNo">162</span>     * @see AbstractIoService<a name="line.162"></a>
<span class="sourceLineNo">163</span>     * <a name="line.163"></a>
<span class="sourceLineNo">164</span>     * @param sessionConfig<a name="line.164"></a>
<span class="sourceLineNo">165</span>     *            the default configuration for the managed {@link IoSession}<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * @param processor the {@link IoProcessor} for processing the {@link IoSession} of this transport, triggering<a name="line.166"></a>
<span class="sourceLineNo">167</span>     *            events to the bound {@link IoHandler} and processing the chains of {@link IoFilter}<a name="line.167"></a>
<span class="sourceLineNo">168</span>     */<a name="line.168"></a>
<span class="sourceLineNo">169</span>    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, IoProcessor&lt;S&gt; processor) {<a name="line.169"></a>
<span class="sourceLineNo">170</span>        this(sessionConfig, null, processor, false, null);<a name="line.170"></a>
<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>    /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * default session configuration and an {@link Executor} for handling I/O<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * events. If a null {@link Executor} is provided, a default one will be<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * created using {@link Executors#newCachedThreadPool()}.<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * <a name="line.178"></a>
<span class="sourceLineNo">179</span>     * @see AbstractIoService#AbstractIoService(IoSessionConfig, Executor)<a name="line.179"></a>
<span class="sourceLineNo">180</span>     * <a name="line.180"></a>
<span class="sourceLineNo">181</span>     * @param sessionConfig<a name="line.181"></a>
<span class="sourceLineNo">182</span>     *            the default configuration for the managed {@link IoSession}<a name="line.182"></a>
<span class="sourceLineNo">183</span>     * @param executor<a name="line.183"></a>
<span class="sourceLineNo">184</span>     *            the {@link Executor} used for handling asynchronous execution<a name="line.184"></a>
<span class="sourceLineNo">185</span>     *            of I/O events. Can be &lt;code&gt;null&lt;/code&gt;.<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * @param processor<a name="line.186"></a>
<span class="sourceLineNo">187</span>     *            the {@link IoProcessor} for processing the {@link IoSession}<a name="line.187"></a>
<span class="sourceLineNo">188</span>     *            of this transport, triggering events to the bound<a name="line.188"></a>
<span class="sourceLineNo">189</span>     *            {@link IoHandler} and processing the chains of<a name="line.189"></a>
<span class="sourceLineNo">190</span>     *            {@link IoFilter}<a name="line.190"></a>
<span class="sourceLineNo">191</span>     */<a name="line.191"></a>
<span class="sourceLineNo">192</span>    protected AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Executor executor, IoProcessor&lt;S&gt; processor) {<a name="line.192"></a>
<span class="sourceLineNo">193</span>        this(sessionConfig, executor, processor, false, null);<a name="line.193"></a>
<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
<span class="sourceLineNo">195</span><a name="line.195"></a>
<span class="sourceLineNo">196</span>    /**<a name="line.196"></a>
<span class="sourceLineNo">197</span>     * Constructor for {@link AbstractPollingIoAcceptor}. You need to provide a<a name="line.197"></a>
<span class="sourceLineNo">198</span>     * default session configuration and an {@link Executor} for handling I/O<a name="line.198"></a>
<span class="sourceLineNo">199</span>     * events. If a null {@link Executor} is provided, a default one will be<a name="line.199"></a>
<span class="sourceLineNo">200</span>     * created using {@link Executors#newCachedThreadPool()}.<a name="line.200"></a>
<span class="sourceLineNo">201</span>     * <a name="line.201"></a>
<span class="sourceLineNo">202</span>     * @see AbstractIoService(IoSessionConfig, Executor)<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * <a name="line.203"></a>
<span class="sourceLineNo">204</span>     * @param sessionConfig<a name="line.204"></a>
<span class="sourceLineNo">205</span>     *            the default configuration for the managed {@link IoSession}<a name="line.205"></a>
<span class="sourceLineNo">206</span>     * @param executor<a name="line.206"></a>
<span class="sourceLineNo">207</span>     *            the {@link Executor} used for handling asynchronous execution<a name="line.207"></a>
<span class="sourceLineNo">208</span>     *            of I/O events. Can be &lt;code&gt;null&lt;/code&gt;.<a name="line.208"></a>
<span class="sourceLineNo">209</span>     * @param processor<a name="line.209"></a>
<span class="sourceLineNo">210</span>     *            the {@link IoProcessor} for processing the {@link IoSession}<a name="line.210"></a>
<span class="sourceLineNo">211</span>     *            of this transport, triggering events to the bound<a name="line.211"></a>
<span class="sourceLineNo">212</span>     *            {@link IoHandler} and processing the chains of<a name="line.212"></a>
<span class="sourceLineNo">213</span>     *            {@link IoFilter}<a name="line.213"></a>
<span class="sourceLineNo">214</span>     * @param createdProcessor<a name="line.214"></a>
<span class="sourceLineNo">215</span>     *            tagging the processor as automatically created, so it will be<a name="line.215"></a>
<span class="sourceLineNo">216</span>     *            automatically disposed<a name="line.216"></a>
<span class="sourceLineNo">217</span>     */<a name="line.217"></a>
<span class="sourceLineNo">218</span>    private AbstractPollingIoAcceptor(IoSessionConfig sessionConfig, Executor executor, IoProcessor&lt;S&gt; processor,<a name="line.218"></a>
<span class="sourceLineNo">219</span>            boolean createdProcessor, SelectorProvider selectorProvider) {<a name="line.219"></a>
<span class="sourceLineNo">220</span>        super(sessionConfig, executor);<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>        if (processor == null) {<a name="line.222"></a>
<span class="sourceLineNo">223</span>            throw new IllegalArgumentException("processor");<a name="line.223"></a>
<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
<span class="sourceLineNo">225</span><a name="line.225"></a>
<span class="sourceLineNo">226</span>        this.processor = processor;<a name="line.226"></a>
<span class="sourceLineNo">227</span>        this.createdProcessor = createdProcessor;<a name="line.227"></a>
<span class="sourceLineNo">228</span><a name="line.228"></a>
<span class="sourceLineNo">229</span>        try {<a name="line.229"></a>
<span class="sourceLineNo">230</span>            // Initialize the selector<a name="line.230"></a>
<span class="sourceLineNo">231</span>            init(selectorProvider);<a name="line.231"></a>
<span class="sourceLineNo">232</span><a name="line.232"></a>
<span class="sourceLineNo">233</span>            // The selector is now ready, we can switch the<a name="line.233"></a>
<span class="sourceLineNo">234</span>            // flag to true so that incoming connection can be accepted<a name="line.234"></a>
<span class="sourceLineNo">235</span>            selectable = true;<a name="line.235"></a>
<span class="sourceLineNo">236</span>        } catch (RuntimeException e) {<a name="line.236"></a>
<span class="sourceLineNo">237</span>            throw e;<a name="line.237"></a>
<span class="sourceLineNo">238</span>        } catch (Exception e) {<a name="line.238"></a>
<span class="sourceLineNo">239</span>            throw new RuntimeIoException("Failed to initialize.", e);<a name="line.239"></a>
<span class="sourceLineNo">240</span>        } finally {<a name="line.240"></a>
<span class="sourceLineNo">241</span>            if (!selectable) {<a name="line.241"></a>
<span class="sourceLineNo">242</span>                try {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                    destroy();<a name="line.243"></a>
<span class="sourceLineNo">244</span>                } catch (Exception e) {<a name="line.244"></a>
<span class="sourceLineNo">245</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.245"></a>
<span class="sourceLineNo">246</span>                }<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><a name="line.250"></a>
<span class="sourceLineNo">251</span>    /**<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * Initialize the polling system, will be called at construction time.<a name="line.252"></a>
<span class="sourceLineNo">253</span>     * @throws Exception any exception thrown by the underlying system calls<a name="line.253"></a>
<span class="sourceLineNo">254</span>     */<a name="line.254"></a>
<span class="sourceLineNo">255</span>    protected abstract void init() throws Exception;<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>     * Initialize the polling system, will be called at construction time.<a name="line.258"></a>
<span class="sourceLineNo">259</span>     * <a name="line.259"></a>
<span class="sourceLineNo">260</span>     * @param selectorProvider The Selector Provider that will be used by this polling acceptor<a name="line.260"></a>
<span class="sourceLineNo">261</span>     * @throws Exception any exception thrown by the underlying system calls<a name="line.261"></a>
<span class="sourceLineNo">262</span>     */<a name="line.262"></a>
<span class="sourceLineNo">263</span>    protected abstract void init(SelectorProvider selectorProvider) throws Exception;<a name="line.263"></a>
<span class="sourceLineNo">264</span><a name="line.264"></a>
<span class="sourceLineNo">265</span>    /**<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * Destroy the polling system, will be called when this {@link IoAcceptor}<a name="line.266"></a>
<span class="sourceLineNo">267</span>     * implementation will be disposed.<a name="line.267"></a>
<span class="sourceLineNo">268</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.268"></a>
<span class="sourceLineNo">269</span>     */<a name="line.269"></a>
<span class="sourceLineNo">270</span>    protected abstract void destroy() throws Exception;<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>     * Check for acceptable connections, interrupt when at least a server is ready for accepting.<a name="line.273"></a>
<span class="sourceLineNo">274</span>     * All the ready server socket descriptors need to be returned by {@link #selectedHandles()}<a name="line.274"></a>
<span class="sourceLineNo">275</span>     * @return The number of sockets having got incoming client<a name="line.275"></a>
<span class="sourceLineNo">276</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.276"></a>
<span class="sourceLineNo">277</span>     */<a name="line.277"></a>
<span class="sourceLineNo">278</span>    protected abstract int select() throws Exception;<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>     * Interrupt the {@link #select()} method. Used when the poll set need to be modified.<a name="line.281"></a>
<span class="sourceLineNo">282</span>     */<a name="line.282"></a>
<span class="sourceLineNo">283</span>    protected abstract void wakeup();<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>    /**<a name="line.285"></a>
<span class="sourceLineNo">286</span>     * {@link Iterator} for the set of server sockets found with acceptable incoming connections<a name="line.286"></a>
<span class="sourceLineNo">287</span>     *  during the last {@link #select()} call.<a name="line.287"></a>
<span class="sourceLineNo">288</span>     * @return the list of server handles ready<a name="line.288"></a>
<span class="sourceLineNo">289</span>     */<a name="line.289"></a>
<span class="sourceLineNo">290</span>    protected abstract Iterator&lt;H&gt; selectedHandles();<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
<span class="sourceLineNo">292</span>    /**<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * Open a server socket for a given local address.<a name="line.293"></a>
<span class="sourceLineNo">294</span>     * @param localAddress the associated local address<a name="line.294"></a>
<span class="sourceLineNo">295</span>     * @return the opened server socket<a name="line.295"></a>
<span class="sourceLineNo">296</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.296"></a>
<span class="sourceLineNo">297</span>     */<a name="line.297"></a>
<span class="sourceLineNo">298</span>    protected abstract H open(SocketAddress localAddress) throws Exception;<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>    /**<a name="line.300"></a>
<span class="sourceLineNo">301</span>     * Get the local address associated with a given server socket<a name="line.301"></a>
<span class="sourceLineNo">302</span>     * @param handle the server socket<a name="line.302"></a>
<span class="sourceLineNo">303</span>     * @return the local {@link SocketAddress} associated with this handle<a name="line.303"></a>
<span class="sourceLineNo">304</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.304"></a>
<span class="sourceLineNo">305</span>     */<a name="line.305"></a>
<span class="sourceLineNo">306</span>    protected abstract SocketAddress localAddress(H handle) throws Exception;<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>     * Accept a client connection for a server socket and return a new {@link IoSession}<a name="line.309"></a>
<span class="sourceLineNo">310</span>     * associated with the given {@link IoProcessor}<a name="line.310"></a>
<span class="sourceLineNo">311</span>     * @param processor the {@link IoProcessor} to associate with the {@link IoSession}<a name="line.311"></a>
<span class="sourceLineNo">312</span>     * @param handle the server handle<a name="line.312"></a>
<span class="sourceLineNo">313</span>     * @return the created {@link IoSession}<a name="line.313"></a>
<span class="sourceLineNo">314</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.314"></a>
<span class="sourceLineNo">315</span>     */<a name="line.315"></a>
<span class="sourceLineNo">316</span>    protected abstract S accept(IoProcessor&lt;S&gt; processor, H handle) throws Exception;<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>     * Close a server socket.<a name="line.319"></a>
<span class="sourceLineNo">320</span>     * @param handle the server socket<a name="line.320"></a>
<span class="sourceLineNo">321</span>     * @throws Exception any exception thrown by the underlying systems calls<a name="line.321"></a>
<span class="sourceLineNo">322</span>     */<a name="line.322"></a>
<span class="sourceLineNo">323</span>    protected abstract void close(H handle) throws Exception;<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>     * {@inheritDoc}<a name="line.326"></a>
<span class="sourceLineNo">327</span>     */<a name="line.327"></a>
<span class="sourceLineNo">328</span>    @Override<a name="line.328"></a>
<span class="sourceLineNo">329</span>    protected void dispose0() throws Exception {<a name="line.329"></a>
<span class="sourceLineNo">330</span>        unbind();<a name="line.330"></a>
<span class="sourceLineNo">331</span><a name="line.331"></a>
<span class="sourceLineNo">332</span>        startupAcceptor();<a name="line.332"></a>
<span class="sourceLineNo">333</span>        wakeup();<a name="line.333"></a>
<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
<span class="sourceLineNo">335</span><a name="line.335"></a>
<span class="sourceLineNo">336</span>    /**<a name="line.336"></a>
<span class="sourceLineNo">337</span>     * {@inheritDoc}<a name="line.337"></a>
<span class="sourceLineNo">338</span>     */<a name="line.338"></a>
<span class="sourceLineNo">339</span>    @Override<a name="line.339"></a>
<span class="sourceLineNo">340</span>    protected final Set&lt;SocketAddress&gt; bindInternal(List&lt;? extends SocketAddress&gt; localAddresses) throws Exception {<a name="line.340"></a>
<span class="sourceLineNo">341</span>        // Create a bind request as a Future operation. When the selector<a name="line.341"></a>
<span class="sourceLineNo">342</span>        // have handled the registration, it will signal this future.<a name="line.342"></a>
<span class="sourceLineNo">343</span>        AcceptorOperationFuture request = new AcceptorOperationFuture(localAddresses);<a name="line.343"></a>
<span class="sourceLineNo">344</span><a name="line.344"></a>
<span class="sourceLineNo">345</span>        // adds the Registration request to the queue for the Workers<a name="line.345"></a>
<span class="sourceLineNo">346</span>        // to handle<a name="line.346"></a>
<span class="sourceLineNo">347</span>        registerQueue.add(request);<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>        // creates the Acceptor instance and has the local<a name="line.349"></a>
<span class="sourceLineNo">350</span>        // executor kick it off.<a name="line.350"></a>
<span class="sourceLineNo">351</span>        startupAcceptor();<a name="line.351"></a>
<span class="sourceLineNo">352</span><a name="line.352"></a>
<span class="sourceLineNo">353</span>        // As we just started the acceptor, we have to unblock the select()<a name="line.353"></a>
<span class="sourceLineNo">354</span>        // in order to process the bind request we just have added to the<a name="line.354"></a>
<span class="sourceLineNo">355</span>        // registerQueue.<a name="line.355"></a>
<span class="sourceLineNo">356</span>        try {<a name="line.356"></a>
<span class="sourceLineNo">357</span>            lock.acquire();<a name="line.357"></a>
<span class="sourceLineNo">358</span><a name="line.358"></a>
<span class="sourceLineNo">359</span>            wakeup();<a name="line.359"></a>
<span class="sourceLineNo">360</span>        } finally {<a name="line.360"></a>
<span class="sourceLineNo">361</span>            lock.release();<a name="line.361"></a>
<span class="sourceLineNo">362</span>        }<a name="line.362"></a>
<span class="sourceLineNo">363</span><a name="line.363"></a>
<span class="sourceLineNo">364</span>        // Now, we wait until this request is completed.<a name="line.364"></a>
<span class="sourceLineNo">365</span>        request.awaitUninterruptibly();<a name="line.365"></a>
<span class="sourceLineNo">366</span><a name="line.366"></a>
<span class="sourceLineNo">367</span>        if (request.getException() != null) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>            throw request.getException();<a name="line.368"></a>
<span class="sourceLineNo">369</span>        }<a name="line.369"></a>
<span class="sourceLineNo">370</span><a name="line.370"></a>
<span class="sourceLineNo">371</span>        // Update the local addresses.<a name="line.371"></a>
<span class="sourceLineNo">372</span>        // setLocalAddresses() shouldn't be called from the worker thread<a name="line.372"></a>
<span class="sourceLineNo">373</span>        // because of deadlock.<a name="line.373"></a>
<span class="sourceLineNo">374</span>        Set&lt;SocketAddress&gt; newLocalAddresses = new HashSet&lt;&gt;();<a name="line.374"></a>
<span class="sourceLineNo">375</span><a name="line.375"></a>
<span class="sourceLineNo">376</span>        for (H handle : boundHandles.values()) {<a name="line.376"></a>
<span class="sourceLineNo">377</span>            newLocalAddresses.add(localAddress(handle));<a name="line.377"></a>
<span class="sourceLineNo">378</span>        }<a name="line.378"></a>
<span class="sourceLineNo">379</span><a name="line.379"></a>
<span class="sourceLineNo">380</span>        return newLocalAddresses;<a name="line.380"></a>
<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
<span class="sourceLineNo">382</span><a name="line.382"></a>
<span class="sourceLineNo">383</span>    /**<a name="line.383"></a>
<span class="sourceLineNo">384</span>     * This method is called by the doBind() and doUnbind()<a name="line.384"></a>
<span class="sourceLineNo">385</span>     * methods.  If the acceptor is null, the acceptor object will<a name="line.385"></a>
<span class="sourceLineNo">386</span>     * be created and kicked off by the executor.  If the acceptor<a name="line.386"></a>
<span class="sourceLineNo">387</span>     * object is null, probably already created and this class<a name="line.387"></a>
<span class="sourceLineNo">388</span>     * is now working, then nothing will happen and the method<a name="line.388"></a>
<span class="sourceLineNo">389</span>     * will just return.<a name="line.389"></a>
<span class="sourceLineNo">390</span>     */<a name="line.390"></a>
<span class="sourceLineNo">391</span>    private void startupAcceptor() throws InterruptedException {<a name="line.391"></a>
<span class="sourceLineNo">392</span>        // If the acceptor is not ready, clear the queues<a name="line.392"></a>
<span class="sourceLineNo">393</span>        // TODO : they should already be clean : do we have to do that ?<a name="line.393"></a>
<span class="sourceLineNo">394</span>        if (!selectable) {<a name="line.394"></a>
<span class="sourceLineNo">395</span>            registerQueue.clear();<a name="line.395"></a>
<span class="sourceLineNo">396</span>            cancelQueue.clear();<a name="line.396"></a>
<span class="sourceLineNo">397</span>        }<a name="line.397"></a>
<span class="sourceLineNo">398</span><a name="line.398"></a>
<span class="sourceLineNo">399</span>        // start the acceptor if not already started<a name="line.399"></a>
<span class="sourceLineNo">400</span>        Acceptor acceptor = acceptorRef.get();<a name="line.400"></a>
<span class="sourceLineNo">401</span><a name="line.401"></a>
<span class="sourceLineNo">402</span>        if (acceptor == null) {<a name="line.402"></a>
<span class="sourceLineNo">403</span>            lock.acquire();<a name="line.403"></a>
<span class="sourceLineNo">404</span>            acceptor = new Acceptor();<a name="line.404"></a>
<span class="sourceLineNo">405</span><a name="line.405"></a>
<span class="sourceLineNo">406</span>            if (acceptorRef.compareAndSet(null, acceptor)) {<a name="line.406"></a>
<span class="sourceLineNo">407</span>                executeWorker(acceptor);<a name="line.407"></a>
<span class="sourceLineNo">408</span>            } else {<a name="line.408"></a>
<span class="sourceLineNo">409</span>                lock.release();<a name="line.409"></a>
<span class="sourceLineNo">410</span>            }<a name="line.410"></a>
<span class="sourceLineNo">411</span>        }<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>     * {@inheritDoc}<a name="line.415"></a>
<span class="sourceLineNo">416</span>     */<a name="line.416"></a>
<span class="sourceLineNo">417</span>    @Override<a name="line.417"></a>
<span class="sourceLineNo">418</span>    protected final void unbind0(List&lt;? extends SocketAddress&gt; localAddresses) throws Exception {<a name="line.418"></a>
<span class="sourceLineNo">419</span>        AcceptorOperationFuture future = new AcceptorOperationFuture(localAddresses);<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>        cancelQueue.add(future);<a name="line.421"></a>
<span class="sourceLineNo">422</span>        startupAcceptor();<a name="line.422"></a>
<span class="sourceLineNo">423</span>        wakeup();<a name="line.423"></a>
<span class="sourceLineNo">424</span><a name="line.424"></a>
<span class="sourceLineNo">425</span>        future.awaitUninterruptibly();<a name="line.425"></a>
<span class="sourceLineNo">426</span>        if (future.getException() != null) {<a name="line.426"></a>
<span class="sourceLineNo">427</span>            throw future.getException();<a name="line.427"></a>
<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>    /**<a name="line.431"></a>
<span class="sourceLineNo">432</span>     * This class is called by the startupAcceptor() method and is<a name="line.432"></a>
<span class="sourceLineNo">433</span>     * placed into a NamePreservingRunnable class.<a name="line.433"></a>
<span class="sourceLineNo">434</span>     * It's a thread accepting incoming connections from clients.<a name="line.434"></a>
<span class="sourceLineNo">435</span>     * The loop is stopped when all the bound handlers are unbound.<a name="line.435"></a>
<span class="sourceLineNo">436</span>     */<a name="line.436"></a>
<span class="sourceLineNo">437</span>    private class Acceptor implements Runnable {<a name="line.437"></a>
<span class="sourceLineNo">438</span>        public void run() {<a name="line.438"></a>
<span class="sourceLineNo">439</span>            assert (acceptorRef.get() == this);<a name="line.439"></a>
<span class="sourceLineNo">440</span><a name="line.440"></a>
<span class="sourceLineNo">441</span>            int nHandles = 0;<a name="line.441"></a>
<span class="sourceLineNo">442</span><a name="line.442"></a>
<span class="sourceLineNo">443</span>            // Release the lock<a name="line.443"></a>
<span class="sourceLineNo">444</span>            lock.release();<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>            while (selectable) {<a name="line.446"></a>
<span class="sourceLineNo">447</span>                try {<a name="line.447"></a>
<span class="sourceLineNo">448</span>                    // Process the bound sockets to this acceptor.<a name="line.448"></a>
<span class="sourceLineNo">449</span>                    // this actually sets the selector to OP_ACCEPT,<a name="line.449"></a>
<span class="sourceLineNo">450</span>                    // and binds to the port on which this class will<a name="line.450"></a>
<span class="sourceLineNo">451</span>                    // listen on. We do that before the select because <a name="line.451"></a>
<span class="sourceLineNo">452</span>                    // the registerQueue containing the new handler is<a name="line.452"></a>
<span class="sourceLineNo">453</span>                    // already updated at this point.<a name="line.453"></a>
<span class="sourceLineNo">454</span>                    nHandles += registerHandles();<a name="line.454"></a>
<span class="sourceLineNo">455</span><a name="line.455"></a>
<span class="sourceLineNo">456</span>                    // Detect if we have some keys ready to be processed<a name="line.456"></a>
<span class="sourceLineNo">457</span>                    // The select() will be woke up if some new connection<a name="line.457"></a>
<span class="sourceLineNo">458</span>                    // have occurred, or if the selector has been explicitly<a name="line.458"></a>
<span class="sourceLineNo">459</span>                    // woke up<a name="line.459"></a>
<span class="sourceLineNo">460</span>                    int selected = select();<a name="line.460"></a>
<span class="sourceLineNo">461</span><a name="line.461"></a>
<span class="sourceLineNo">462</span>                    // Now, if the number of registred handles is 0, we can<a name="line.462"></a>
<span class="sourceLineNo">463</span>                    // quit the loop: we don't have any socket listening<a name="line.463"></a>
<span class="sourceLineNo">464</span>                    // for incoming connection.<a name="line.464"></a>
<span class="sourceLineNo">465</span>                    if (nHandles == 0) {<a name="line.465"></a>
<span class="sourceLineNo">466</span>                        acceptorRef.set(null);<a name="line.466"></a>
<span class="sourceLineNo">467</span><a name="line.467"></a>
<span class="sourceLineNo">468</span>                        if (registerQueue.isEmpty() &amp;&amp; cancelQueue.isEmpty()) {<a name="line.468"></a>
<span class="sourceLineNo">469</span>                            assert (acceptorRef.get() != this);<a name="line.469"></a>
<span class="sourceLineNo">470</span>                            break;<a name="line.470"></a>
<span class="sourceLineNo">471</span>                        }<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>                        if (!acceptorRef.compareAndSet(null, this)) {<a name="line.473"></a>
<span class="sourceLineNo">474</span>                            assert (acceptorRef.get() != this);<a name="line.474"></a>
<span class="sourceLineNo">475</span>                            break;<a name="line.475"></a>
<span class="sourceLineNo">476</span>                        }<a name="line.476"></a>
<span class="sourceLineNo">477</span><a name="line.477"></a>
<span class="sourceLineNo">478</span>                        assert (acceptorRef.get() == this);<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>                    if (selected &gt; 0) {<a name="line.481"></a>
<span class="sourceLineNo">482</span>                        // We have some connection request, let's process<a name="line.482"></a>
<span class="sourceLineNo">483</span>                        // them here.<a name="line.483"></a>
<span class="sourceLineNo">484</span>                        processHandles(selectedHandles());<a name="line.484"></a>
<span class="sourceLineNo">485</span>                    }<a name="line.485"></a>
<span class="sourceLineNo">486</span><a name="line.486"></a>
<span class="sourceLineNo">487</span>                    // check to see if any cancellation request has been made.<a name="line.487"></a>
<span class="sourceLineNo">488</span>                    nHandles -= unregisterHandles();<a name="line.488"></a>
<span class="sourceLineNo">489</span>                } catch (ClosedSelectorException cse) {<a name="line.489"></a>
<span class="sourceLineNo">490</span>                    // If the selector has been closed, we can exit the loop<a name="line.490"></a>
<span class="sourceLineNo">491</span>                    ExceptionMonitor.getInstance().exceptionCaught(cse);<a name="line.491"></a>
<span class="sourceLineNo">492</span>                    break;<a name="line.492"></a>
<span class="sourceLineNo">493</span>                } catch (Exception e) {<a name="line.493"></a>
<span class="sourceLineNo">494</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>                    try {<a name="line.496"></a>
<span class="sourceLineNo">497</span>                        Thread.sleep(1000);<a name="line.497"></a>
<span class="sourceLineNo">498</span>                    } catch (InterruptedException e1) {<a name="line.498"></a>
<span class="sourceLineNo">499</span>                        ExceptionMonitor.getInstance().exceptionCaught(e1);<a name="line.499"></a>
<span class="sourceLineNo">500</span>                    }<a name="line.500"></a>
<span class="sourceLineNo">501</span>                }<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>            // Cleanup all the processors, and shutdown the acceptor.<a name="line.504"></a>
<span class="sourceLineNo">505</span>            if (selectable &amp;&amp; isDisposing()) {<a name="line.505"></a>
<span class="sourceLineNo">506</span>                selectable = false;<a name="line.506"></a>
<span class="sourceLineNo">507</span>                try {<a name="line.507"></a>
<span class="sourceLineNo">508</span>                    if (createdProcessor) {<a name="line.508"></a>
<span class="sourceLineNo">509</span>                        processor.dispose();<a name="line.509"></a>
<span class="sourceLineNo">510</span>                    }<a name="line.510"></a>
<span class="sourceLineNo">511</span>                } finally {<a name="line.511"></a>
<span class="sourceLineNo">512</span>                    try {<a name="line.512"></a>
<span class="sourceLineNo">513</span>                        synchronized (disposalLock) {<a name="line.513"></a>
<span class="sourceLineNo">514</span>                            if (isDisposing()) {<a name="line.514"></a>
<span class="sourceLineNo">515</span>                                destroy();<a name="line.515"></a>
<span class="sourceLineNo">516</span>                            }<a name="line.516"></a>
<span class="sourceLineNo">517</span>                        }<a name="line.517"></a>
<span class="sourceLineNo">518</span>                    } catch (Exception e) {<a name="line.518"></a>
<span class="sourceLineNo">519</span>                        ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.519"></a>
<span class="sourceLineNo">520</span>                    } finally {<a name="line.520"></a>
<span class="sourceLineNo">521</span>                        disposalFuture.setDone();<a name="line.521"></a>
<span class="sourceLineNo">522</span>                    }<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>        }<a name="line.525"></a>
<span class="sourceLineNo">526</span><a name="line.526"></a>
<span class="sourceLineNo">527</span>        /**<a name="line.527"></a>
<span class="sourceLineNo">528</span>         * This method will process new sessions for the Worker class.  All<a name="line.528"></a>
<span class="sourceLineNo">529</span>         * keys that have had their status updates as per the Selector.selectedKeys()<a name="line.529"></a>
<span class="sourceLineNo">530</span>         * method will be processed here.  Only keys that are ready to accept<a name="line.530"></a>
<span class="sourceLineNo">531</span>         * connections are handled here.<a name="line.531"></a>
<span class="sourceLineNo">532</span>         * &lt;p/&gt;<a name="line.532"></a>
<span class="sourceLineNo">533</span>         * Session objects are created by making new instances of SocketSessionImpl<a name="line.533"></a>
<span class="sourceLineNo">534</span>         * and passing the session object to the SocketIoProcessor class.<a name="line.534"></a>
<span class="sourceLineNo">535</span>         */<a name="line.535"></a>
<span class="sourceLineNo">536</span>        @SuppressWarnings("unchecked")<a name="line.536"></a>
<span class="sourceLineNo">537</span>        private void processHandles(Iterator&lt;H&gt; handles) throws Exception {<a name="line.537"></a>
<span class="sourceLineNo">538</span>            while (handles.hasNext()) {<a name="line.538"></a>
<span class="sourceLineNo">539</span>                H handle = handles.next();<a name="line.539"></a>
<span class="sourceLineNo">540</span>                handles.remove();<a name="line.540"></a>
<span class="sourceLineNo">541</span><a name="line.541"></a>
<span class="sourceLineNo">542</span>                // Associates a new created connection to a processor,<a name="line.542"></a>
<span class="sourceLineNo">543</span>                // and get back a session<a name="line.543"></a>
<span class="sourceLineNo">544</span>                S session = accept(processor, handle);<a name="line.544"></a>
<span class="sourceLineNo">545</span><a name="line.545"></a>
<span class="sourceLineNo">546</span>                if (session == null) {<a name="line.546"></a>
<span class="sourceLineNo">547</span>                    continue;<a name="line.547"></a>
<span class="sourceLineNo">548</span>                }<a name="line.548"></a>
<span class="sourceLineNo">549</span><a name="line.549"></a>
<span class="sourceLineNo">550</span>                initSession(session, null, null);<a name="line.550"></a>
<span class="sourceLineNo">551</span><a name="line.551"></a>
<span class="sourceLineNo">552</span>                // add the session to the SocketIoProcessor<a name="line.552"></a>
<span class="sourceLineNo">553</span>                session.getProcessor().add(session);<a name="line.553"></a>
<span class="sourceLineNo">554</span>            }<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><a name="line.557"></a>
<span class="sourceLineNo">558</span>    /**<a name="line.558"></a>
<span class="sourceLineNo">559</span>     * Sets up the socket communications.  Sets items such as:<a name="line.559"></a>
<span class="sourceLineNo">560</span>     * &lt;p/&gt;<a name="line.560"></a>
<span class="sourceLineNo">561</span>     * Blocking<a name="line.561"></a>
<span class="sourceLineNo">562</span>     * Reuse address<a name="line.562"></a>
<span class="sourceLineNo">563</span>     * Receive buffer size<a name="line.563"></a>
<span class="sourceLineNo">564</span>     * Bind to listen port<a name="line.564"></a>
<span class="sourceLineNo">565</span>     * Registers OP_ACCEPT for selector<a name="line.565"></a>
<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
<span class="sourceLineNo">567</span>    private int registerHandles() {<a name="line.567"></a>
<span class="sourceLineNo">568</span>        for (;;) {<a name="line.568"></a>
<span class="sourceLineNo">569</span>            // The register queue contains the list of services to manage<a name="line.569"></a>
<span class="sourceLineNo">570</span>            // in this acceptor.<a name="line.570"></a>
<span class="sourceLineNo">571</span>            AcceptorOperationFuture future = registerQueue.poll();<a name="line.571"></a>
<span class="sourceLineNo">572</span><a name="line.572"></a>
<span class="sourceLineNo">573</span>            if (future == null) {<a name="line.573"></a>
<span class="sourceLineNo">574</span>                return 0;<a name="line.574"></a>
<span class="sourceLineNo">575</span>            }<a name="line.575"></a>
<span class="sourceLineNo">576</span><a name="line.576"></a>
<span class="sourceLineNo">577</span>            // We create a temporary map to store the bound handles,<a name="line.577"></a>
<span class="sourceLineNo">578</span>            // as we may have to remove them all if there is an exception<a name="line.578"></a>
<span class="sourceLineNo">579</span>            // during the sockets opening.<a name="line.579"></a>
<span class="sourceLineNo">580</span>            Map&lt;SocketAddress, H&gt; newHandles = new ConcurrentHashMap&lt;&gt;();<a name="line.580"></a>
<span class="sourceLineNo">581</span>            List&lt;SocketAddress&gt; localAddresses = future.getLocalAddresses();<a name="line.581"></a>
<span class="sourceLineNo">582</span><a name="line.582"></a>
<span class="sourceLineNo">583</span>            try {<a name="line.583"></a>
<span class="sourceLineNo">584</span>                // Process all the addresses<a name="line.584"></a>
<span class="sourceLineNo">585</span>                for (SocketAddress a : localAddresses) {<a name="line.585"></a>
<span class="sourceLineNo">586</span>                    H handle = open(a);<a name="line.586"></a>
<span class="sourceLineNo">587</span>                    newHandles.put(localAddress(handle), handle);<a name="line.587"></a>
<span class="sourceLineNo">588</span>                }<a name="line.588"></a>
<span class="sourceLineNo">589</span><a name="line.589"></a>
<span class="sourceLineNo">590</span>                // Everything went ok, we can now update the map storing<a name="line.590"></a>
<span class="sourceLineNo">591</span>                // all the bound sockets.<a name="line.591"></a>
<span class="sourceLineNo">592</span>                boundHandles.putAll(newHandles);<a name="line.592"></a>
<span class="sourceLineNo">593</span><a name="line.593"></a>
<span class="sourceLineNo">594</span>                // and notify.<a name="line.594"></a>
<span class="sourceLineNo">595</span>                future.setDone();<a name="line.595"></a>
<span class="sourceLineNo">596</span>                <a name="line.596"></a>
<span class="sourceLineNo">597</span>                return newHandles.size();<a name="line.597"></a>
<span class="sourceLineNo">598</span>            } catch (Exception e) {<a name="line.598"></a>
<span class="sourceLineNo">599</span>                // We store the exception in the future<a name="line.599"></a>
<span class="sourceLineNo">600</span>                future.setException(e);<a name="line.600"></a>
<span class="sourceLineNo">601</span>            } finally {<a name="line.601"></a>
<span class="sourceLineNo">602</span>                // Roll back if failed to bind all addresses.<a name="line.602"></a>
<span class="sourceLineNo">603</span>                if (future.getException() != null) {<a name="line.603"></a>
<span class="sourceLineNo">604</span>                    for (H handle : newHandles.values()) {<a name="line.604"></a>
<span class="sourceLineNo">605</span>                        try {<a name="line.605"></a>
<span class="sourceLineNo">606</span>                            close(handle);<a name="line.606"></a>
<span class="sourceLineNo">607</span>                        } catch (Exception e) {<a name="line.607"></a>
<span class="sourceLineNo">608</span>                            ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.608"></a>
<span class="sourceLineNo">609</span>                        }<a name="line.609"></a>
<span class="sourceLineNo">610</span>                    }<a name="line.610"></a>
<span class="sourceLineNo">611</span><a name="line.611"></a>
<span class="sourceLineNo">612</span>                    // Wake up the selector to be sure we will process the newly bound handle<a name="line.612"></a>
<span class="sourceLineNo">613</span>                    // and not block forever in the select()<a name="line.613"></a>
<span class="sourceLineNo">614</span>                    wakeup();<a name="line.614"></a>
<span class="sourceLineNo">615</span>                }<a name="line.615"></a>
<span class="sourceLineNo">616</span>            }<a name="line.616"></a>
<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
<span class="sourceLineNo">618</span>    }<a name="line.618"></a>
<span class="sourceLineNo">619</span><a name="line.619"></a>
<span class="sourceLineNo">620</span>    /**<a name="line.620"></a>
<span class="sourceLineNo">621</span>     * This method just checks to see if anything has been placed into the<a name="line.621"></a>
<span class="sourceLineNo">622</span>     * cancellation queue.  The only thing that should be in the cancelQueue<a name="line.622"></a>
<span class="sourceLineNo">623</span>     * is CancellationRequest objects and the only place this happens is in<a name="line.623"></a>
<span class="sourceLineNo">624</span>     * the doUnbind() method.<a name="line.624"></a>
<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
<span class="sourceLineNo">626</span>    private int unregisterHandles() {<a name="line.626"></a>
<span class="sourceLineNo">627</span>        int cancelledHandles = 0;<a name="line.627"></a>
<span class="sourceLineNo">628</span>        for (;;) {<a name="line.628"></a>
<span class="sourceLineNo">629</span>            AcceptorOperationFuture future = cancelQueue.poll();<a name="line.629"></a>
<span class="sourceLineNo">630</span>            if (future == null) {<a name="line.630"></a>
<span class="sourceLineNo">631</span>                break;<a name="line.631"></a>
<span class="sourceLineNo">632</span>            }<a name="line.632"></a>
<span class="sourceLineNo">633</span><a name="line.633"></a>
<span class="sourceLineNo">634</span>            // close the channels<a name="line.634"></a>
<span class="sourceLineNo">635</span>            for (SocketAddress a : future.getLocalAddresses()) {<a name="line.635"></a>
<span class="sourceLineNo">636</span>                H handle = boundHandles.remove(a);<a name="line.636"></a>
<span class="sourceLineNo">637</span><a name="line.637"></a>
<span class="sourceLineNo">638</span>                if (handle == null) {<a name="line.638"></a>
<span class="sourceLineNo">639</span>                    continue;<a name="line.639"></a>
<span class="sourceLineNo">640</span>                }<a name="line.640"></a>
<span class="sourceLineNo">641</span><a name="line.641"></a>
<span class="sourceLineNo">642</span>                try {<a name="line.642"></a>
<span class="sourceLineNo">643</span>                    close(handle);<a name="line.643"></a>
<span class="sourceLineNo">644</span>                    wakeup(); // wake up again to trigger thread death<a name="line.644"></a>
<span class="sourceLineNo">645</span>                } catch (Exception e) {<a name="line.645"></a>
<span class="sourceLineNo">646</span>                    ExceptionMonitor.getInstance().exceptionCaught(e);<a name="line.646"></a>
<span class="sourceLineNo">647</span>                } finally {<a name="line.647"></a>
<span class="sourceLineNo">648</span>                    cancelledHandles++;<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><a name="line.651"></a>
<span class="sourceLineNo">652</span>            future.setDone();<a name="line.652"></a>
<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
<span class="sourceLineNo">654</span><a name="line.654"></a>
<span class="sourceLineNo">655</span>        return cancelledHandles;<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>    /**<a name="line.658"></a>
<span class="sourceLineNo">659</span>     * {@inheritDoc}<a name="line.659"></a>
<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
<span class="sourceLineNo">661</span>    @Override<a name="line.661"></a>
<span class="sourceLineNo">662</span>    public final IoSession newSession(SocketAddress remoteAddress, SocketAddress localAddress) {<a name="line.662"></a>
<span class="sourceLineNo">663</span>        throw new UnsupportedOperationException();<a name="line.663"></a>
<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
<span class="sourceLineNo">665</span><a name="line.665"></a>
<span class="sourceLineNo">666</span>    /**<a name="line.666"></a>
<span class="sourceLineNo">667</span>     * @return the backLog<a name="line.667"></a>
<span class="sourceLineNo">668</span>     */<a name="line.668"></a>
<span class="sourceLineNo">669</span>    public int getBacklog() {<a name="line.669"></a>
<span class="sourceLineNo">670</span>        return backlog;<a name="line.670"></a>
<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
<span class="sourceLineNo">672</span><a name="line.672"></a>
<span class="sourceLineNo">673</span>    /**<a name="line.673"></a>
<span class="sourceLineNo">674</span>     * Sets the Backlog parameter<a name="line.674"></a>
<span class="sourceLineNo">675</span>     * <a name="line.675"></a>
<span class="sourceLineNo">676</span>     * @param backlog<a name="line.676"></a>
<span class="sourceLineNo">677</span>     *            the backlog variable<a name="line.677"></a>
<span class="sourceLineNo">678</span>     */<a name="line.678"></a>
<span class="sourceLineNo">679</span>    public void setBacklog(int backlog) {<a name="line.679"></a>
<span class="sourceLineNo">680</span>        synchronized (bindLock) {<a name="line.680"></a>
<span class="sourceLineNo">681</span>            if (isActive()) {<a name="line.681"></a>
<span class="sourceLineNo">682</span>                throw new IllegalStateException("backlog can't be set while the acceptor is bound.");<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>            this.backlog = backlog;<a name="line.685"></a>
<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
<span class="sourceLineNo">687</span>    }<a name="line.687"></a>
<span class="sourceLineNo">688</span><a name="line.688"></a>
<span class="sourceLineNo">689</span>    /**<a name="line.689"></a>
<span class="sourceLineNo">690</span>     * @return the flag that sets the reuseAddress information<a name="line.690"></a>
<span class="sourceLineNo">691</span>     */<a name="line.691"></a>
<span class="sourceLineNo">692</span>    public boolean isReuseAddress() {<a name="line.692"></a>
<span class="sourceLineNo">693</span>        return reuseAddress;<a name="line.693"></a>
<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
<span class="sourceLineNo">695</span><a name="line.695"></a>
<span class="sourceLineNo">696</span>    /**<a name="line.696"></a>
<span class="sourceLineNo">697</span>     * Set the Reuse Address flag<a name="line.697"></a>
<span class="sourceLineNo">698</span>     * <a name="line.698"></a>
<span class="sourceLineNo">699</span>     * @param reuseAddress<a name="line.699"></a>
<span class="sourceLineNo">700</span>     *            The flag to set<a name="line.700"></a>
<span class="sourceLineNo">701</span>     */<a name="line.701"></a>
<span class="sourceLineNo">702</span>    public void setReuseAddress(boolean reuseAddress) {<a name="line.702"></a>
<span class="sourceLineNo">703</span>        synchronized (bindLock) {<a name="line.703"></a>
<span class="sourceLineNo">704</span>            if (isActive()) {<a name="line.704"></a>
<span class="sourceLineNo">705</span>                throw new IllegalStateException("backlog can't be set while the acceptor is bound.");<a name="line.705"></a>
<span class="sourceLineNo">706</span>            }<a name="line.706"></a>
<span class="sourceLineNo">707</span><a name="line.707"></a>
<span class="sourceLineNo">708</span>            this.reuseAddress = reuseAddress;<a name="line.708"></a>
<span class="sourceLineNo">709</span>        }<a name="line.709"></a>
<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
<span class="sourceLineNo">711</span><a name="line.711"></a>
<span class="sourceLineNo">712</span>    /**<a name="line.712"></a>
<span class="sourceLineNo">713</span>     * {@inheritDoc}<a name="line.713"></a>
<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
<span class="sourceLineNo">715</span>    @Override<a name="line.715"></a>
<span class="sourceLineNo">716</span>    public SocketSessionConfig getSessionConfig() {<a name="line.716"></a>
<span class="sourceLineNo">717</span>        return (SocketSessionConfig)sessionConfig;<a name="line.717"></a>
<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
<span class="sourceLineNo">719</span>}<a name="line.719"></a>




























































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