/branches/sr-1.0.2.1/util/src/main/java/etch/util/core/nio/StreamHandler.java
Java | 106 lines | 50 code | 13 blank | 43 comment | 2 complexity | ecb85909645f27e86025191250648a05 MD5 | raw file
Possible License(s): Apache-2.0
- /* $Id: StreamHandler.java 719414 2008-11-20 22:50:55Z sccomer $
- *
- * Copyright 2007-2008 Cisco Systems Inc.
- *
- * Licensed 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 etch.util.core.nio;
- import java.io.IOException;
- import java.nio.ByteBuffer;
- import java.nio.channels.SocketChannel;
- /**
- * Handler for TCP stream channels.
- */
- public class StreamHandler extends AbstractHandler<SocketChannel>
- {
- /**
- * Constructs the StreamHandler.
- * @param channel
- * @param wantsConnect
- * @throws IOException
- */
- public StreamHandler( SocketChannel channel, boolean wantsConnect )
- throws IOException
- {
- super( channel );
-
- this.wantsConnect = wantsConnect;
-
- if (!wantsConnect)
- connected();
- }
-
- private boolean wantsConnect;
-
- @Override
- protected final boolean canConnect()
- {
- return wantsConnect;
- }
-
- protected final void doConnect() throws IOException
- {
- wantsConnect = !channel().finishConnect();
-
- if (!wantsConnect)
- connected();
- }
-
- protected void connected() throws IOException
- {
- // nothing to do.
- }
- /**
- * Reads from the channel of this handler.
- * @param rbuf the ByteBuffer to read into.
- * @return the count of bytes read.
- * @throws IOException
- */
- public int read( ByteBuffer rbuf ) throws IOException
- {
- return channel().read( rbuf );
- }
- /**
- * Writes to the channel of this handler.
- * @param wbuf the ByteBuffer to write from. It is flipped first, and
- * compacted after.
- * @return the count of bytes written.
- * @throws IOException
- */
- public int write( ByteBuffer wbuf ) throws IOException
- {
- try
- {
- wbuf.flip();
- return wbuf.hasRemaining() ? channel().write( wbuf ) : 0;
- }
- finally
- {
- wbuf.compact();
- }
- }
- /**
- * Shuts down output on the channel of this handler.
- * @throws IOException
- */
- public void shutdownOutput() throws IOException
- {
- channel().socket().shutdownOutput();
- }
- }