📄 aprsession.java
字号:
/* * 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.socket.apr;import java.net.InetSocketAddress;import org.apache.mina.core.filterchain.DefaultIoFilterChain;import org.apache.mina.core.filterchain.IoFilterChain;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.session.AbstractIoSession;import org.apache.mina.core.session.IoSession;import org.apache.tomcat.jni.Address;import org.apache.tomcat.jni.Socket;/** * An abstract {@link IoSession} serving of base for APR based sessions. * * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 671930 $, $Date: 2008-06-26 17:58:30 +0200 (Thu, 26 Jun 2008) $ */public abstract class AprSession extends AbstractIoSession { // good old socket descriptor private long descriptor; // the service handling this session private final IoService service; // the processor processing this session private final IoProcessor<AprSession> processor; // the mandatory filter chain of this session private final IoFilterChain filterChain = new DefaultIoFilterChain(this); // handler listeneing this session event private final IoHandler handler; // the two endpoint addresses private final InetSocketAddress remoteAddress; private final InetSocketAddress localAddress; // current polling results private boolean readable = true; private boolean writable = true; private boolean interestedInRead; private boolean interestedInWrite; /** * Creates a new instance of {@link AprSession}. Need to be called by extending types * @param service the {@link IoService} creating this session. Can be {@link AprSocketAcceptor} or * {@link AprSocketConnector} * @param processor the {@link AprIoProcessor} managing this session. * @param descriptor the low level APR socket descriptor for this socket. {@see Socket#create(int, int, int, long)} * @throws Exception exception produced during the setting of all the socket parameters. */ AprSession( IoService service, IoProcessor<AprSession> processor, long descriptor) throws Exception { this.service = service; this.processor = processor; this.handler = service.getHandler(); this.descriptor = descriptor; long ra = Address.get(Socket.APR_REMOTE, descriptor); long la = Address.get(Socket.APR_LOCAL, descriptor); this.remoteAddress = new InetSocketAddress(Address.getip(ra), Address.getInfo(ra).port); this.localAddress = new InetSocketAddress(Address.getip(la), Address.getInfo(la).port); } /** * Creates a new instance of {@link AprSession}. Need to be called by extending types. * The constructor add remote address for UDP based sessions. * @param service the {@link IoService} creating this session. Can be {@link AprSocketAcceptor} or * {@link AprSocketConnector} * @param processor the {@link AprIoProcessor} managing this session. * @param descriptor the low level APR socket descriptor for this socket. {@see Socket#create(int, int, int, long)} * @param remoteAddress the remote end-point * @throws Exception exception produced during the setting of all the socket parameters. */ AprSession( IoService service, IoProcessor<AprSession> processor, long descriptor, InetSocketAddress remoteAddress) throws Exception { this.service = service; this.processor = processor; this.handler = service.getHandler(); this.descriptor = descriptor; long la = Address.get(Socket.APR_LOCAL, descriptor); this.remoteAddress = remoteAddress; this.localAddress = new InetSocketAddress(Address.getip(la), Address.getInfo(la).port); } /** * Get the socket descriptor {@see Socket#create(int, int, int, long)}. * @return the low level APR socket descriptor */ long getDescriptor() { return descriptor; } /** * Set the socket descriptor. * @param desc the low level APR socket descriptor created by {@see Socket#create(int, int, int, long)} */ void setDescriptor(long desc) { this.descriptor = desc; } /** * {@inheritDoc} */ @Override public IoProcessor<AprSession> getProcessor() { return processor; } /** * {@inheritDoc} */ public InetSocketAddress getLocalAddress() { return localAddress; } /** * {@inheritDoc} */ public InetSocketAddress getRemoteAddress() { return remoteAddress; } /** * {@inheritDoc} */ public IoFilterChain getFilterChain() { return filterChain; } /** * {@inheritDoc} */ public IoHandler getHandler() { return handler; } /** * {@inheritDoc} */ public IoService getService() { return service; } /** * {@inheritDoc} */ @Override public InetSocketAddress getServiceAddress() { return (InetSocketAddress) super.getServiceAddress(); } /** * Is this session was tagged are readable after a call to {@link Socket#pool(long)}. * @return true if this session is ready for read operations */ boolean isReadable() { return readable; } /** * Set if this session is readable after a call to {@link Socket#pool(long)}. * @param readable true for set this session ready for read operations */ void setReadable(boolean readable) { this.readable = readable; } /** * Is this session is tagged writable after a call to {@link Socket#pool(long)}. * @return true if this session is ready for write operations */ boolean isWritable() { return writable; } /** * Set if this session is writable after a call to {@link Socket#pool(long)}. * @param writable true for set this session ready for write operations */ void setWritable(boolean writable) { this.writable = writable; } /** * Does this session needs to be registered for read events. * Used for building poll set {@see Poll}. * @return true if registered */ boolean isInterestedInRead() { return interestedInRead; } /** * Set if this session needs to be registered for read events. * Used for building poll set {@see Poll}. * @param isOpRead true if need to be registered */ void setInterestedInRead(boolean isOpRead) { this.interestedInRead = isOpRead; } /** * Does this session needs to be registered for write events. * Used for building poll set {@see Poll}. * @return true if registered */ boolean isInterestedInWrite() { return interestedInWrite; } /** * Set if this session needs to be registered for write events. * Used for building poll set {@see Poll}. * @param isOpWrite true if need to be registered */ void setInterestedInWrite(boolean isOpWrite) { this.interestedInWrite = isOpWrite; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -