1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.filter.query;
21
22 import java.util.Map;
23 import java.util.concurrent.ScheduledFuture;
24
25 import org.apache.mina.api.IoSession;
26 import org.apache.mina.util.AbstractIoFuture;
27
28
29
30
31
32
33
34
35
36 class RequestFuture<REQUEST extends Request, RESPONSE extends Response> extends AbstractIoFuture<RESPONSE> {
37
38 private final IoSession session;
39
40 private final Object id;
41
42 private ScheduledFuture<?> schedFuture;
43
44 public RequestFuture(IoSession session, Object id) {
45 this.session = session;
46 this.id = id;
47 }
48
49 @Override
50 protected boolean cancelOwner(boolean mayInterruptIfRunning) {
51 throw new IllegalStateException("not implemented");
52 }
53
54 void complete(RESPONSE response) {
55 if (schedFuture != null) {
56 schedFuture.cancel(true);
57 }
58 setResult(response);
59 }
60
61 void setTimeoutFuture(ScheduledFuture<?> schedFuture) {
62 this.schedFuture = schedFuture;
63 }
64
65 Runnable timeout = new Runnable() {
66
67 @SuppressWarnings("rawtypes")
68 @Override
69 public void run() {
70 Map inFlight = session.getAttribute(RequestFilter.IN_FLIGHT_REQUESTS);
71 if (inFlight != null) {
72 inFlight.remove(id);
73 }
74 setException(new RequestTimeoutException());
75
76 }
77 };
78 }