1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.transport.vmpipe;
21
22 import java.util.concurrent.BlockingQueue;
23 import java.util.concurrent.LinkedBlockingQueue;
24 import java.util.concurrent.locks.Lock;
25 import java.util.concurrent.locks.ReentrantLock;
26
27 import org.apache.mina.core.filterchain.IoFilterChain;
28 import org.apache.mina.core.service.DefaultTransportMetadata;
29 import org.apache.mina.core.service.IoHandler;
30 import org.apache.mina.core.service.IoProcessor;
31 import org.apache.mina.core.service.IoService;
32 import org.apache.mina.core.service.IoServiceListenerSupport;
33 import org.apache.mina.core.service.TransportMetadata;
34 import org.apache.mina.core.session.AbstractIoSession;
35 import org.apache.mina.core.session.IoSession;
36 import org.apache.mina.core.write.WriteRequestQueue;
37
38
39
40
41
42
43 class VmPipeSession extends AbstractIoSession {
44
45 static final TransportMetadata METADATA =
46 new DefaultTransportMetadata(
47 "mina", "vmpipe", false, false,
48 VmPipeAddress.class,
49 VmPipeSessionConfig.class,
50 Object.class);
51
52 private static final VmPipeSessionConfig CONFIG = new DefaultVmPipeSessionConfig();
53
54 private final IoService service;
55
56 private final IoServiceListenerSupport serviceListeners;
57
58 private final VmPipeAddress localAddress;
59
60 private final VmPipeAddress remoteAddress;
61
62 private final VmPipeAddress serviceAddress;
63
64 private final IoHandler handler;
65
66 private final VmPipeFilterChain filterChain;
67
68 private final VmPipeSession remoteSession;
69
70 private final Lock lock;
71
72 final BlockingQueue<Object> receivedMessageQueue;
73
74
75
76
77 VmPipeSession(IoService service,
78 IoServiceListenerSupport serviceListeners,
79 VmPipeAddress localAddress, IoHandler handler, VmPipe remoteEntry) {
80 this.service = service;
81 this.serviceListeners = serviceListeners;
82 lock = new ReentrantLock();
83 this.localAddress = localAddress;
84 remoteAddress = serviceAddress = remoteEntry.getAddress();
85 this.handler = handler;
86 filterChain = new VmPipeFilterChain(this);
87 receivedMessageQueue = new LinkedBlockingQueue<Object>();
88
89 remoteSession = new VmPipeSession(this, remoteEntry);
90 }
91
92
93
94
95 private VmPipeSession(VmPipeSession remoteSession, VmPipe entry) {
96 service = entry.getAcceptor();
97 serviceListeners = entry.getListeners();
98 lock = remoteSession.lock;
99 localAddress = serviceAddress = remoteSession.remoteAddress;
100 remoteAddress = remoteSession.localAddress;
101 handler = entry.getHandler();
102 filterChain = new VmPipeFilterChain(this);
103 this.remoteSession = remoteSession;
104 receivedMessageQueue = new LinkedBlockingQueue<Object>();
105 }
106
107 public IoService getService() {
108 return service;
109 }
110
111 @Override
112 public IoProcessor<VmPipeSession> getProcessor() {
113 return filterChain.getProcessor();
114 }
115
116 IoServiceListenerSupport getServiceListeners() {
117 return serviceListeners;
118 }
119
120 public VmPipeSessionConfig getConfig() {
121 return CONFIG;
122 }
123
124 public IoFilterChain getFilterChain() {
125 return filterChain;
126 }
127
128 public VmPipeSession getRemoteSession() {
129 return remoteSession;
130 }
131
132 public IoHandler getHandler() {
133 return handler;
134 }
135
136 public TransportMetadata getTransportMetadata() {
137 return METADATA;
138 }
139
140 public VmPipeAddress getRemoteAddress() {
141 return remoteAddress;
142 }
143
144 public VmPipeAddress getLocalAddress() {
145 return localAddress;
146 }
147
148 @Override
149 public VmPipeAddress getServiceAddress() {
150 return serviceAddress;
151 }
152
153 void increaseWrittenBytes0(int increment, long currentTime) {
154 super.increaseWrittenBytes(increment, currentTime);
155 }
156
157 WriteRequestQueue getWriteRequestQueue0() {
158 return super.getWriteRequestQueue();
159 }
160
161 Lock getLock() {
162 return lock;
163 }
164 }