| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| */ |
| package org.apache.mina.transport.vmpipe; |
| |
| import java.util.concurrent.BlockingQueue; |
| import java.util.concurrent.LinkedBlockingQueue; |
| import java.util.concurrent.locks.Lock; |
| import java.util.concurrent.locks.ReentrantLock; |
| |
| import org.apache.mina.core.filterchain.IoFilterChain; |
| import org.apache.mina.core.service.DefaultTransportMetadata; |
| import org.apache.mina.core.service.IoHandler; |
| import org.apache.mina.core.service.IoProcessor; |
| import org.apache.mina.core.service.IoService; |
| import org.apache.mina.core.service.IoServiceListenerSupport; |
| import org.apache.mina.core.service.TransportMetadata; |
| import org.apache.mina.core.session.AbstractIoSession; |
| import org.apache.mina.core.session.IoSession; |
| import org.apache.mina.core.write.WriteRequestQueue; |
| |
| /** |
| * A {@link IoSession} for in-VM transport (VM_PIPE). |
| * |
| * @author <a href="http://mina.apache.org">Apache MINA Project</a> |
| */ |
| class VmPipeSession extends AbstractIoSession { |
| |
| static final TransportMetadata METADATA = new DefaultTransportMetadata("mina", "vmpipe", false, false, |
| VmPipeAddress.class, VmPipeSessionConfig.class, Object.class); |
| |
| private final IoServiceListenerSupport serviceListeners; |
| |
| private final VmPipeAddress localAddress; |
| |
| private final VmPipeAddress remoteAddress; |
| |
| private final VmPipeAddress serviceAddress; |
| |
| private final VmPipeFilterChain filterChain; |
| |
| private final VmPipeSession remoteSession; |
| |
| private final Lock lock; |
| |
| /** Package protected*/ final BlockingQueue<Object> receivedMessageQueue; |
| |
| /* |
| * Constructor for client-side session. |
| */ |
| VmPipeSession(IoService service, IoServiceListenerSupport serviceListeners, VmPipeAddress localAddress, |
| IoHandler handler, VmPipe remoteEntry) { |
| super(service); |
| config = new DefaultVmPipeSessionConfig(); |
| this.serviceListeners = serviceListeners; |
| lock = new ReentrantLock(); |
| this.localAddress = localAddress; |
| remoteAddress = serviceAddress = remoteEntry.getAddress(); |
| filterChain = new VmPipeFilterChain(this); |
| receivedMessageQueue = new LinkedBlockingQueue<>(); |
| |
| remoteSession = new VmPipeSession(this, remoteEntry); |
| } |
| |
| /* |
| * Constructor for server-side session. |
| */ |
| private VmPipeSession(VmPipeSession remoteSession, VmPipe entry) { |
| super(entry.getAcceptor()); |
| config = new DefaultVmPipeSessionConfig(); |
| serviceListeners = entry.getListeners(); |
| lock = remoteSession.lock; |
| localAddress = serviceAddress = remoteSession.remoteAddress; |
| remoteAddress = remoteSession.localAddress; |
| filterChain = new VmPipeFilterChain(this); |
| this.remoteSession = remoteSession; |
| receivedMessageQueue = new LinkedBlockingQueue<>(); |
| } |
| |
| @Override |
| public IoProcessor<VmPipeSession> getProcessor() { |
| return filterChain.getProcessor(); |
| } |
| |
| IoServiceListenerSupport getServiceListeners() { |
| return serviceListeners; |
| } |
| |
| public VmPipeSessionConfig getConfig() { |
| return (VmPipeSessionConfig) config; |
| } |
| |
| public IoFilterChain getFilterChain() { |
| return filterChain; |
| } |
| |
| public VmPipeSession getRemoteSession() { |
| return remoteSession; |
| } |
| |
| public TransportMetadata getTransportMetadata() { |
| return METADATA; |
| } |
| |
| public VmPipeAddress getRemoteAddress() { |
| return remoteAddress; |
| } |
| |
| public VmPipeAddress getLocalAddress() { |
| return localAddress; |
| } |
| |
| @Override |
| public VmPipeAddress getServiceAddress() { |
| return serviceAddress; |
| } |
| |
| void increaseWrittenBytes0(int increment, long currentTime) { |
| super.increaseWrittenBytes(increment, currentTime); |
| } |
| |
| WriteRequestQueue getWriteRequestQueue0() { |
| return super.getWriteRequestQueue(); |
| } |
| |
| Lock getLock() { |
| return lock; |
| } |
| } |