Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * 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.tomcat.websocket;
 
 import  java.nio.channels.CompletionHandler;
 
 
 public class WsFrameClient extends WsFrameBase {
 
     private final AsyncChannelWrapper channel;
     private final CompletionHandler<Integer,Voidhandler;
     // Not final as it may need to be re-sized
     private ByteBuffer response;
 
     public WsFrameClient(ByteBuffer responseAsyncChannelWrapper channel,
             WsSession wsSession) {
         super(wsSession);
         this. = response;
         this. = channel;
         this. = new WsFrameClientCompletionHandler();
 
         try {
             processSocketRead();
         } catch (IOException e) {
             close(e);
         }
     }
 
 
     private void processSocketRead() throws IOException {
 
         while (.hasRemaining()) {
             int remaining = .remaining();
 
             int toCopy = Math.min(remaining. - );
 
             // Copy remaining bytes read in HTTP phase to input buffer used by
             // frame processing
             .get(toCopy);
              += toCopy;
 
             // Process the data we have
             processInputBuffer();
         }
         .clear();
 
         // Get some more data
         if (isOpen()) {
             .read(null);
         }
     }
 
 
     private final void close(Throwable t) {
         CloseReason cr;
         if (t instanceof WsIOException) {
             cr = ((WsIOExceptiont).getCloseReason();
         } else {
             cr = new CloseReason(
                 .t.getMessage());
         }
 
         try {
             .close(cr);
         } catch (IOException ignore) {
             // Ignore
         }
     }
 
 
     @Override
     protected boolean isMasked() {
         // Data is from the server so it is not masked
         return false;
     }
 
 
     private class WsFrameClientCompletionHandler
             implements CompletionHandler<Integer,Void> {
 
         @Override
        public void completed(Integer resultVoid attachment) {
            .flip();
            try {
                processSocketRead();
            } catch (IOException e) {
                // Only send a close message on an IOException if the client
                // has not yet received a close control message from the server
                // as the IOException may be in response to the client
                // continuing to send a message after the server sent a close
                // control message.
                if (isOpen()) {
                    close(e);
                }
            }
        }
        @Override
        public void failed(Throwable excVoid attachment) {
            if (exc instanceof ReadBufferOverflowException) {
                // response will be empty if this exception is thrown
                 = ByteBuffer.allocate(
                        ((ReadBufferOverflowExceptionexc).getMinBufferSize());
                .flip();
                try {
                    processSocketRead();
                } catch (IOException e) {
                    close(e);
                }
            } else {
                close(exc);
            }
        }
    }
New to GrepCode? Check out our FAQ X