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.slf4j.Logger;
29 import org.slf4j.LoggerFactory;
30
31
32
33
34
35
36
37
38 public class IoFilterEvent extends IoEvent {
39
40 static Logger LOGGER = LoggerFactory.getLogger(IoFilterEvent.class);
41
42
43 static boolean DEBUG = LOGGER.isDebugEnabled();
44
45 private final NextFilter nextFilter;
46
47 public IoFilterEvent(NextFilter nextFilter, IoEventType type,
48 IoSession session, Object parameter) {
49 super(type, session, parameter);
50
51 if (nextFilter == null) {
52 throw new IllegalArgumentException("nextFilter must not be null");
53 }
54
55 this.nextFilter = nextFilter;
56 }
57
58 public NextFilter getNextFilter() {
59 return nextFilter;
60 }
61
62 @Override
63 public void fire() {
64 IoSession session = getSession();
65 NextFilter nextFilter = getNextFilter();
66 IoEventType type = getType();
67
68 if (DEBUG) {
69 LOGGER.debug( "Firing a {} event for session {}",type, session.getId() );
70 }
71
72 switch (type) {
73 case MESSAGE_RECEIVED:
74 Object parameter = getParameter();
75 nextFilter.messageReceived(session, parameter);
76 break;
77
78 case MESSAGE_SENT:
79 WriteRequest writeRequest = (WriteRequest)getParameter();
80 nextFilter.messageSent(session, writeRequest);
81 break;
82
83 case WRITE:
84 writeRequest = (WriteRequest)getParameter();
85 nextFilter.filterWrite(session, writeRequest);
86 break;
87
88 case CLOSE:
89 nextFilter.filterClose(session);
90 break;
91
92 case EXCEPTION_CAUGHT:
93 Throwable throwable = (Throwable)getParameter();
94 nextFilter.exceptionCaught(session, throwable);
95 break;
96
97 case SESSION_IDLE:
98 nextFilter.sessionIdle(session, (IdleStatus) getParameter());
99 break;
100
101 case SESSION_OPENED:
102 nextFilter.sessionOpened(session);
103 break;
104
105 case SESSION_CREATED:
106 nextFilter.sessionCreated(session);
107 break;
108
109 case SESSION_CLOSED:
110 nextFilter.sessionClosed(session);
111 break;
112
113 default:
114 throw new IllegalArgumentException("Unknown event type: " + type);
115 }
116
117 if (DEBUG) {
118 LOGGER.debug( "Event {} has been fired for session {}", type, session.getId() );
119 }
120 }
121 }