⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aprsession.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 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 + -