<!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.handler.demux;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.Collections;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Set;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.mina.core.service.IoHandler;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.mina.core.service.IoHandlerAdapter;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.mina.core.session.IoSession;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.mina.core.session.UnknownMessageTypeException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.mina.util.IdentityHashSet;<a name="line.31"></a>
<span class="sourceLineNo">032</span><a name="line.32"></a>
<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
<span class="sourceLineNo">034</span> * A {@link IoHandler} that demuxes &lt;code&gt;messageReceived&lt;/code&gt; events<a name="line.34"></a>
<span class="sourceLineNo">035</span> * to the appropriate {@link MessageHandler}.<a name="line.35"></a>
<span class="sourceLineNo">036</span> * &lt;p&gt;<a name="line.36"></a>
<span class="sourceLineNo">037</span> * You can freely register and deregister {@link MessageHandler}s using<a name="line.37"></a>
<span class="sourceLineNo">038</span> * {@link #addReceivedMessageHandler(Class, MessageHandler)} and<a name="line.38"></a>
<span class="sourceLineNo">039</span> * {@link #removeReceivedMessageHandler(Class)}.<a name="line.39"></a>
<span class="sourceLineNo">040</span> * &lt;/p&gt;<a name="line.40"></a>
<span class="sourceLineNo">041</span> * &lt;p&gt;<a name="line.41"></a>
<span class="sourceLineNo">042</span> * When &lt;code&gt;message&lt;/code&gt; is received through a call to<a name="line.42"></a>
<span class="sourceLineNo">043</span> * {@link #messageReceived(IoSession, Object)} the class of the<a name="line.43"></a>
<span class="sourceLineNo">044</span> * &lt;code&gt;message&lt;/code&gt; object will be used to find a {@link MessageHandler} for<a name="line.44"></a>
<span class="sourceLineNo">045</span> * that particular message type. If no {@link MessageHandler} instance can be<a name="line.45"></a>
<span class="sourceLineNo">046</span> * found for the immediate class (i.e. &lt;code&gt;message.getClass()&lt;/code&gt;) the<a name="line.46"></a>
<span class="sourceLineNo">047</span> * interfaces implemented by the immediate class will be searched in depth-first<a name="line.47"></a>
<span class="sourceLineNo">048</span> * order. If no match can be found for any of the interfaces the search will be<a name="line.48"></a>
<span class="sourceLineNo">049</span> * repeated recursively for the superclass of the immediate class<a name="line.49"></a>
<span class="sourceLineNo">050</span> * (i.e. &lt;code&gt;message.getClass().getSuperclass()&lt;/code&gt;).<a name="line.50"></a>
<span class="sourceLineNo">051</span> * &lt;/p&gt;<a name="line.51"></a>
<span class="sourceLineNo">052</span> * &lt;p&gt;<a name="line.52"></a>
<span class="sourceLineNo">053</span> * Consider the following type hierarchy (&lt;code&gt;Cx&lt;/code&gt; are classes while<a name="line.53"></a>
<span class="sourceLineNo">054</span> * &lt;code&gt;Ix&lt;/code&gt; are interfaces):<a name="line.54"></a>
<span class="sourceLineNo">055</span> * &lt;pre&gt;<a name="line.55"></a>
<span class="sourceLineNo">056</span> *     C3 - I7 - I9<a name="line.56"></a>
<span class="sourceLineNo">057</span> *      |    |   /\<a name="line.57"></a>
<span class="sourceLineNo">058</span> *      |   I8  I3 I4<a name="line.58"></a>
<span class="sourceLineNo">059</span> *      |<a name="line.59"></a>
<span class="sourceLineNo">060</span> *     C2 - I5 - I6<a name="line.60"></a>
<span class="sourceLineNo">061</span> *      |<a name="line.61"></a>
<span class="sourceLineNo">062</span> *     C1 - I1 - I2 - I4<a name="line.62"></a>
<span class="sourceLineNo">063</span> *      |         |<a name="line.63"></a>
<span class="sourceLineNo">064</span> *      |        I3<a name="line.64"></a>
<span class="sourceLineNo">065</span> *    Object<a name="line.65"></a>
<span class="sourceLineNo">066</span> * &lt;/pre&gt;<a name="line.66"></a>
<span class="sourceLineNo">067</span> * When &lt;code&gt;message&lt;/code&gt; is of type &lt;code&gt;C3&lt;/code&gt; this hierarchy will be<a name="line.67"></a>
<span class="sourceLineNo">068</span> * searched in the following order:<a name="line.68"></a>
<span class="sourceLineNo">069</span> * &lt;code&gt;C3, I7, I8, I9, I3, I4, C2, I5, I6, C1, I1, I2, I3, I4, Object&lt;/code&gt;.<a name="line.69"></a>
<span class="sourceLineNo">070</span> * &lt;/p&gt;<a name="line.70"></a>
<span class="sourceLineNo">071</span> * &lt;p&gt;<a name="line.71"></a>
<span class="sourceLineNo">072</span> * For efficiency searches will be cached. Calls to<a name="line.72"></a>
<span class="sourceLineNo">073</span> * {@link #addReceivedMessageHandler(Class, MessageHandler)} and<a name="line.73"></a>
<span class="sourceLineNo">074</span> * {@link #removeReceivedMessageHandler(Class)} clear this cache.<a name="line.74"></a>
<span class="sourceLineNo">075</span> * &lt;/p&gt;<a name="line.75"></a>
<span class="sourceLineNo">076</span> *<a name="line.76"></a>
<span class="sourceLineNo">077</span> * @author &lt;a href="http://mina.apache.org"&gt;Apache MINA Project&lt;/a&gt;<a name="line.77"></a>
<span class="sourceLineNo">078</span> */<a name="line.78"></a>
<span class="sourceLineNo">079</span>public class DemuxingIoHandler extends IoHandlerAdapter {<a name="line.79"></a>
<span class="sourceLineNo">080</span><a name="line.80"></a>
<span class="sourceLineNo">081</span>    private final Map&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt; receivedMessageHandlerCache = new ConcurrentHashMap&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&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;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt; receivedMessageHandlers = new ConcurrentHashMap&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt;();<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>    private final Map&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt; sentMessageHandlerCache = new ConcurrentHashMap&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt;();<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    private final Map&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt; sentMessageHandlers = new ConcurrentHashMap&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt;();<a name="line.87"></a>
<span class="sourceLineNo">088</span><a name="line.88"></a>
<span class="sourceLineNo">089</span>    private final Map&lt;Class&lt;?&gt;, ExceptionHandler&lt;?&gt;&gt; exceptionHandlerCache = new ConcurrentHashMap&lt;Class&lt;?&gt;, ExceptionHandler&lt;?&gt;&gt;();<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>    private final Map&lt;Class&lt;?&gt;, ExceptionHandler&lt;?&gt;&gt; exceptionHandlers = new ConcurrentHashMap&lt;Class&lt;?&gt;, ExceptionHandler&lt;?&gt;&gt;();<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>     * Creates a new instance with no registered {@link MessageHandler}s.<a name="line.94"></a>
<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
<span class="sourceLineNo">096</span>    public DemuxingIoHandler() {<a name="line.96"></a>
<span class="sourceLineNo">097</span>        // Do nothing<a name="line.97"></a>
<span class="sourceLineNo">098</span>    }<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>     * Registers a {@link MessageHandler} that handles the received messages of<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * the specified &lt;code&gt;type&lt;/code&gt;.<a name="line.102"></a>
<span class="sourceLineNo">103</span>     *<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * @return the old handler if there is already a registered handler for<a name="line.104"></a>
<span class="sourceLineNo">105</span>     *         the specified &lt;tt&gt;type&lt;/tt&gt;.  &lt;tt&gt;null&lt;/tt&gt; otherwise.<a name="line.105"></a>
<span class="sourceLineNo">106</span>     */<a name="line.106"></a>
<span class="sourceLineNo">107</span>    @SuppressWarnings("unchecked")<a name="line.107"></a>
<span class="sourceLineNo">108</span>    public &lt;E&gt; MessageHandler&lt;? super E&gt; addReceivedMessageHandler(Class&lt;E&gt; type, MessageHandler&lt;? super E&gt; handler) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>        receivedMessageHandlerCache.clear();<a name="line.109"></a>
<span class="sourceLineNo">110</span>        return (MessageHandler&lt;? super E&gt;) receivedMessageHandlers.put(type, handler);<a name="line.110"></a>
<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>    /**<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * Deregisters a {@link MessageHandler} that handles the received messages<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * of the specified &lt;code&gt;type&lt;/code&gt;.<a name="line.115"></a>
<span class="sourceLineNo">116</span>     *<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * @return the removed handler if successfully removed.  &lt;tt&gt;null&lt;/tt&gt; otherwise.<a name="line.117"></a>
<span class="sourceLineNo">118</span>     */<a name="line.118"></a>
<span class="sourceLineNo">119</span>    @SuppressWarnings("unchecked")<a name="line.119"></a>
<span class="sourceLineNo">120</span>    public &lt;E&gt; MessageHandler&lt;? super E&gt; removeReceivedMessageHandler(Class&lt;E&gt; type) {<a name="line.120"></a>
<span class="sourceLineNo">121</span>        receivedMessageHandlerCache.clear();<a name="line.121"></a>
<span class="sourceLineNo">122</span>        return (MessageHandler&lt;? super E&gt;) receivedMessageHandlers.remove(type);<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 name="line.125"></a>
<span class="sourceLineNo">126</span>     * Registers a {@link MessageHandler} that handles the sent messages of the<a name="line.126"></a>
<span class="sourceLineNo">127</span>     * specified &lt;code&gt;type&lt;/code&gt;.<a name="line.127"></a>
<span class="sourceLineNo">128</span>     *<a name="line.128"></a>
<span class="sourceLineNo">129</span>     * @return the old handler if there is already a registered handler for<a name="line.129"></a>
<span class="sourceLineNo">130</span>     *         the specified &lt;tt&gt;type&lt;/tt&gt;.  &lt;tt&gt;null&lt;/tt&gt; otherwise.<a name="line.130"></a>
<span class="sourceLineNo">131</span>     */<a name="line.131"></a>
<span class="sourceLineNo">132</span>    @SuppressWarnings("unchecked")<a name="line.132"></a>
<span class="sourceLineNo">133</span>    public &lt;E&gt; MessageHandler&lt;? super E&gt; addSentMessageHandler(Class&lt;E&gt; type, MessageHandler&lt;? super E&gt; handler) {<a name="line.133"></a>
<span class="sourceLineNo">134</span>        sentMessageHandlerCache.clear();<a name="line.134"></a>
<span class="sourceLineNo">135</span>        return (MessageHandler&lt;? super E&gt;) sentMessageHandlers.put(type, handler);<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>    /**<a name="line.138"></a>
<span class="sourceLineNo">139</span>     * Deregisters a {@link MessageHandler} that handles the sent messages of<a name="line.139"></a>
<span class="sourceLineNo">140</span>     * the specified &lt;code&gt;type&lt;/code&gt;.<a name="line.140"></a>
<span class="sourceLineNo">141</span>     *<a name="line.141"></a>
<span class="sourceLineNo">142</span>     * @return the removed handler if successfully removed.  &lt;tt&gt;null&lt;/tt&gt; otherwise.<a name="line.142"></a>
<span class="sourceLineNo">143</span>     */<a name="line.143"></a>
<span class="sourceLineNo">144</span>    @SuppressWarnings("unchecked")<a name="line.144"></a>
<span class="sourceLineNo">145</span>    public &lt;E&gt; MessageHandler&lt;? super E&gt; removeSentMessageHandler(Class&lt;E&gt; type) {<a name="line.145"></a>
<span class="sourceLineNo">146</span>        sentMessageHandlerCache.clear();<a name="line.146"></a>
<span class="sourceLineNo">147</span>        return (MessageHandler&lt;? super E&gt;) sentMessageHandlers.remove(type);<a name="line.147"></a>
<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>    /**<a name="line.150"></a>
<span class="sourceLineNo">151</span>     * Registers a {@link MessageHandler} that receives the messages of<a name="line.151"></a>
<span class="sourceLineNo">152</span>     * the specified &lt;code&gt;type&lt;/code&gt;.<a name="line.152"></a>
<span class="sourceLineNo">153</span>     *<a name="line.153"></a>
<span class="sourceLineNo">154</span>     * @return the old handler if there is already a registered handler for<a name="line.154"></a>
<span class="sourceLineNo">155</span>     *         the specified &lt;tt&gt;type&lt;/tt&gt;.  &lt;tt&gt;null&lt;/tt&gt; otherwise.<a name="line.155"></a>
<span class="sourceLineNo">156</span>     */<a name="line.156"></a>
<span class="sourceLineNo">157</span>    @SuppressWarnings("unchecked")<a name="line.157"></a>
<span class="sourceLineNo">158</span>    public &lt;E extends Throwable&gt; ExceptionHandler&lt;? super E&gt; addExceptionHandler(Class&lt;E&gt; type,<a name="line.158"></a>
<span class="sourceLineNo">159</span>            ExceptionHandler&lt;? super E&gt; handler) {<a name="line.159"></a>
<span class="sourceLineNo">160</span>        exceptionHandlerCache.clear();<a name="line.160"></a>
<span class="sourceLineNo">161</span>        return (ExceptionHandler&lt;? super E&gt;) exceptionHandlers.put(type, handler);<a name="line.161"></a>
<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
<span class="sourceLineNo">163</span><a name="line.163"></a>
<span class="sourceLineNo">164</span>    /**<a name="line.164"></a>
<span class="sourceLineNo">165</span>     * Deregisters a {@link MessageHandler} that receives the messages of<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * the specified &lt;code&gt;type&lt;/code&gt;.<a name="line.166"></a>
<span class="sourceLineNo">167</span>     *<a name="line.167"></a>
<span class="sourceLineNo">168</span>     * @return the removed handler if successfully removed.  &lt;tt&gt;null&lt;/tt&gt; otherwise.<a name="line.168"></a>
<span class="sourceLineNo">169</span>     */<a name="line.169"></a>
<span class="sourceLineNo">170</span>    @SuppressWarnings("unchecked")<a name="line.170"></a>
<span class="sourceLineNo">171</span>    public &lt;E extends Throwable&gt; ExceptionHandler&lt;? super E&gt; removeExceptionHandler(Class&lt;E&gt; type) {<a name="line.171"></a>
<span class="sourceLineNo">172</span>        exceptionHandlerCache.clear();<a name="line.172"></a>
<span class="sourceLineNo">173</span>        return (ExceptionHandler&lt;? super E&gt;) exceptionHandlers.remove(type);<a name="line.173"></a>
<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span>    /**<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * Returns the {@link MessageHandler} which is registered to process<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * the specified &lt;code&gt;type&lt;/code&gt;.<a name="line.178"></a>
<span class="sourceLineNo">179</span>     */<a name="line.179"></a>
<span class="sourceLineNo">180</span>    @SuppressWarnings("unchecked")<a name="line.180"></a>
<span class="sourceLineNo">181</span>    public &lt;E&gt; MessageHandler&lt;? super E&gt; getMessageHandler(Class&lt;E&gt; type) {<a name="line.181"></a>
<span class="sourceLineNo">182</span>        return (MessageHandler&lt;? super E&gt;) receivedMessageHandlers.get(type);<a name="line.182"></a>
<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>    /**<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * Returns the {@link Map} which contains all messageType-{@link MessageHandler}<a name="line.186"></a>
<span class="sourceLineNo">187</span>     * pairs registered to this handler for received messages.<a name="line.187"></a>
<span class="sourceLineNo">188</span>     */<a name="line.188"></a>
<span class="sourceLineNo">189</span>    public Map&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt; getReceivedMessageHandlerMap() {<a name="line.189"></a>
<span class="sourceLineNo">190</span>        return Collections.unmodifiableMap(receivedMessageHandlers);<a name="line.190"></a>
<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>    /**<a name="line.193"></a>
<span class="sourceLineNo">194</span>     * Returns the {@link Map} which contains all messageType-{@link MessageHandler}<a name="line.194"></a>
<span class="sourceLineNo">195</span>     * pairs registered to this handler for sent messages.<a name="line.195"></a>
<span class="sourceLineNo">196</span>     */<a name="line.196"></a>
<span class="sourceLineNo">197</span>    public Map&lt;Class&lt;?&gt;, MessageHandler&lt;?&gt;&gt; getSentMessageHandlerMap() {<a name="line.197"></a>
<span class="sourceLineNo">198</span>        return Collections.unmodifiableMap(sentMessageHandlers);<a name="line.198"></a>
<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
<span class="sourceLineNo">200</span><a name="line.200"></a>
<span class="sourceLineNo">201</span>    /**<a name="line.201"></a>
<span class="sourceLineNo">202</span>     * Returns the {@link Map} which contains all messageType-{@link MessageHandler}<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * pairs registered to this handler.<a name="line.203"></a>
<span class="sourceLineNo">204</span>     */<a name="line.204"></a>
<span class="sourceLineNo">205</span>    public Map&lt;Class&lt;?&gt;, ExceptionHandler&lt;?&gt;&gt; getExceptionHandlerMap() {<a name="line.205"></a>
<span class="sourceLineNo">206</span>        return Collections.unmodifiableMap(exceptionHandlers);<a name="line.206"></a>
<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>    /**<a name="line.209"></a>
<span class="sourceLineNo">210</span>     * Forwards the received events into the appropriate {@link MessageHandler}<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * which is registered by {@link #addReceivedMessageHandler(Class, MessageHandler)}.<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * <a name="line.212"></a>
<span class="sourceLineNo">213</span>     * &lt;b&gt;Warning !&lt;/b&gt; If you are to overload this method, be aware that you <a name="line.213"></a>
<span class="sourceLineNo">214</span>     * _must_ call the messageHandler in your own method, otherwise it won't <a name="line.214"></a>
<span class="sourceLineNo">215</span>     * be called.<a name="line.215"></a>
<span class="sourceLineNo">216</span>     */<a name="line.216"></a>
<span class="sourceLineNo">217</span>    @Override<a name="line.217"></a>
<span class="sourceLineNo">218</span>    public void messageReceived(IoSession session, Object message) throws Exception {<a name="line.218"></a>
<span class="sourceLineNo">219</span>        MessageHandler&lt;Object&gt; handler = findReceivedMessageHandler(message.getClass());<a name="line.219"></a>
<span class="sourceLineNo">220</span>        if (handler != null) {<a name="line.220"></a>
<span class="sourceLineNo">221</span>            handler.handleMessage(session, message);<a name="line.221"></a>
<span class="sourceLineNo">222</span>        } else {<a name="line.222"></a>
<span class="sourceLineNo">223</span>            throw new UnknownMessageTypeException("No message handler found for message type: "<a name="line.223"></a>
<span class="sourceLineNo">224</span>                    + message.getClass().getSimpleName());<a name="line.224"></a>
<span class="sourceLineNo">225</span>        }<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>    /**<a name="line.228"></a>
<span class="sourceLineNo">229</span>     * Invoked when a message written by IoSession.write(Object) is sent out.<a name="line.229"></a>
<span class="sourceLineNo">230</span>     * <a name="line.230"></a>
<span class="sourceLineNo">231</span>     * &lt;b&gt;Warning !&lt;/b&gt; If you are to overload this method, be aware that you <a name="line.231"></a>
<span class="sourceLineNo">232</span>     * _must_ call the messageHandler in your own method, otherwise it won't <a name="line.232"></a>
<span class="sourceLineNo">233</span>     * be called.<a name="line.233"></a>
<span class="sourceLineNo">234</span>     */<a name="line.234"></a>
<span class="sourceLineNo">235</span>    @Override<a name="line.235"></a>
<span class="sourceLineNo">236</span>    public void messageSent(IoSession session, Object message) throws Exception {<a name="line.236"></a>
<span class="sourceLineNo">237</span>        MessageHandler&lt;Object&gt; handler = findSentMessageHandler(message.getClass());<a name="line.237"></a>
<span class="sourceLineNo">238</span>        if (handler != null) {<a name="line.238"></a>
<span class="sourceLineNo">239</span>            handler.handleMessage(session, message);<a name="line.239"></a>
<span class="sourceLineNo">240</span>        } else {<a name="line.240"></a>
<span class="sourceLineNo">241</span>            throw new UnknownMessageTypeException("No handler found for message type: "<a name="line.241"></a>
<span class="sourceLineNo">242</span>                    + message.getClass().getSimpleName());<a name="line.242"></a>
<span class="sourceLineNo">243</span>        }<a name="line.243"></a>
<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
<span class="sourceLineNo">245</span><a name="line.245"></a>
<span class="sourceLineNo">246</span>    /**<a name="line.246"></a>
<span class="sourceLineNo">247</span>     * Invoked when any exception is thrown by user IoHandler implementation <a name="line.247"></a>
<span class="sourceLineNo">248</span>     * or by MINA. If cause is an instance of IOException, MINA will close the <a name="line.248"></a>
<span class="sourceLineNo">249</span>     * connection automatically.<a name="line.249"></a>
<span class="sourceLineNo">250</span>     *<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * &lt;b&gt;Warning !&lt;/b&gt; If you are to overload this method, be aware that you <a name="line.251"></a>
<span class="sourceLineNo">252</span>     * _must_ call the messageHandler in your own method, otherwise it won't <a name="line.252"></a>
<span class="sourceLineNo">253</span>     * be called.<a name="line.253"></a>
<span class="sourceLineNo">254</span>     */<a name="line.254"></a>
<span class="sourceLineNo">255</span>    @Override<a name="line.255"></a>
<span class="sourceLineNo">256</span>    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {<a name="line.256"></a>
<span class="sourceLineNo">257</span>        ExceptionHandler&lt;Throwable&gt; handler = findExceptionHandler(cause.getClass());<a name="line.257"></a>
<span class="sourceLineNo">258</span>        if (handler != null) {<a name="line.258"></a>
<span class="sourceLineNo">259</span>            handler.exceptionCaught(session, cause);<a name="line.259"></a>
<span class="sourceLineNo">260</span>        } else {<a name="line.260"></a>
<span class="sourceLineNo">261</span>            throw new UnknownMessageTypeException("No handler found for exception type: "<a name="line.261"></a>
<span class="sourceLineNo">262</span>                    + cause.getClass().getSimpleName());<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><a name="line.265"></a>
<span class="sourceLineNo">266</span>    protected MessageHandler&lt;Object&gt; findReceivedMessageHandler(Class&lt;?&gt; type) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>        return findReceivedMessageHandler(type, null);<a name="line.267"></a>
<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>    protected MessageHandler&lt;Object&gt; findSentMessageHandler(Class&lt;?&gt; type) {<a name="line.270"></a>
<span class="sourceLineNo">271</span>        return findSentMessageHandler(type, null);<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>    protected ExceptionHandler&lt;Throwable&gt; findExceptionHandler(Class&lt;? extends Throwable&gt; type) {<a name="line.274"></a>
<span class="sourceLineNo">275</span>        return findExceptionHandler(type, null);<a name="line.275"></a>
<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
<span class="sourceLineNo">277</span><a name="line.277"></a>
<span class="sourceLineNo">278</span>    @SuppressWarnings("unchecked")<a name="line.278"></a>
<span class="sourceLineNo">279</span>    private MessageHandler&lt;Object&gt; findReceivedMessageHandler(Class type, Set&lt;Class&gt; triedClasses) {<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>        return (MessageHandler&lt;Object&gt;) findHandler(receivedMessageHandlers, receivedMessageHandlerCache, type,<a name="line.281"></a>
<span class="sourceLineNo">282</span>                triedClasses);<a name="line.282"></a>
<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>    @SuppressWarnings("unchecked")<a name="line.285"></a>
<span class="sourceLineNo">286</span>    private MessageHandler&lt;Object&gt; findSentMessageHandler(Class type, Set&lt;Class&gt; triedClasses) {<a name="line.286"></a>
<span class="sourceLineNo">287</span><a name="line.287"></a>
<span class="sourceLineNo">288</span>        return (MessageHandler&lt;Object&gt;) findHandler(sentMessageHandlers, sentMessageHandlerCache, type, triedClasses);<a name="line.288"></a>
<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
<span class="sourceLineNo">290</span><a name="line.290"></a>
<span class="sourceLineNo">291</span>    @SuppressWarnings("unchecked")<a name="line.291"></a>
<span class="sourceLineNo">292</span>    private ExceptionHandler&lt;Throwable&gt; findExceptionHandler(Class type, Set&lt;Class&gt; triedClasses) {<a name="line.292"></a>
<span class="sourceLineNo">293</span><a name="line.293"></a>
<span class="sourceLineNo">294</span>        return (ExceptionHandler&lt;Throwable&gt;) findHandler(exceptionHandlers, exceptionHandlerCache, type, triedClasses);<a name="line.294"></a>
<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
<span class="sourceLineNo">296</span><a name="line.296"></a>
<span class="sourceLineNo">297</span>    @SuppressWarnings("unchecked")<a name="line.297"></a>
<span class="sourceLineNo">298</span>    private Object findHandler(Map handlers, Map handlerCache, Class type, Set&lt;Class&gt; triedClasses) {<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>        Object handler = null;<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>        if (triedClasses != null &amp;&amp; triedClasses.contains(type)) {<a name="line.302"></a>
<span class="sourceLineNo">303</span>            return null;<a name="line.303"></a>
<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
<span class="sourceLineNo">305</span><a name="line.305"></a>
<span class="sourceLineNo">306</span>        /*<a name="line.306"></a>
<span class="sourceLineNo">307</span>         * Try the cache first.<a name="line.307"></a>
<span class="sourceLineNo">308</span>         */<a name="line.308"></a>
<span class="sourceLineNo">309</span>        handler = handlerCache.get(type);<a name="line.309"></a>
<span class="sourceLineNo">310</span>        if (handler != null) {<a name="line.310"></a>
<span class="sourceLineNo">311</span>            return handler;<a name="line.311"></a>
<span class="sourceLineNo">312</span>        }<a name="line.312"></a>
<span class="sourceLineNo">313</span><a name="line.313"></a>
<span class="sourceLineNo">314</span>        /*<a name="line.314"></a>
<span class="sourceLineNo">315</span>         * Try the registered handlers for an immediate match.<a name="line.315"></a>
<span class="sourceLineNo">316</span>         */<a name="line.316"></a>
<span class="sourceLineNo">317</span>        handler = handlers.get(type);<a name="line.317"></a>
<span class="sourceLineNo">318</span><a name="line.318"></a>
<span class="sourceLineNo">319</span>        if (handler == null) {<a name="line.319"></a>
<span class="sourceLineNo">320</span>            /*<a name="line.320"></a>
<span class="sourceLineNo">321</span>             * No immediate match could be found. Search the type's interfaces.<a name="line.321"></a>
<span class="sourceLineNo">322</span>             */<a name="line.322"></a>
<span class="sourceLineNo">323</span><a name="line.323"></a>
<span class="sourceLineNo">324</span>            if (triedClasses == null) {<a name="line.324"></a>
<span class="sourceLineNo">325</span>                triedClasses = new IdentityHashSet&lt;Class&gt;();<a name="line.325"></a>
<span class="sourceLineNo">326</span>            }<a name="line.326"></a>
<span class="sourceLineNo">327</span>            triedClasses.add(type);<a name="line.327"></a>
<span class="sourceLineNo">328</span><a name="line.328"></a>
<span class="sourceLineNo">329</span>            Class[] interfaces = type.getInterfaces();<a name="line.329"></a>
<span class="sourceLineNo">330</span>            for (Class element : interfaces) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>                handler = findHandler(handlers, handlerCache, element, triedClasses);<a name="line.331"></a>
<span class="sourceLineNo">332</span>                if (handler != null) {<a name="line.332"></a>
<span class="sourceLineNo">333</span>                    break;<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><a name="line.337"></a>
<span class="sourceLineNo">338</span>        if (handler == null) {<a name="line.338"></a>
<span class="sourceLineNo">339</span>            /*<a name="line.339"></a>
<span class="sourceLineNo">340</span>             * No match in type's interfaces could be found. Search the<a name="line.340"></a>
<span class="sourceLineNo">341</span>             * superclass.<a name="line.341"></a>
<span class="sourceLineNo">342</span>             */<a name="line.342"></a>
<span class="sourceLineNo">343</span>            Class superclass = type.getSuperclass();<a name="line.343"></a>
<span class="sourceLineNo">344</span>            if (superclass != null) {<a name="line.344"></a>
<span class="sourceLineNo">345</span>                handler = findHandler(handlers, handlerCache, superclass, null);<a name="line.345"></a>
<span class="sourceLineNo">346</span>            }<a name="line.346"></a>
<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>        /*<a name="line.349"></a>
<span class="sourceLineNo">350</span>         * Make sure the handler is added to the cache. By updating the cache<a name="line.350"></a>
<span class="sourceLineNo">351</span>         * here all the types (superclasses and interfaces) in the path which<a name="line.351"></a>
<span class="sourceLineNo">352</span>         * led to a match will be cached along with the immediate message type.<a name="line.352"></a>
<span class="sourceLineNo">353</span>         */<a name="line.353"></a>
<span class="sourceLineNo">354</span>        if (handler != null) {<a name="line.354"></a>
<span class="sourceLineNo">355</span>            handlerCache.put(type, handler);<a name="line.355"></a>
<span class="sourceLineNo">356</span>        }<a name="line.356"></a>
<span class="sourceLineNo">357</span><a name="line.357"></a>
<span class="sourceLineNo">358</span>        return handler;<a name="line.358"></a>
<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
<span class="sourceLineNo">360</span>}<a name="line.360"></a>




























































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