1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.core.filterchain;
21
22 import org.apache.mina.core.filterchain.IoFilter.NextFilter;
23 import org.apache.mina.core.session.IdleStatus;
24 import org.apache.mina.core.session.IoEvent;
25 import org.apache.mina.core.session.IoEventType;
26 import org.apache.mina.core.session.IoSession;
27 import org.apache.mina.core.write.WriteRequest;
28 import org.apache.mina.filter.FilterEvent;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32
33
34
35
36
37
38
39 public class IoFilterEvent extends IoEvent {
40
41 private static final Logger LOGGER = LoggerFactory.getLogger(IoFilterEvent.class);
42
43
44 private static final boolean DEBUG = LOGGER.isDebugEnabled();
45
46
47 private final NextFilter nextFilter;
48
49
50
51
52
53
54
55
56
57 public IoFilterEvent(NextFilter nextFilter, IoEventType type, IoSession session, Object parameter) {
58 super(type, session, parameter);
59
60 if (nextFilter == null) {
61 throw new IllegalArgumentException("nextFilter must not be null");
62 }
63
64 this.nextFilter = nextFilter;
65 }
66
67
68
69
70 public NextFilter getNextFilter() {
71 return nextFilter;
72 }
73
74
75
76
77 @Override
78 public void fire() {
79 IoSession session = getSession();
80 IoEventType type = getType();
81
82 if (DEBUG) {
83 LOGGER.debug("Firing a {} event for session {}", type, session.getId());
84 }
85
86 switch (type) {
87 case CLOSE:
88 nextFilter.filterClose(session);
89 break;
90
91 case EVENT:
92 nextFilter.event(session, (FilterEvent)getParameter());
93 break;
94
95 case EXCEPTION_CAUGHT:
96 Throwable throwable = (Throwable) getParameter();
97 nextFilter.exceptionCaught(session, throwable);
98 break;
99
100 case INPUT_CLOSED:
101 nextFilter.inputClosed(session);
102 break;
103
104 case MESSAGE_RECEIVED:
105 Object parameter = getParameter();
106 nextFilter.messageReceived(session, parameter);
107 break;
108
109 case MESSAGE_SENT:
110 WriteRequest../org/apache/mina/core/write/WriteRequest.html#WriteRequest">WriteRequest writeRequest = (WriteRequest) getParameter();
111 nextFilter.messageSent(session, writeRequest);
112 break;
113
114 case SESSION_CLOSED:
115 nextFilter.sessionClosed(session);
116 break;
117
118 case SESSION_CREATED:
119 nextFilter.sessionCreated(session);
120 break;
121
122 case SESSION_IDLE:
123 nextFilter.sessionIdle(session, (IdleStatus) getParameter());
124 break;
125
126 case SESSION_OPENED:
127 nextFilter.sessionOpened(session);
128 break;
129
130 case WRITE:
131 writeRequest = (WriteRequest) getParameter();
132 nextFilter.filterWrite(session, writeRequest);
133 break;
134
135 default:
136 throw new IllegalArgumentException("Unknown event type: " + type);
137 }
138
139 if (DEBUG) {
140 LOGGER.debug("Event {} has been fired for session {}", type, session.getId());
141 }
142 }
143 }