1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.service;
21
22 import java.util.Map;
23 import java.util.concurrent.ConcurrentHashMap;
24
25 import org.apache.mina.api.IoFilter;
26 import org.apache.mina.api.IoHandler;
27 import org.apache.mina.api.IoService;
28 import org.apache.mina.api.IoSession;
29 import org.apache.mina.api.IoSessionConfig;
30 import org.apache.mina.service.executor.IoHandlerExecutor;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34
35
36
37
38
39 public abstract class AbstractIoService implements IoService {
40
41
42 static final Logger LOG = LoggerFactory.getLogger(AbstractIoService.class);
43
44
45 private ServiceState state;
46
47
48 private final Map<Long, IoSession> managedSessions = new ConcurrentHashMap<Long, IoSession>();
49
50
51 protected IoSessionConfig config;
52
53
54 private IoHandler handler;
55
56
57 private IoFilter[] filters = new IoFilter[0];
58
59
60 protected final IoHandlerExecutor ioHandlerExecutor;
61
62
63
64
65 protected enum ServiceState {
66
67 NONE,
68
69 CREATED,
70
71 ACTIVE,
72
73 SUSPENDED,
74
75 DISPOSING,
76
77 DISPOSED
78 }
79
80
81
82
83
84
85
86
87 protected AbstractIoService(final IoHandlerExecutor eventExecutor) {
88 this.state = ServiceState.NONE;
89 this.ioHandlerExecutor = eventExecutor;
90 }
91
92
93
94
95 @Override
96 public Map<Long, IoSession> getManagedSessions() {
97 return this.managedSessions;
98 }
99
100
101
102
103 @Override
104 public void setIoHandler(final IoHandler handler) {
105 this.handler = handler;
106 }
107
108
109
110
111 @Override
112 public IoHandler getIoHandler() {
113 return handler;
114 }
115
116
117
118
119 @Override
120 public IoHandlerExecutor getIoHandlerExecutor() {
121 return ioHandlerExecutor;
122 }
123
124
125
126
127 public boolean isActive() {
128 return this.state == ServiceState.ACTIVE;
129 }
130
131
132
133
134 public boolean isDisposing() {
135 return this.state == ServiceState.DISPOSING;
136 }
137
138
139
140
141 public boolean isDisposed() {
142 return this.state == ServiceState.DISPOSED;
143 }
144
145
146
147
148 public boolean isSuspended() {
149 return this.state == ServiceState.SUSPENDED;
150 }
151
152
153
154
155 public boolean isCreated() {
156 return this.state == ServiceState.CREATED;
157 }
158
159
160
161
162 protected void setCreated() {
163 this.state = ServiceState.CREATED;
164 }
165
166
167
168
169 protected void setActive() {
170 this.state = ServiceState.ACTIVE;
171 }
172
173
174
175
176 protected void setDisposed() {
177 this.state = ServiceState.DISPOSED;
178 }
179
180
181
182
183 protected void setDisposing() {
184 this.state = ServiceState.DISPOSING;
185 }
186
187
188
189
190 protected void setSuspended() {
191 this.state = ServiceState.SUSPENDED;
192 }
193
194
195
196
197 protected void initState() {
198 this.state = ServiceState.NONE;
199 }
200
201
202
203
204 protected void fireServiceActivated() {
205 if (handler != null) {
206 handler.serviceActivated(this);
207 }
208 }
209
210
211
212
213 protected void fireServiceInactivated() {
214 if (handler != null) {
215 handler.serviceInactivated(this);
216 }
217 }
218
219
220
221
222 @Override
223 public IoFilter[] getFilters() {
224 return this.filters;
225 }
226
227
228
229
230 @Override
231 public void setFilters(final IoFilter... filters) {
232 this.filters = filters;
233 }
234 }