View Javadoc

    1   /*
    2    *  Licensed to the Apache Software Foundation (ASF) under one
    3    *  or more contributor license agreements.  See the NOTICE file
    4    *  distributed with this work for additional information
    5    *  regarding copyright ownership.  The ASF licenses this file
    6    *  to you under the Apache License, Version 2.0 (the
    7    *  "License"); you may not use this file except in compliance
    8    *  with the License.  You may obtain a copy of the License at
    9    *
    10   *    http://www.apache.org/licenses/LICENSE-2.0
    11   *
    12   *  Unless required by applicable law or agreed to in writing,
    13   *  software distributed under the License is distributed on an
    14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    15   *  KIND, either express or implied.  See the License for the
    16   *  specific language governing permissions and limitations
    17   *  under the License.
    18   *
    19   */
    20  package org.apache.mina.transport.socket.nio;
    21
    22  import java.nio.channels.ByteChannel;
    23  import java.nio.channels.Channel;
    24  import java.nio.channels.SelectionKey;
    25
    26  import org.apache.mina.core.filterchain.DefaultIoFilterChain;
    27  import org.apache.mina.core.filterchain.IoFilterChain;
    28  import org.apache.mina.core.service.IoProcessor;
    29  import org.apache.mina.core.service.IoService;
    30  import org.apache.mina.core.session.AbstractIoSession;
    31  import org.apache.mina.core.session.IoSession;
    32
    33  /**
    34   * An {@link IoSession} which is managed by the NIO transport.
    35   *
    36   * @author <a href="http://mina.apache.org">Apache MINA Project</a>
    37   */
    38  public abstract class NioSession extends AbstractIoSession {
    39      /** The NioSession processor */
    40      protected final IoProcessor<NioSession> processor;
    41
    42      /** The communication channel */
    43      protected final Channel channel;
    44
    45      /** The SelectionKey used for this session */
    46      protected SelectionKey key;
    47
    48      /** The FilterChain created for this session */
    49      private final IoFilterChain filterChain;
    50
    51      /**
    52       *
    53       * Creates a new instance of NioSession, with its associated IoProcessor.
    54       * <br>
    55       * This method is only called by the inherited class.
    56       *
    57       * @param processor The associated IoProcessor
    58       */
    59      protected NioSession(IoProcessor<NioSession> processor, IoService service, Channel channel) {
    60          super(service);
    61          this.channel = channel;
    62          this.processor = processor;
    63          filterChain = new DefaultIoFilterChain(this);
    64      }
    65
    66      /**
    67       * @return The ByteChannel associated with this {@link IoSession}
    68       */
    69      abstract ByteChannel getChannel();
    70
    71      public IoFilterChain getFilterChain() {
    72          return filterChain;
    73      }
    74
    75      /**
    76       * @return The {@link SelectionKey} associated with this {@link IoSession}
    77       */
    78      /* No qualifier*/SelectionKey getSelectionKey() {
    79          return key;
    80      }
    81
    82      /**
    83       * Sets the {@link SelectionKey} for this {@link IoSession}
    84       *
    85       * @param key The new {@link SelectionKey}
    86       */
    87      /* No qualifier*/void setSelectionKey(SelectionKey key) {
    88          this.key = key;
    89      }
    90
    91      /**
    92       * {@inheritDoc}
    93       */
    94      public IoProcessor<NioSession> getProcessor() {
    95          return processor;
    96      }
    97  }