1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.jboss.netty.channel.socket.nio;
18
19 import org.jboss.netty.channel.AbstractChannelSink;
20 import org.jboss.netty.channel.Channel;
21 import org.jboss.netty.channel.ChannelEvent;
22 import org.jboss.netty.channel.ChannelFuture;
23 import org.jboss.netty.channel.ChannelPipeline;
24 import org.jboss.netty.channel.socket.ChannelRunnableWrapper;
25
26 public abstract class AbstractNioChannelSink extends AbstractChannelSink {
27
28 @Override
29 public ChannelFuture execute(ChannelPipeline pipeline, final Runnable task) {
30 Channel ch = pipeline.getChannel();
31 if (ch instanceof AbstractNioChannel<?>) {
32 AbstractNioChannel<?> channel = (AbstractNioChannel<?>) ch;
33 ChannelRunnableWrapper wrapper = new ChannelRunnableWrapper(pipeline.getChannel(), task);
34 channel.worker.executeInIoThread(wrapper);
35 return wrapper;
36 }
37 return super.execute(pipeline, task);
38 }
39
40 @Override
41 protected boolean isFireExceptionCaughtLater(ChannelEvent event, Throwable actualCause) {
42 Channel channel = event.getChannel();
43 boolean fireLater = false;
44 if (channel instanceof AbstractNioChannel<?>) {
45 fireLater = !AbstractNioWorker.isIoThread((AbstractNioChannel<?>) channel);
46 }
47 return fireLater;
48 }
49 }