1/* 2 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package jdk.incubator.http.internal.websocket; 27 28import java.io.Closeable; 29import java.io.IOException; 30import java.nio.ByteBuffer; 31import java.nio.channels.ClosedChannelException; 32 33/* 34 * I/O abstraction used to implement WebSocket. 35 * 36 * @since 9 37 */ 38public interface RawChannel extends Closeable { 39 40 interface Provider { 41 42 RawChannel rawChannel() throws IOException; 43 } 44 45 interface RawEvent { 46 47 /* 48 * Returns the selector op flags this event is interested in. 49 */ 50 int interestOps(); 51 52 /* 53 * Called when event occurs. 54 */ 55 void handle(); 56 } 57 58 /* 59 * Registers given event whose callback will be called once only (i.e. 60 * register new event for each callback). 61 * 62 * Memory consistency effects: actions in a thread calling registerEvent 63 * happen-before any subsequent actions in the thread calling event.handle 64 */ 65 void registerEvent(RawEvent event) throws IOException; 66 67 /** 68 * Hands over the initial bytes. Once the bytes have been returned they are 69 * no longer available and the method will throw an {@link 70 * IllegalStateException} on each subsequent invocation. 71 * 72 * @return the initial bytes 73 * @throws IllegalStateException 74 * if the method has been already invoked 75 */ 76 ByteBuffer initialByteBuffer() throws IllegalStateException; 77 78 /* 79 * Returns a ByteBuffer with the data read or null if EOF is reached. Has no 80 * remaining bytes if no data available at the moment. 81 */ 82 ByteBuffer read() throws IOException; 83 84 /* 85 * Writes a sequence of bytes to this channel from a subsequence of the 86 * given buffers. 87 */ 88 long write(ByteBuffer[] srcs, int offset, int length) throws IOException; 89 90 /** 91 * Shutdown the connection for reading without closing the channel. 92 * 93 * <p> Once shutdown for reading then further reads on the channel will 94 * return {@code null}, the end-of-stream indication. If the input side of 95 * the connection is already shutdown then invoking this method has no 96 * effect. 97 * 98 * @throws ClosedChannelException 99 * If this channel is closed 100 * @throws IOException 101 * If some other I/O error occurs 102 */ 103 void shutdownInput() throws IOException; 104 105 /** 106 * Shutdown the connection for writing without closing the channel. 107 * 108 * <p> Once shutdown for writing then further attempts to write to the 109 * channel will throw {@link ClosedChannelException}. If the output side of 110 * the connection is already shutdown then invoking this method has no 111 * effect. 112 * 113 * @throws ClosedChannelException 114 * If this channel is closed 115 * @throws IOException 116 * If some other I/O error occurs 117 */ 118 void shutdownOutput() throws IOException; 119 120 /** 121 * Closes this channel. 122 * 123 * @throws IOException 124 * If an I/O error occurs 125 */ 126 @Override 127 void close() throws IOException; 128} 129